diff --git a/mdt/config.py b/mdt/config.py
index e7275c9..bc4b6b9 100644
--- a/mdt/config.py
+++ b/mdt/config.py
@@ -59,26 +59,71 @@
         self.setAttribute("ssh-command", command)
 
 
-class Get:
+class GetCommand:
+    '''Usage: mdt get [<variablename>]
+
+Returns the value currently set for a given variable name. Some useful
+variables are:
+
+    preferred-device    - set this to your preferred device name to default
+                          most commands to manipulating this specific device.
+    username            - set this to the username that should be used to
+                          connect to a device with. Defaults to 'mendel'.
+    password            - set this to the password to use to login to a new
+                          device with. Defaults to 'mendel'. Only used
+                          during the initial setup phase of pushing an SSH
+                          key to the board.
+
+If no variable name is provided, 'mdt get' will print out the list of all
+known stored variables and their values. Note: default values are not printed.
+'''
+
     def __init__(self):
         self.config = Config()
 
     def run(self, args):
-        if args:
+        if len(args) == 0:
+            pass
+        elif len(args) == 1:
             print("{0}: {1}".format(args[1], self.config.getAttribute(args[1])))
+        else:
+            print("Usage: mdt get [<variablename>]")
 
 
-class Set:
+class SetCommand:
+    '''Usage: mdt set <variablename> <value>
+
+Sets the value for a given variable name. Some useful variables are:
+
+    preferred-device    - set this to your preferred device name to default
+                          most commands to manipulating this specific device.
+    username            - set this to the username that should be used to
+                          connect to a device with. Defaults to 'mendel'.
+    password            - set this to the password to use to login to a new
+                          device with. Defaults to 'mendel'. Only used
+                          during the initial setup phase of pushing an SSH
+                          key to the board.
+
+Note that setting a variable to the empty string does not clear it back to
+the default value! Use 'mdt clear' for that.
+'''
     def __init__(self):
         self.config = Config()
 
     def run(self, args):
-        if args:
-            self.config.setAttribute(args[1], args[2])
-            print("Set {0} to {1}".format(args[1], args[2]))
+        if len(args) != 2:
+            print("Usage: mdt set <variablename> <value>")
+
+        self.config.setAttribute(args[1], args[2])
+        print("Set {0} to {1}".format(args[1], args[2]))
 
 
-class Clear:
+class ClearCommand:
+    '''Usage: mdt clear <variablename>
+
+Clears the value for a given variable name, resetting it back to its
+default value.
+'''
     def __init__(self):
         self.config = Config()
 
diff --git a/mdt/devices.py b/mdt/devices.py
index 89e3adf..a5e5a7a 100644
--- a/mdt/devices.py
+++ b/mdt/devices.py
@@ -5,6 +5,18 @@
 
 
 class DevicesCommand:
+    '''Usage: mdt devices
+
+Returns a list of device names and IP addresses found on the local network
+segment. Also indicates if a given device is marked as your default.
+
+Variables used:
+   preferred-device: contains the device name you want as your default
+
+Note: MDT uses a python implementation of mDNS ZeroConf for discovery, so
+it does not require a running Avahi daemon.
+'''
+
     def __init__(self):
         self.discoverer = Discoverer()
         self.device = Config().preferredDevice()
@@ -21,6 +33,19 @@
 
 
 class DevicesWaitCommand:
+    '''Usage: mdt wait-for-device
+
+Waits for either the first device found, or your preferred device to be
+discovered on the local network segment.
+
+Variables used:
+   preferred-device: contains the device name you want as your default
+
+Note: if preferred-device is cleared, then this will return on the first
+available device found. Also, MDT uses a python implementation of mDNS
+ZeroConf for discovery, so it does not require a running Avahi daemon.
+'''
+
     def __init__(self):
         self.found_devices = False
         self.discoverer = Discoverer(self)
diff --git a/mdt/keys.py b/mdt/keys.py
index 67619dd..011981d 100644
--- a/mdt/keys.py
+++ b/mdt/keys.py
@@ -51,7 +51,15 @@
         return self.pkey
 
 
-class GenKey:
+class GenKeyCommand:
+    '''Usage: mdt genkey
+
+Generates an SSH key and stores it to disk.
+
+Note that this does not prompt if you want to replace an already existing
+key and will happily overwrite without telling you!
+'''
+
     def run(self, args):
         if os.path.exists(KEYFILE_PATH):
             os.unlink(KEYFILE_PATH)
diff --git a/mdt/main.py b/mdt/main.py
index 53904bf..ea91184 100755
--- a/mdt/main.py
+++ b/mdt/main.py
@@ -16,6 +16,12 @@
 
 
 class HelpCommand:
+    '''Usage: mdt help [<subcommand>]
+
+Gets additional information about a given subcommand, or returns a summary
+of subcommands available.
+'''
+
     def run(self, args):
         if len(args) <= 1:
             print('Usage: mdt <subcommand> [<options>]')
@@ -34,7 +40,7 @@
             print()
             return 1
 
-        subcommand = args[1]
+        subcommand = args[1].lower()
         command = COMMANDS[subcommand]
         if command.__doc__:
             print(command.__doc__)
@@ -47,11 +53,11 @@
     'help': HelpCommand(),
     'devices': devices.DevicesCommand(),
     'wait-for-device': devices.DevicesWaitCommand(),
-    'get': config.Get(),
-    'set': config.Set(),
-    'clear': config.Clear(),
-    'genkey': keys.GenKey(),
-    'shell': shell.Shell(),
+    'get': config.GetCommand(),
+    'set': config.SetCommand(),
+    'clear': config.ClearCommand(),
+    'genkey': keys.GenKeyCommand(),
+    'shell': shell.ShellCommand(),
 }
 
 
@@ -62,6 +68,9 @@
         else:
             command = sys.argv[1].lower()
 
+        if command == '--help':
+            command = 'help'
+
         if command in COMMANDS:
             command = COMMANDS[command]
             exit(command.run(sys.argv[1:]))
diff --git a/mdt/shell.py b/mdt/shell.py
index b1010be..936f407 100644
--- a/mdt/shell.py
+++ b/mdt/shell.py
@@ -18,6 +18,7 @@
 from mdt import keys
 
 
+
 class KeyPushError(Exception):
     pass
 
@@ -112,7 +113,38 @@
         self.client.close()
 
 
-class Shell:
+class ShellCommand:
+    '''Usage: mdt shell [<devicename>]
+
+Opens an interactive shell to either your preferred device, the given
+devicename, or to the first device found.
+
+Variables used:
+    preferred-device    - set this to your preferred device name to connect
+                          to by default if no <devicename> is provided on the
+                          command line.
+    username            - set this to the username that should be used to
+                          connect to a device with. Defaults to 'mendel'.
+    password            - set this to the password to use to login to a new
+                          device with. Defaults to 'mendel'. Only used
+                          during the initial setup phase of pushing an SSH
+                          key to the board.
+
+If no SSH key is available on disk (ie: you didn't run genkey before running
+shell), this will implicitly run genkey for you. Additionally, shell will
+attempt to connect to a device by doing the following:
+
+  1. Attempt a connection using your SSH key only, with no password.
+  2. If the connection attempt failed due to authentication, will
+     attempt to push the key to the device by using the default
+     login credentials in the 'username' and 'password' variables.
+  3. Installs your SSH key to the device after logging in.
+  4. Disconnects and reconnects using the SSH key.
+
+Note: this will not return the exit code of the shell executed on the device.
+If you need automation, use 'mdt run' instead.
+'''
+
     def __init__(self):
         self.config = config.Config()
         self.discoverer = discoverer.Discoverer(self)
