diff --git a/osmclient/scripts/osm.py b/osmclient/scripts/osm.py
index 601d428..1fe8c36 100755
--- a/osmclient/scripts/osm.py
+++ b/osmclient/scripts/osm.py
@@ -25,6 +25,7 @@
 import yaml
 import json
 import time
+import pycurl
 
 def check_client_version(obj, what, version='sol005'):
     '''
@@ -45,7 +46,7 @@
 
 @click.group()
 @click.option('--hostname',
-              default=None,
+              default="127.0.0.1",
               envvar='OSM_HOSTNAME',
               help='hostname of server.  ' +
                    'Also can set OSM_HOSTNAME in environment')
@@ -89,7 +90,7 @@
         kwargs['ro_host']=ro_hostname
     if ro_port is not None:
         kwargs['ro_port']=ro_port
-    
+
     ctx.obj = client.Client(host=hostname, sol005=sol005, **kwargs)
 
 
@@ -99,10 +100,56 @@
 
 @cli.command(name='ns-list')
 @click.option('--filter', default=None,
-              help='restricts the list to the NS instances matching the filter')
+              help='restricts the list to the NS instances matching the filter.')
 @click.pass_context
 def ns_list(ctx, filter):
-    '''list all NS instances'''
+    '''list all NS instances
+
+    \b
+    Options:
+      --filter filterExpr    Restricts the list to the NS instances matching the filter
+
+    \b
+    filterExpr consists of one or more strings formatted according to "simpleFilterExpr",
+    concatenated using the "&" character:
+
+      \b
+      filterExpr := <simpleFilterExpr>["&"<simpleFilterExpr>]*
+      simpleFilterExpr := <attrName>["."<attrName>]*["."<op>]"="<value>[","<value>]*
+      op := "eq" | "neq" | "gt" | "lt" | "gte" | "lte" | "cont" | "ncont"
+      attrName := string
+      value := scalar value
+
+    \b
+    where:
+      * zero or more occurrences
+      ? zero or one occurrence
+      [] grouping of expressions to be used with ? and *
+      "" quotation marks for marking string constants
+      <> name separator
+
+    \b
+    "AttrName" is the name of one attribute in the data type that defines the representation
+    of the resource. The dot (".") character in "simpleFilterExpr" allows concatenation of
+    <attrName> entries to filter by attributes deeper in the hierarchy of a structured document.
+    "Op" stands for the comparison operator. If the expression has concatenated <attrName>
+    entries, it means that the operator "op" is applied to the attribute addressed by the last
+    <attrName> entry included in the concatenation. All simple filter expressions are combined
+    by the "AND" logical operator. In a concatenation of <attrName> entries in a <simpleFilterExpr>,
+    the rightmost "attrName" entry in a "simpleFilterExpr" is called "leaf attribute". The
+    concatenation of all "attrName" entries except the leaf attribute is called the "attribute
+    prefix". If an attribute referenced in an expression is an array, an object that contains a
+    corresponding array shall be considered to match the expression if any of the elements in the
+    array matches all expressions that have the same attribute prefix.
+
+    \b
+    Filter examples:
+       --filter  admin-status=ENABLED
+       --filter  nsd-ref=<NSD_NAME>
+       --filter  nsd.vendor=<VENDOR>
+       --filter  nsd.vendor=<VENDOR>&nsd-ref=<NSD_NAME>
+       --filter  nsd.constituent-vnfd.vnfd-id-ref=<VNFD_NAME>
+     '''
     if filter:
         check_client_version(ctx.obj, '--filter')
         resp = ctx.obj.ns.list(filter)
@@ -218,13 +265,64 @@
 
 @cli.command(name='vnf-list')
 @click.option('--ns', default=None, help='NS instance id or name to restrict the VNF list')
+@click.option('--filter', default=None,
+              help='restricts the list to the VNF instances matching the filter.')
 @click.pass_context
-def vnf_list(ctx, ns):
-    ''' list all VNF instances'''
+def vnf_list(ctx, ns, filter):
+    '''list all VNF instances
+
+    \b
+    Options:
+      --ns     TEXT           NS instance id or name to restrict the VNF list
+      --filter filterExpr     Restricts the list to the VNF instances matching the filter
+
+    \b
+    filterExpr consists of one or more strings formatted according to "simpleFilterExpr",
+    concatenated using the "&" character:
+
+      \b
+      filterExpr := <simpleFilterExpr>["&"<simpleFilterExpr>]*
+      simpleFilterExpr := <attrName>["."<attrName>]*["."<op>]"="<value>[","<value>]*
+      op := "eq" | "neq" | "gt" | "lt" | "gte" | "lte" | "cont" | "ncont"
+      attrName := string
+      value := scalar value
+
+    \b
+    where:
+      * zero or more occurrences
+      ? zero or one occurrence
+      [] grouping of expressions to be used with ? and *
+      "" quotation marks for marking string constants
+      <> name separator
+
+    \b
+    "AttrName" is the name of one attribute in the data type that defines the representation
+    of the resource. The dot (".") character in "simpleFilterExpr" allows concatenation of
+    <attrName> entries to filter by attributes deeper in the hierarchy of a structured document.
+    "Op" stands for the comparison operator. If the expression has concatenated <attrName>
+    entries, it means that the operator "op" is applied to the attribute addressed by the last
+    <attrName> entry included in the concatenation. All simple filter expressions are combined
+    by the "AND" logical operator. In a concatenation of <attrName> entries in a <simpleFilterExpr>,
+    the rightmost "attrName" entry in a "simpleFilterExpr" is called "leaf attribute". The
+    concatenation of all "attrName" entries except the leaf attribute is called the "attribute
+    prefix". If an attribute referenced in an expression is an array, an object that contains a
+    corresponding array shall be considered to match the expression if any of the elements in the
+    array matches all expressions that have the same attribute prefix.
+
+    \b
+    Filter examples:
+       --filter  vim-account-id=<VIM_ACCOUNT_ID>
+       --filter  vnfd-ref=<VNFD_NAME>
+       --filter  vdur.ip-address=<IP_ADDRESS>
+       --filter  vnfd-ref=<VNFD_NAME>,vdur.ip-address=<IP_ADDRESS>
+    '''
     try:
-        if ns:
-            check_client_version(ctx.obj, '--ns')
-            resp = ctx.obj.vnf.list(ns)
+        if ns or filter:
+            if ns:
+                check_client_version(ctx.obj, '--ns')
+            if filter:
+                check_client_version(ctx.obj, '--filter')
+            resp = ctx.obj.vnf.list(ns, filter)
         else:
             resp = ctx.obj.vnf.list()
     except ClientException as inst:
@@ -607,11 +705,13 @@
               help='administration status')
 @click.option('--ssh_keys',
               default=None,
-              help='comma separated list of keys to inject to vnfs')
+              help='comma separated list of public key files to inject to vnfs')
 @click.option('--config',
               default=None,
-              help='ns specific yaml configuration:\nvnf: [member-vnf-index: TEXT, vim_account: TEXT]\n'
-              'vld: [name: TEXT, vim-network-name: TEXT or DICT with vim_account, vim_net entries]')
+              help='ns specific yaml configuration')
+@click.option('--config_file',
+              default=None,
+              help='ns specific yaml configuration file')
 @click.pass_context
 def ns_create(ctx,
               nsd_name,
@@ -619,11 +719,16 @@
               vim_account,
               admin_status,
               ssh_keys,
-              config):
+              config,
+              config_file):
     '''creates a new NS instance'''
     try:
-        # if config:
-        #     check_client_version(ctx.obj, '--config', 'v1')
+        if config_file:
+            check_client_version(ctx.obj, '--config_file')
+            if config:
+                raise ClientException('"--config" option is incompatible with "--config_file" option')
+            with open(config_file, 'r') as cf:
+                config=cf.read()
         ctx.obj.ns.create(
             nsd_name,
             ns_name,
@@ -807,7 +912,7 @@
 ####################
 # VIM operations
 ####################
- 
+
 @cli.command(name='vim-create')
 @click.option('--name',
               prompt=True,
@@ -1503,4 +1608,11 @@
 
 
 if __name__ == '__main__':
-    cli()
+    try:
+        cli()
+    except pycurl.error as e:
+        print(e)
+        print('Maybe "--hostname" option or OSM_HOSTNAME' +
+            'environment variable needs to be specified')
+        exit(1)
+
diff --git a/osmclient/sol005/vnf.py b/osmclient/sol005/vnf.py
index 11d2057..9875d39 100644
--- a/osmclient/sol005/vnf.py
+++ b/osmclient/sol005/vnf.py
@@ -33,13 +33,18 @@
         self._apiBase = '{}{}{}'.format(self._apiName,
                                         self._apiVersion, self._apiResource)
 
-    def list(self, ns=None):
+    def list(self, ns=None, filter=None):
         """Returns a list of VNF instances
         """
         filter_string = ''
+        if filter:
+            filter_string = '?{}'.format(filter)
         if ns:
             ns_instance = self._client.ns.get(ns)
-            filter_string = '?nsr-id-ref={}'.format(ns_instance['_id'])
+            if filter_string:
+                filter_string += ',nsr-id-ref={}'.format(ns_instance['_id'])
+            else:
+                filter_string = '?nsr-id-ref={}'.format(ns_instance['_id'])
         resp = self._http.get_cmd('{}{}'.format(self._apiBase,filter_string))
         #print 'RESP: {}'.format(resp)
         if resp:
