diff --git a/_modules/reclass.py b/_modules/reclass.py
index e5055aa..3cefbad 100644
--- a/_modules/reclass.py
+++ b/_modules/reclass.py
@@ -16,7 +16,8 @@
 import yaml
 import re
 
-from urlparse import urlparse
+import urlparse
+
 from reclass import get_storage, output
 from reclass.adapters.salt import ext_pillar
 from reclass.core import Core
@@ -168,25 +169,9 @@
     return node_meta
 
 
-def validate_yaml_syntax():
-    '''
-    Returns list of yaml files with syntax errors
-
-    CLI Examples:
-
-    .. code-block:: bash
-
-        salt '*' reclass.validate_yaml_syntax
-    '''
-    errors = _deps(ret_classes=False, ret_errors=True)
-    if errors:
-        ret = {'Errors': errors}
-        return ret
-
-
 def soft_meta_list():
     '''
-    Returns params list
+    Returns all defined soft metadata parameters.
 
     CLI Examples:
 
@@ -199,7 +184,7 @@
 
 def class_list():
     '''
-    Returns classes list
+    Returns list of all classes defined within reclass inventory.
 
     CLI Examples:
 
@@ -212,28 +197,30 @@
 
 def soft_meta_get(name):
     '''
-    :param name: expects the following format: apt_mk_version
+    Returns single soft metadata parameter.
 
-    Returns detail of the params
+    :param name: expects the following format: apt_mk_version
 
     CLI Examples:
 
     .. code-block:: bash
 
-        salt '*' reclass.soft_meta_get apt_mk_version
+        salt '*' reclass.soft_meta_get openstack_version
     '''
     soft_params = _deps(ret_classes=False)
 
     if name in soft_params:
-      return {name: soft_params.get(name)}
+        return {name: soft_params.get(name)}
     else:
-      return {'Error': 'No param {0} found'.format(name)}
+        return {'Error': 'No param {0} found'.format(name)}
+
 
 def class_get(name):
     '''
+    Returns detailes information about class file in reclass inventory.
+
     :param name: expects the following format classes.system.linux.repo
 
-    Returns detail data of the class
     CLI Examples:
 
     .. code-block:: bash
@@ -243,10 +230,9 @@
     classes = _deps(ret_classes=True)
     tmp_name = '.' + name
     if tmp_name in classes:
-      return {name: classes.get(tmp_name)}
+        return {name: classes.get(tmp_name)}
     else:
-      return {'Error': 'No class {0} found'.format(name)}
-
+        return {'Error': 'No class {0} found'.format(name)}
 
 
 def node_create(name, path=None, cluster="default", environment="prd", classes=None, parameters=None, **kwargs):
@@ -455,10 +441,10 @@
                 host = _guess_host_from_target(network_grains, relation.pop('host_from_target'))
                 relation['host'] = host
             if relation.get('host_external', None):
-                parsed_host_external = [urlparse(item).netloc
+                parsed_host_external = [urlparse.urlparse(item).netloc
                                         for item
                                         in relation.get('host_external', '').split(' ')
-                                        if urlparse(item).netloc]
+                                        if urlparse.urlparse(item).netloc]
                 service = parsed_host_external[0] if parsed_host_external else ''
                 host = relation.get('service', '')
                 relation['host'] = host
@@ -665,10 +651,28 @@
     return ret
 
 
-def validate_node_params(node_name, **kwargs):
+def validate_yaml():
     '''
-    Validates if pillar of a node is in correct state.
-    Returns error message only if error occurred.
+    Returns list of all reclass YAML files that contain syntax
+    errors.
+
+    CLI Examples:
+
+    .. code-block:: bash
+
+        salt-call reclass.validate_yaml
+    '''
+    errors = _deps(ret_classes=False, ret_errors=True)
+    if errors:
+        ret = {'Errors': errors}
+        return ret
+
+
+def validate_pillar(node_name=None, **kwargs):
+    '''
+    Validates whether the pillar of given node is in correct state.
+    If node is not specified it validates pillars of all known nodes.
+    Returns error message for every node with currupted metadata.
 
     :param node_name: target minion ID
 
@@ -676,51 +680,40 @@
 
     .. code-block:: bash
 
