diff --git a/confluent_client/bin/nodeattrib b/confluent_client/bin/nodeattrib
index 8874a472..2ae05aa1 100644
--- a/confluent_client/bin/nodeattrib
+++ b/confluent_client/bin/nodeattrib
@@ -28,7 +28,6 @@ if path.startswith('/opt'):
 
 import confluent.client as client
 
-
 def attrrequested(attr, attrlist, seenattributes):
     for candidate in attrlist:
         truename = candidate
@@ -42,10 +41,13 @@ def attrrequested(attr, attrlist, seenattributes):
             return True
     return False
 argparser = optparse.OptionParser(
-    usage='''Usage: %prog [options] noderange [list of attributes]\n  \
-                  %prog [options] noderange attribute1=value1,attribute2=value,...   ''')
+    usage='''\n       %prog [options] noderange [list of attributes]  \
+             \n       %prog [options] noderange attribute1=value1,attribute2=value,...
+             \n ''')
 argparser.add_option('-b', '--blame', action='store_true',
                      help='Show information about how attributes inherited')
+argparser.add_option('-c', '--clear', action='store_true',
+                     help='Clear variables')
 (options, args) = argparser.parse_args()
 
 showtype = 'current'
@@ -58,27 +60,43 @@ except IndexError:
 session = client.Command()
 exitcode = 0
 
+
+#Sets attributes
 if len(args) > 1:
-    if args[1]  == 'all':
-        showtype = 'all'
-    elif args[1] == 'current':
-        showtype = 'current'
-    elif "=" in args[1]:
-        try:
-            if len(args[1:]) > 1:
-                for val in args[1:].split(','):
-                    val = val.split('=')
-                    exitcode=session.simple_noderange_command(noderange, 'attributes/all'.format(noderange), val[1], val[0])
-            else:
-                val=args[1].split('=')
-                exitcode=session.simple_noderange_command(noderange, 'attributes/all'.format(noderange),val[1],val[0])
-        except:
-            sys.stderr.write('Error: {0} not a valid expression\n'.format(str (args[1:])))
-            exitcode = 1
+    #clears attribute
+    if options.clear:
+        targpath = '/noderange/{0}/attributes/all'.format(noderange)
+        keydata = {}
+        for attrib in args[1:]:
+            keydata[attrib] = None
+        for res in session.update(targpath, keydata):
+            if 'error' in res:
+                if 'errorcode' in res:
+                    exitcode = res['errorcode']
+                sys.stderr.write('Error: ' + res['error'] + '\n')
         sys.exit(exitcode)
     else:
-        requestargs = args[1:]
+        if args[1]  == 'all':
+            showtype = 'all'
+        elif args[1] == 'current':
+            showtype = 'current'
+        elif "=" in args[1]:
+            try:
+                if len(args[1:]) > 1:
+                    for val in args[1:]:
+                        val = val.split('=')
+                        exitcode=session.simple_noderange_command(noderange, 'attributes/all'.format(noderange), val[1], val[0])
+                else:
+                    val=args[1].split('=')
+                    exitcode=session.simple_noderange_command(noderange, 'attributes/all'.format(noderange),val[1],val[0])
+            except:
+                sys.stderr.write('Error: {0} not a valid expression\n'.format(str (args[1:])))
+                exitcode = 1
+            sys.exit(exitcode)
+        else:
+            requestargs = args[1:]
 
+# Lists all attributes
 if len(args) > 0:
     seenattributes = set([])
     for res in session.read('/noderange/{0}/attributes/{1}'.format(noderange,showtype)):
diff --git a/confluent_client/doc/man/nodeattrib.ronn b/confluent_client/doc/man/nodeattrib.ronn
new file mode 100644
index 00000000..63ecf145
--- /dev/null
+++ b/confluent_client/doc/man/nodeattrib.ronn
@@ -0,0 +1,76 @@
+nodeattrib(1) -- List or change confluent nodes attributes
+=========================================================
+
+## SYNOPSIS
+
+`nodeattrib` `noderange` [ current | all ]
+`nodeattrib` `noderange` [-b] [<nodeattribute>...]
+`nodeattrib` `noderange` [<nodeattribute1=value1> <nodeattribute2=value2> ...]
+`nodeattrib` `noderange` [-c] [<nodeattribute1> <nodeattribute2=value2> ...]
+
+## DESCRIPTION
+
+**nodeattrib** queries the confluent server to get information about nodes.  In
+the simplest form, it simply takes the given noderange(5) and lists the
+matching nodes, one line at a time.
+
+If a list of node attribute names are given, the value of those are also
+displayed.  If `-b` is specified, it will also display information on
+how inherited and expression based attributes are defined.  There is more
+information on node attributes in nodeattributes(5) man page.
+If `-c` is specified, this will set the nodeattribute to a null valid.
+This is different from setting the value to an empty string.
+
+## OPTIONS
+
+* `-b`, `--blame`:
+  Annotate inherited and expression based attributes to show their base value.
+* `-c`, `--clear`:
+  Clear given nodeattributes since '' is not the same as empty
+
+## EXAMPLES
+* Listing matching nodes of a simple noderange:
+    `# nodeattrib n1-n2`
+    `n1`: console.method: ipmi
+    `n1`: hardwaremanagement.manager: 172.30.3.1
+    `n2`: console.method: ipmi
+    `n2`: hardwaremanagement.manager: 172.30.3.2
+
+* Getting an attribute of nodes matching a noderange:
+    `# nodeattrib n1,n2 hardwaremanagement.manager`
+    `n1: hardwaremanagement.manager: 172.30.3.1`
+    `n2: hardwaremanagement.manager: 172.30.3.2`
+
+* Getting a group of attributes while determining what group defines them:
+    `# nodeattrib n1,n2 hardwaremanagement --blame`
+    `n1: hardwaremanagement.manager: 172.30.3.1`
+    `n1: hardwaremanagement.method: ipmi (inherited from group everything)`
+    `n1: hardwaremanagement.switch: r8e1`
+    `n1: hardwaremanagement.switchport: 14`
+    `n2: hardwaremanagement.manager: 172.30.3.2`
+    `n2: hardwaremanagement.method: ipmi (inherited from group everything)`
+    `n2: hardwaremanagement.switch: r8e1`
+    `n2: hardwaremanagement.switchport: 2`
+
+  * Listing matching nodes of a simple noderange that are set:
+    `# nodeattrib n1-n2 current`
+    `n1`: console.method: ipmi
+    `n1`: hardwaremanagement.manager: 172.30.3.1
+    `n2`: console.method: ipmi
+    `n2`: hardwaremanagement.manager: 172.30.3.2
+
+  * Change attribute on nodes of a simple noderange:
+    `# nodeattrib n1-n2 console.method=serial`
+    `n1`: console.method: serial
+    `n1`: hardwaremanagement.manager: 172.30.3.1
+    `n2`: console.method: serial
+    `n2`: hardwaremanagement.manager: 172.30.3.2
+
+  * Clear attribute on nodes of a simple noderange:
+    `# nodeattrib n1-n2 -c console.method`
+    `n1`: console.method:
+    `n1`: hardwaremanagement.manager: 172.30.3.1
+    `n2`: console.method:
+    `n2`: hardwaremanagement.manager: 172.30.3.2
+
+