-        salt-call reclass.validate_node_params minion_id
-
+        salt-call reclass.validate_pillar
+        salt-call reclass.validate_pillar minion-id
     '''
-    defaults = find_and_read_configfile()
-    meta = ''
-    error = None
-    try:
-        pillar = ext_pillar(node_name, {}, defaults['storage_type'], defaults['inventory_base_uri'])
-    except (ReclassException, Exception) as e:
-        msg = "Validation failed in %s on %s" % (repr(e), node_name)
-        LOG.error(msg)
-        meta = {'Error': msg}
-        s = str(type(e))
-        if 'yaml.scanner.ScannerError' in s:
-            error = re.sub(r"\r?\n?$", "", repr(str(e)), 1)
-        else:
-            error = e.message
-    if 'Error' in meta:
-        ret = {node_name: error}
+    if node_name is None:
+        ret={}
+        nodes = node_list(**kwargs)
+        for node_name, node in nodes.items():
+                ret.update(validate_pillar(node_name))
+        return ret
     else:
-        ret = {node_name: ''}
-    return ret
-
-
-def validate_nodes_params(**connection_args):
-    '''
-    Validates if pillar all known nodes is in correct state.
-    Returns error message for every node where problem occurred.
-
-    CLI Examples:
-
-    .. code-block:: bash
-
-        salt-call reclass.validate_nodes_params
-    '''
-    ret={}
-    nodes = node_list(**connection_args)
-    for node_name, node in nodes.items():
-            ret.update(validate_node_params(node_name))
-    return ret
+        defaults = find_and_read_configfile()
+        meta = ''
+        error = None
+        try:
+            pillar = ext_pillar(node_name, {}, defaults['storage_type'], defaults['inventory_base_uri'])
+        except (ReclassException, Exception) as e:
+            msg = "Validation failed in %s on %s" % (repr(e), node_name)
+            LOG.error(msg)
+            meta = {'Error': msg}
+            s = str(type(e))
+            if 'yaml.scanner.ScannerError' in s:
+                error = re.sub(r"\r?\n?$", "", repr(str(e)), 1)
+            else:
+                error = e.message
+        if 'Error' in meta:
+            ret = {node_name: error}
+        else:
+            ret = {node_name: ''}
+        return ret
 
 
 def node_pillar(node_name, **kwargs):
     '''
-    Returns pillar data for given minion from reclass inventory.
+    Returns pillar metadata for given node from reclass inventory.
 
     :param node_name: target minion ID
 
@@ -740,7 +733,7 @@
 
 def inventory(**connection_args):
     '''
-    Get all nodes in inventory and their associated services/roles classification.
+    Get all nodes in inventory and their associated services/roles.
 
     CLI Examples:
 
@@ -772,7 +765,7 @@
 
 def cluster_meta_list(file_name="overrides.yml", cluster="", **kwargs):
     '''
-    List all cluster level overrides
+    List all cluster level soft metadata overrides.
 
     :param file_name: name of the override file, defaults to: overrides.yml
 
@@ -781,7 +774,6 @@
     .. code-block:: bash
 
         salt-call reclass.cluster_meta_list
-
     '''
     path = os.path.join(_get_cluster_dir(), cluster, file_name)
     try:
@@ -797,7 +789,7 @@
 
 def cluster_meta_delete(name, file_name="overrides.yml", cluster="", **kwargs):
     '''
-    Delete cluster level override entry
+    Delete cluster level soft metadata override entry.
 
     :param name: name of the override entry (dictionary key)
     :param file_name: name of the override file, defaults to: overrides.yml
@@ -807,7 +799,6 @@
     .. code-block:: bash
 
         salt-call reclass.cluster_meta_delete foo
-
     '''
     ret = {}
     path = os.path.join(_get_cluster_dir(), cluster, file_name)
@@ -830,7 +821,7 @@
 
 def cluster_meta_set(name, value, file_name="overrides.yml", cluster="", **kwargs):
     '''
-    Create cluster level override entry
+    Create cluster level metadata override entry.
 
     :param name: name of the override entry (dictionary key)
     :param value: value of the override entry (dictionary value)
@@ -841,7 +832,6 @@
     .. code-block:: bash
 
         salt-call reclass.cluster_meta_set foo bar
-
     '''
     path = os.path.join(_get_cluster_dir(), cluster, file_name)
     meta = __salt__['reclass.cluster_meta_list'](path, **kwargs)
