diff --git .gitignore .gitignore
index 1c8d957..c879c5b 100644
--- .gitignore
+++ .gitignore
@@ -9,3 +9,4 @@ MANIFEST
 /.ropeproject/config.py
 /.coverage
 coverage_html_report/
+.idea
diff --git libcloud/common/openstack.py libcloud/common/openstack.py
index d49b8fb..5ccc706 100644
--- libcloud/common/openstack.py
+++ libcloud/common/openstack.py
@@ -518,6 +518,10 @@ class OpenStackDriverMixin(object):
                                                    None)
 
     def openstack_connection_kwargs(self):
+        """
+
+        @rtype: C{dict}
+        """
         rv = {}
         if self._ex_force_base_url:
             rv['ex_force_base_url'] = self._ex_force_base_url
diff --git libcloud/compute/base.py libcloud/compute/base.py
index 9f24279..6896dff 100644
--- libcloud/compute/base.py
+++ libcloud/compute/base.py
@@ -64,7 +64,7 @@ __all__ = [
     "ConnectionUserAndKey",
     "LibcloudHTTPSConnection",
     "LibcloudHTTPConnection"
-    ]
+]
 
 
 class UuidMixin(object):
@@ -413,7 +413,7 @@ class StorageVolume(UuidMixin):
 
     def __repr__(self):
         return '<StorageVolume id=%s size=%s driver=%s>' % (
-                        self.id, self.size, self.driver.name)
+               self.id, self.size, self.driver.name)
 
 
 class NodeDriver(BaseDriver):
@@ -457,7 +457,7 @@ class NodeDriver(BaseDriver):
         """Create a new node instance.
 
         @keyword    name:   String with a name for this new node (required)
-        @type       name:   str
+        @type       name:   C{str}
 
         @keyword    size:   The size of resources allocated to this node.
                             (required)
@@ -474,7 +474,8 @@ class NodeDriver(BaseDriver):
                             (optional)
         @type       auth:   L{NodeAuthSSHKey} or L{NodeAuthPassword}
 
-        @return: The newly created L{Node}.
+        @return: The newly created node.
+        @rtype: L{Node}
         """
         raise NotImplementedError(
             'create_node not implemented for this driver')
@@ -488,7 +489,8 @@ class NodeDriver(BaseDriver):
         @param node: The node to be destroyed
         @type node: L{Node}
 
-        @return: C{bool} True if the destroy was successful, otherwise False
+        @return: True if the destroy was successful, otherwise False
+        @rtype: C{bool}
         """
         raise NotImplementedError(
             'destroy_node not implemented for this driver')
@@ -500,7 +502,8 @@ class NodeDriver(BaseDriver):
         @param node: The node to be rebooted
         @type node: L{Node}
 
-        @return: C{bool} True if the reboot was successful, otherwise False
+        @return: True if the reboot was successful, otherwise False
+        @rtype: C{bool}
         """
         raise NotImplementedError(
             'reboot_node not implemented for this driver')
@@ -508,7 +511,8 @@ class NodeDriver(BaseDriver):
     def list_nodes(self):
         """
         List all nodes
-        @return: C{list} of L{Node} objects
+        @return:  list of node objects
+        @rtype: C{list} of L{Node}
         """
         raise NotImplementedError(
             'list_nodes not implemented for this driver')
@@ -520,7 +524,8 @@ class NodeDriver(BaseDriver):
         @keyword location: The location at which to list images
         @type location: L{NodeLocation}
 
-        @return: C{list} of L{NodeImage} objects
+        @return: list of node image objects
+        @rtype: C{list} of L{NodeImage}
         """
         raise NotImplementedError(
             'list_images not implemented for this driver')
@@ -532,7 +537,8 @@ class NodeDriver(BaseDriver):
         @keyword location: The location at which to list sizes
         @type location: L{NodeLocation}
 
-        @return: C{list} of L{NodeSize} objects
+        @return: list of node size objects
+        @rtype: C{list} of L{NodeSize}
         """
         raise NotImplementedError(
             'list_sizes not implemented for this driver')
@@ -540,7 +546,9 @@ class NodeDriver(BaseDriver):
     def list_locations(self):
         """
         List data centers for a provider
-        @return: C{list} of L{NodeLocation} objects
+
+        @return: list of node location objects
+        @rtype: C{list} of L{NodeLocation}
         """
         raise NotImplementedError(
             'list_locations not implemented for this driver')
@@ -557,6 +565,27 @@ class NodeDriver(BaseDriver):
         timing out).  This exception includes a Node object which you may want
         to destroy if incomplete deployments are not desirable.
 
+        >>> from libcloud.compute.drivers.dummy import DummyNodeDriver
+        >>> from libcloud.compute.deployment import ScriptDeployment
+        >>> from libcloud.compute.deployment import MultiStepDeployment
+        >>> from libcloud.compute.base import NodeAuthSSHKey
+        >>> driver = DummyNodeDriver(0)
+        >>> key = NodeAuthSSHKey('...') # read from file
+        >>> script = ScriptDeployment("yum -y install emacs strace tcpdump")
+        >>> msd = MultiStepDeployment([key, script])
+        >>> def d():
+        ...     try:
+        ...         node = driver.deploy_node(deploy=msd)
+        ...     except NotImplementedError:
+        ...         print ("not implemented for dummy driver")
+        >>> d()
+        not implemented for dummy driver
+
+        Deploy node is typically not overridden in subclasses.  The
+        existing implementation should be able to handle most such.
+
+        @inherits: L{NodeDriver.create_node}
+
         @keyword    deploy: Deployment to run once machine is online and
                             availble to SSH.
         @type       deploy: L{Deployment}
@@ -579,7 +608,7 @@ class NodeDriver(BaseDriver):
 
         @keyword    ssh_key: A path (or paths) to an SSH private key with which
                              to attempt to authenticate. (optional)
-        @type       ssh_key: C{string} or C{list} of C{string}s
+        @type       ssh_key: C{str} or C{list} of C{str}
 
         @keyword    max_tries: How many times to retry if a deployment fails
                                before giving up (default is 3)
@@ -588,27 +617,6 @@ class NodeDriver(BaseDriver):
         @keyword    ssh_interface: The interface to wait for. Default is
                                    'public_ips', other option is 'private_ips'.
         @type       ssh_interface: C{str}
-
-        See L{NodeDriver.create_node} for more keyword args.
-
-        >>> from libcloud.compute.drivers.dummy import DummyNodeDriver
-        >>> from libcloud.compute.deployment import ScriptDeployment
-        >>> from libcloud.compute.deployment import MultiStepDeployment
-        >>> from libcloud.compute.base import NodeAuthSSHKey
-        >>> driver = DummyNodeDriver(0)
-        >>> key = NodeAuthSSHKey('...') # read from file
-        >>> script = ScriptDeployment("yum -y install emacs strace tcpdump")
-        >>> msd = MultiStepDeployment([key, script])
-        >>> def d():
-        ...     try:
-        ...         node = driver.deploy_node(deploy=msd)
-        ...     except NotImplementedError:
-        ...         print ("not implemented for dummy driver")
-        >>> d()
-        not implemented for dummy driver
-
-        Deploy node is typically not overridden in subclasses.  The
-        existing implementation should be able to handle most such.
         """
         if not libcloud.compute.ssh.have_paramiko:
             raise RuntimeError('paramiko is not installed. You can install ' +
@@ -618,7 +626,7 @@ class NodeDriver(BaseDriver):
 
         if 'create_node' not in self.features:
             raise NotImplementedError(
-                    'deploy_node not implemented for this driver')
+                'deploy_node not implemented for this driver')
         elif 'generates_password' not in self.features["create_node"]:
             if 'password' not in self.features["create_node"] and \
                'ssh_key' not in self.features["create_node"]:
@@ -641,9 +649,10 @@ class NodeDriver(BaseDriver):
         try:
             # Wait until node is up and running and has IP assigned
             ssh_interface = kwargs.get('ssh_interface', 'public_ips')
-            node, ip_addresses = self._wait_until_running(node=node,
-                    wait_period=3, timeout=NODE_ONLINE_WAIT_TIMEOUT,
-                    ssh_interface=ssh_interface)
+            node, ip_addresses = self._wait_until_running(
+                node=node,
+                wait_period=3, timeout=NODE_ONLINE_WAIT_TIMEOUT,
+                ssh_interface=ssh_interface)
 
             if password:
                 node.extra['password'] = password
@@ -693,10 +702,11 @@ class NodeDriver(BaseDriver):
                                volume.  (optional)
         @type       snapshot:  C{str}
 
-        @return: The newly created L{StorageVolume}.
+        @return: The newly created volume.
+        @rtype: L{StorageVolume}
         """
         raise NotImplementedError(
-           'create_volume not implemented for this driver')
+            'create_volume not implemented for this driver')
 
     def destroy_volume(self, volume):
         """
@@ -705,11 +715,11 @@ class NodeDriver(BaseDriver):
         @param      volume: Volume to be destroyed
         @type       volume: L{StorageVolume}
 
-        @return: C{bool}
+        @rtype: C{bool}
         """
 
         raise NotImplementedError(
-               'destroy_volume not implemented for this driver')
+            'destroy_volume not implemented for this driver')
 
     def attach_volume(self, node, volume, device=None):
         """
@@ -725,7 +735,7 @@ class NodeDriver(BaseDriver):
                             e.g. '/dev/sdb (optional)
         @type       device: C{str}
 
-        @return: C{bool}
+        @rtype: C{bool}
         """
         raise NotImplementedError('attach not implemented for this driver')
 
@@ -736,7 +746,7 @@ class NodeDriver(BaseDriver):
         @param      volume: Volume to be detached
         @type       volume: L{StorageVolume}
 
-        @returns C{bool}
+        @rtype: C{bool}
         """
 
         raise NotImplementedError('detach not implemented for this driver')
@@ -795,8 +805,8 @@ class NodeDriver(BaseDriver):
                                     + 'but multiple nodes have same UUID'),
                                     driver=self)
 
-            if (len(nodes) == 1 and nodes[0].state == NodeState.RUNNING and \
-                filter_addresses(getattr(nodes[0], ssh_interface))):
+            if (len(nodes) == 1 and nodes[0].state == NodeState.RUNNING and
+                    filter_addresses(getattr(nodes[0], ssh_interface))):
                 return (nodes[0], filter_addresses(getattr(nodes[0],
                                                    ssh_interface)))
             else:
diff --git libcloud/compute/drivers/bluebox.py libcloud/compute/drivers/bluebox.py
index 69af66e..ee9b3ce 100644
--- libcloud/compute/drivers/bluebox.py
+++ libcloud/compute/drivers/bluebox.py
@@ -19,7 +19,8 @@ libcloud driver for the Blue Box Blocks API
 This driver implements all libcloud functionality for the Blue Box Blocks API.
 
 Blue Box home page            http://bluebox.net
-Blue Box API documentation    https://boxpanel.bluebox.net/public/the_vault/index.php/Blocks_API
+Blue Box API documentation    https://boxpanel.bluebox
+.net/public/the_vault/index.php/Blocks_API
 """
 
 import copy
@@ -42,34 +43,34 @@ BLUEBOX_API_HOST = "boxpanel.bluebox.net"
 # so we simply list what's available right now, along with all of the various
 # attributes that are needed by libcloud.
 BLUEBOX_INSTANCE_TYPES = {
-  '1gb': {
-    'id': '94fd37a7-2606-47f7-84d5-9000deda52ae',
-    'name': 'Block 1GB Virtual Server',
-    'ram': 1024,
-    'disk': 20,
-    'cpu': 0.5
-  },
-  '2gb': {
-    'id': 'b412f354-5056-4bf0-a42f-6ddd998aa092',
-    'name': 'Block 2GB Virtual Server',
-    'ram': 2048,
-    'disk': 25,
-    'cpu': 1
-  },
-  '4gb': {
-    'id': '0cd183d3-0287-4b1a-8288-b3ea8302ed58',
-    'name': 'Block 4GB Virtual Server',
-    'ram': 4096,
-    'disk': 50,
-    'cpu': 2
-  },
-  '8gb': {
-    'id': 'b9b87a5b-2885-4a2e-b434-44a163ca6251',
-    'name': 'Block 8GB Virtual Server',
-    'ram': 8192,
-    'disk': 100,
-    'cpu': 4
-  }
+    '1gb': {
+        'id': '94fd37a7-2606-47f7-84d5-9000deda52ae',
+        'name': 'Block 1GB Virtual Server',
+        'ram': 1024,
+        'disk': 20,
+        'cpu': 0.5
+    },
+    '2gb': {
+        'id': 'b412f354-5056-4bf0-a42f-6ddd998aa092',
+        'name': 'Block 2GB Virtual Server',
+        'ram': 2048,
+        'disk': 25,
+        'cpu': 1
+    },
+    '4gb': {
+        'id': '0cd183d3-0287-4b1a-8288-b3ea8302ed58',
+        'name': 'Block 4GB Virtual Server',
+        'ram': 4096,
+        'disk': 50,
+        'cpu': 2
+    },
+    '8gb': {
+        'id': 'b9b87a5b-2885-4a2e-b434-44a163ca6251',
+        'name': 'Block 8GB Virtual Server',
+        'ram': 8192,
+        'disk': 100,
+        'cpu': 4
+    }
 }
 
 RAM_PER_CPU = 2048
@@ -102,8 +103,11 @@ class BlueboxNodeSize(NodeSize):
         self.driver = driver
 
     def __repr__(self):
-        return (('<NodeSize: id=%s, name=%s, cpu=%s, ram=%s, disk=%s, price=%s, driver=%s ...>')
-               % (self.id, self.name, self.cpu, self.ram, self.disk, self.price, self.driver.name))
+        return ((
+                '<NodeSize: id=%s, name=%s, cpu=%s, ram=%s, disk=%s, '
+                'price=%s, driver=%s ...>')
+                % (self.id, self.name, self.cpu, self.ram, self.disk,
+                   self.price, self.driver.name))
 
 
 class BlueboxConnection(ConnectionUserAndKey):
@@ -190,14 +194,12 @@ class BlueboxNodeDriver(NodeDriver):
             raise Exception("SSH public key or password required.")
 
         params = urlencode(data)
-        result = self.connection.request('/api/blocks.json', headers=headers, data=params, method='POST')
+        result = self.connection.request('/api/blocks.json', headers=headers,
+                                         data=params, method='POST')
         node = self._to_node(result.object)
         return node
 
     def destroy_node(self, node):
-        """
-        Destroy node by passing in the node object
-        """
         url = '/api/blocks/%s.json' % (node.id)
         result = self.connection.request(url, method='DELETE')
 
diff --git libcloud/compute/drivers/brightbox.py libcloud/compute/drivers/brightbox.py
index 5ca63fd..82d80f8 100644
--- libcloud/compute/drivers/brightbox.py
+++ libcloud/compute/drivers/brightbox.py
@@ -67,10 +67,10 @@ class BrightboxNodeDriver(NodeDriver):
 
     def _to_node(self, data):
         extra_data = _extract(data, ['fqdn', 'user_data', 'status',
-                                    'interfaces', 'snapshots',
-                                    'server_groups', 'hostname',
-                                    'started_at', 'created_at',
-                                    'deleted_at'])
+                                     'interfaces', 'snapshots',
+                                     'server_groups', 'hostname',
+                                     'started_at', 'created_at',
+                                     'deleted_at'])
         extra_data['zone'] = self._to_location(data['zone'])
         return Node(
             id=data['id'],
@@ -95,11 +95,11 @@ class BrightboxNodeDriver(NodeDriver):
 
     def _to_image(self, data):
         extra_data = _extract(data, ['arch', 'compatibility_mode',
-                                   'created_at', 'description',
-                                   'disk_size', 'min_ram', 'official',
-                                   'owner', 'public', 'source',
-                                   'source_type', 'status', 'username',
-                                   'virtual_size', 'licence_name'])
+                                     'created_at', 'description',
+                                     'disk_size', 'min_ram', 'official',
+                                     'owner', 'public', 'source',
+                                     'source_type', 'status', 'username',
+                                     'virtual_size', 'licence_name'])
 
         if data.get('ancestor', None):
             extra_data['ancestor'] = self._to_image(data['ancestor'])
@@ -143,15 +143,16 @@ class BrightboxNodeDriver(NodeDriver):
     def create_node(self, **kwargs):
         """Create a new Brightbox node
 
-        See L{NodeDriver.create_node} for more keyword args.
         Reference: https://api.gb1.brightbox.com/1.0/#server_create_server
 
+        @inherits: L{NodeDriver.create_node}
+
         @keyword    ex_userdata: User data
         @type       ex_userdata: C{str}
 
         @keyword    ex_servergroup: Name or list of server group ids to
                                     add server to
-        @type       ex_servergroup: C{str} or C{list} of C{str}s
+        @type       ex_servergroup: C{str} or C{list} of C{str}
         """
         data = {
             'name': kwargs['name'],
@@ -175,11 +176,9 @@ class BrightboxNodeDriver(NodeDriver):
         return self._to_node(data)
 
     def destroy_node(self, node):
-        """
-        Destroy node by passing in the node object
-        """
-        response = self.connection.request('/%s/servers/%s' % \
-                   (self.api_version, node.id), method='DELETE')
+        response = self.connection.request(
+            '/%s/servers/%s' % (self.api_version, node.id),
+            method='DELETE')
         return response.status == httplib.ACCEPTED
 
     def list_nodes(self):
@@ -205,7 +204,7 @@ class BrightboxNodeDriver(NodeDriver):
 
         @note: This is an API extension for use on Brightbox
 
-        @return: C{list} of C{dict}
+        @rtype: C{list} of C{dict}
         """
         return self.connection.request('/%s/cloud_ips' % self.api_version) \
                               .object
@@ -219,7 +218,7 @@ class BrightboxNodeDriver(NodeDriver):
         @param      reverse_dns: Reverse DNS hostname
         @type       reverse_dns: C{str}
 
-        @return: C{dict}
+        @rtype: C{dict}
         """
         params = {}
 
@@ -240,10 +239,11 @@ class BrightboxNodeDriver(NodeDriver):
         @param      reverse_dns: Reverse DNS hostname
         @type       reverse_dns: C{str}
 
-        @return: C{dict}
+        @rtype: C{dict}
         """
         response = self._put('/%s/cloud_ips/%s' % (self.api_version,
-            cloud_ip_id), {'reverse_dns': reverse_dns})
+                                                   cloud_ip_id),
+                             {'reverse_dns': reverse_dns})
         return response.status == httplib.OK
 
     def ex_map_cloud_ip(self, cloud_ip_id, interface_id):
@@ -260,10 +260,12 @@ class BrightboxNodeDriver(NodeDriver):
                               which this Cloud IP should be mapped to
         @type   interface_id: C{str}
 
-        @return: C{bool} True if the mapping was successful.
+        @return: True if the mapping was successful.
+        @rtype: C{bool}
         """
         response = self._post('/%s/cloud_ips/%s/map' % (self.api_version,
-            cloud_ip_id), {'destination': interface_id})
+                                                        cloud_ip_id),
+                              {'destination': interface_id})
         return response.status == httplib.ACCEPTED
 
     def ex_unmap_cloud_ip(self, cloud_ip_id):
@@ -277,7 +279,8 @@ class BrightboxNodeDriver(NodeDriver):
         @param  cloud_ip_id: The id of the cloud ip.
         @type   cloud_ip_id: C{str}
 
-        @return: C{bool} True if the unmap was successful.
+        @return: True if the unmap was successful.
+        @rtype: C{bool}
         """
         response = self._post('/%s/cloud_ips/%s/unmap' % (self.api_version,
                                                           cloud_ip_id))
@@ -292,8 +295,11 @@ class BrightboxNodeDriver(NodeDriver):
         @param  cloud_ip_id: The id of the cloud ip.
         @type   cloud_ip_id: C{str}
 
-        @return: C{bool} True if the unmap was successful.
+        @return: True if the unmap was successful.
+        @rtype: C{bool}
         """
-        response = self.connection.request('/%s/cloud_ips/%s' %
-                           (self.api_version, cloud_ip_id), method='DELETE')
+        response = self.connection.request(
+            '/%s/cloud_ips/%s' % (self.api_version,
+                                  cloud_ip_id),
+            method='DELETE')
         return response.status == httplib.OK
diff --git libcloud/compute/drivers/cloudsigma.py libcloud/compute/drivers/cloudsigma.py
index 7d18344..df7e09f 100644
--- libcloud/compute/drivers/cloudsigma.py
+++ libcloud/compute/drivers/cloudsigma.py
@@ -22,7 +22,6 @@ import base64
 
 from libcloud.utils.py3 import b
 
-
 from libcloud.utils.misc import str2dicts, str2list, dict2str
 from libcloud.common.base import ConnectionUserAndKey, Response
 from libcloud.common.types import InvalidCredsError
@@ -38,7 +37,7 @@ API_ENDPOINTS = {
         'host': 'api.zrh.cloudsigma.com'
     },
 
-   'lvs': {
+    'lvs': {
         'name': 'Las Vegas',
         'country': 'United States',
         'host': 'api.lvs.cloudsigma.com'
@@ -49,9 +48,11 @@ API_ENDPOINTS = {
 DEFAULT_ENDPOINT = 'zrh'
 
 # CloudSigma doesn't specify special instance types.
-# Basically for CPU any value between 0.5 GHz and 20.0 GHz should work, 500 MB to 32000 MB for ram
+# Basically for CPU any value between 0.5 GHz and 20.0 GHz should work,
+# 500 MB to 32000 MB for ram
 # and 1 GB to 1024 GB for hard drive size.
-# Plans in this file are based on examples listed on http://www.cloudsigma.com/en/pricing/price-schedules
+# Plans in this file are based on examples listed on http://www.cloudsigma
+# .com/en/pricing/price-schedules
 INSTANCE_TYPES = {
     'micro-regular': {
         'id': 'micro-regular',
@@ -180,10 +181,10 @@ class CloudSigmaNodeSize(NodeSize):
         self.driver = driver
 
     def __repr__(self):
-        return (('<NodeSize: id=%s, name=%s, cpu=%s, ram=%s disk=%s bandwidth=%s '
-                 'price=%s driver=%s ...>')
-                % (self.id, self.name, self.cpu, self.ram, self.disk, self.bandwidth,
-                   self.price, self.driver.name))
+        return (('<NodeSize: id=%s, name=%s, cpu=%s, ram=%s disk=%s '
+                 'bandwidth=%s price=%s driver=%s ...>')
+                % (self.id, self.name, self.cpu, self.ram, self.disk,
+                   self.bandwidth, self.price, self.driver.name))
 
 
 class CloudSigmaBaseConnection(ConnectionUserAndKey):
@@ -194,10 +195,8 @@ class CloudSigmaBaseConnection(ConnectionUserAndKey):
         headers['Accept'] = 'application/json'
         headers['Content-Type'] = 'application/json'
 
-        headers['Authorization'] = 'Basic %s' % (base64.b64encode(b('%s:%s' %
-                                                 (self.user_id,
-                                                     self.key))).decode('utf-8'))
-
+        headers['Authorization'] = 'Basic %s' % (base64.b64encode(
+            b('%s:%s' % (self.user_id, self.key))).decode('utf-8'))
         return headers
 
 
@@ -211,7 +210,10 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
         """
         Reboot a node.
 
-        Because Cloudsigma API does not provide native reboot call, it's emulated using stop and start.
+        Because Cloudsigma API does not provide native reboot call,
+        it's emulated using stop and start.
+
+        @inherits: L{NodeDriver.reboot_node}
         """
         node = self._get_node(node.id)
         state = node.state
@@ -222,7 +224,8 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
             stopped = True
 
         if not stopped:
-            raise CloudSigmaException('Could not stop node with id %s' % (node.id))
+            raise CloudSigmaException(
+                'Could not stop node with id %s' % (node.id))
 
         success = self.ex_start_node(node)
 
@@ -233,6 +236,8 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
         Destroy a node (all the drives associated with it are NOT destroyed).
 
         If a node is still running, it's stopped before it's destroyed.
+
+        @inherits: L{NodeDriver.destroy_node}
         """
         node = self._get_node(node.id)
         state = node.state
@@ -244,37 +249,42 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
             stopped = True
 
         if not stopped:
-            raise CloudSigmaException('Could not stop node with id %s' % (node.id))
+            raise CloudSigmaException(
+                'Could not stop node with id %s' % (node.id))
 
-        response = self.connection.request(action='/servers/%s/destroy' % (node.id),
-                                           method='POST')
+        response = self.connection.request(
+            action='/servers/%s/destroy' % (node.id),
+            method='POST')
         return response.status == 204
 
     def list_images(self, location=None):
         """
-        Return a list of available standard images (this call might take up to 15 seconds to return).
+        Return a list of available standard images (this call might take up
+        to 15 seconds to return).
+
+        @inherits: L{NodeDriver.list_images}
         """
-        response = self.connection.request(action='/drives/standard/info').object
+        response = self.connection.request(
+            action='/drives/standard/info').object
 
         images = []
         for value in response:
             if value.get('type'):
                 if value['type'] == 'disk':
-                    image = NodeImage(id=value['drive'], name=value['name'], driver=self.connection.driver,
-                                    extra={'size': value['size']})
+                    image = NodeImage(id=value['drive'], name=value['name'],
+                                      driver=self.connection.driver,
+                                      extra={'size': value['size']})
                     images.append(image)
 
         return images
 
     def list_sizes(self, location=None):
-        """
-        Return a list of available node sizes.
-        """
         sizes = []
         for key, value in INSTANCE_TYPES.items():
             size = CloudSigmaNodeSize(id=value['id'], name=value['name'],
                                       cpu=value['cpu'], ram=value['memory'],
-                                      disk=value['disk'], bandwidth=value['bandwidth'],
+                                      disk=value['disk'],
+                                      bandwidth=value['bandwidth'],
                                       price=self._get_size_price(size_id=key),
                                       driver=self.connection.driver)
             sizes.append(size)
@@ -282,9 +292,6 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
         return sizes
 
     def list_nodes(self):
-        """
-        Return a list of nodes.
-        """
         response = self.connection.request(action='/servers/info').object
 
         nodes = []
@@ -298,16 +305,18 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
         """
         Creates a CloudSigma instance
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
 
         @keyword    name: String with a name for this new node (required)
-        @type       name: C{string}
+        @type       name: C{str}
 
-        @keyword    smp: Number of virtual processors or None to calculate based on the cpu speed
+        @keyword    smp: Number of virtual processors or None to calculate
+        based on the cpu speed
         @type       smp: C{int}
 
-        @keyword    nic_model: e1000, rtl8139 or virtio (is not specified, e1000 is used)
-        @type       nic_model: C{string}
+        @keyword    nic_model: e1000, rtl8139 or virtio (is not specified,
+        e1000 is used)
+        @type       nic_model: C{str}
 
         @keyword    vnc_password: If not set, VNC access is disabled.
         @type       vnc_password: C{bool}
@@ -334,32 +343,38 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
                            'size': '%sG' % (kwargs['size'].disk),
                            'driveType': drive_type})
 
-        response = self.connection.request(action='/drives/%s/clone' % image.id, data=dict2str(drive_data),
-                                           method='POST').object
+        response = self.connection.request(
+            action='/drives/%s/clone' % image.id,
+            data=dict2str(drive_data),
+            method='POST').object
 
         if not response:
             raise CloudSigmaException('Drive creation failed')
 
         drive_uuid = response[0]['drive']
 
-        response = self.connection.request(action='/drives/%s/info' % (drive_uuid)).object
+        response = self.connection.request(
+            action='/drives/%s/info' % (drive_uuid)).object
         imaging_start = time.time()
         while 'imaging' in response[0]:
-            response = self.connection.request(action='/drives/%s/info' % (drive_uuid)).object
+            response = self.connection.request(
+                action='/drives/%s/info' % (drive_uuid)).object
             elapsed_time = time.time() - imaging_start
             if 'imaging' in response[0] and elapsed_time >= IMAGING_TIMEOUT:
                 raise CloudSigmaException('Drive imaging timed out')
             time.sleep(1)
 
         node_data = {}
-        node_data.update({'name': kwargs['name'], 'cpu': size.cpu, 'mem': size.ram, 'ide:0:0': drive_uuid,
-                          'boot': 'ide:0:0', 'smp': smp})
+        node_data.update(
+            {'name': kwargs['name'], 'cpu': size.cpu, 'mem': size.ram,
+             'ide:0:0': drive_uuid, 'boot': 'ide:0:0', 'smp': smp})
         node_data.update({'nic:0:model': nic_model, 'nic:0:dhcp': 'auto'})
 
         if vnc_password:
             node_data.update({'vnc:ip': 'auto', 'vnc:password': vnc_password})
 
-        response = self.connection.request(action='/servers/create', data=dict2str(node_data),
+        response = self.connection.request(action='/servers/create',
+                                           data=dict2str(node_data),
                                            method='POST').object
 
         if not isinstance(response, list):
@@ -369,7 +384,8 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
         if node is None:
             # Insufficient funds, destroy created drive
             self.ex_drive_destroy(drive_uuid)
-            raise CloudSigmaInsufficientFundsException('Insufficient funds, node creation failed')
+            raise CloudSigmaInsufficientFundsException(
+                'Insufficient funds, node creation failed')
 
         # Start the node after it has been created
         started = self.ex_start_node(node)
@@ -382,13 +398,20 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
     def ex_destroy_node_and_drives(self, node):
         """
         Destroy a node and all the drives associated with it.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
         node = self._get_node_info(node)
 
         drive_uuids = []
         for key, value in node.items():
-            if (key.startswith('ide:') or key.startswith('scsi') or key.startswith('block')) and \
-               not (key.endswith(':bytes') or key.endswith(':requests') or key.endswith('media')):
+            if (key.startswith('ide:') or key.startswith(
+                'scsi') or key.startswith('block')) and\
+                not (key.endswith(':bytes') or
+                     key.endswith(':requests') or key.endswith('media')):
                 drive_uuids.append(value)
 
         node_destroyed = self.destroy_node(self._to_node(node))
@@ -404,8 +427,11 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
     def ex_static_ip_list(self):
         """
         Return a list of available static IP addresses.
+
+        @rtype: C{list} of C{str}
         """
-        response = self.connection.request(action='/resources/ip/list', method='GET')
+        response = self.connection.request(action='/resources/ip/list',
+                                           method='GET')
 
         if response.status != 200:
             raise CloudSigmaException('Could not retrieve IP list')
@@ -416,6 +442,8 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
     def ex_drives_list(self):
         """
         Return a list of all the available drives.
+
+        @rtype: C{list} of C{dict}
         """
         response = self.connection.request(action='/drives/info', method='GET')
 
@@ -424,9 +452,12 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
 
     def ex_static_ip_create(self):
         """
-        Create a new static IP address.
+        Create a new static IP address.p
+
+        @rtype: C{list} of C{dict}
         """
-        response = self.connection.request(action='/resources/ip/create', method='GET')
+        response = self.connection.request(action='/resources/ip/create',
+                                           method='GET')
 
         result = str2dicts(response.body)
         return result
@@ -434,8 +465,14 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
     def ex_static_ip_destroy(self, ip_address):
         """
         Destroy a static IP address.
+
+        @param      ip_address: IP address which should be used
+        @type       ip_address: C{str}
+
+        @rtype: C{bool}
         """
-        response = self.connection.request(action='/resources/ip/%s/destroy' % (ip_address), method='GET')
+        response = self.connection.request(
+            action='/resources/ip/%s/destroy' % (ip_address), method='GET')
 
         return response.status == 204
 
@@ -443,8 +480,14 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
         """
         Destroy a drive with a specified uuid.
         If the drive is currently mounted an exception is thrown.
+
+        @param      drive_uuid: Drive uuid which should be used
+        @type       drive_uuid: C{str}
+
+        @rtype: C{bool}
         """
-        response = self.connection.request(action='/drives/%s/destroy' % (drive_uuid), method='POST')
+        response = self.connection.request(
+            action='/drives/%s/destroy' % (drive_uuid), method='POST')
 
         return response.status == 204
 
@@ -452,10 +495,21 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
         """
         Update a node configuration.
         Changing most of the parameters requires node to be stopped.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @param      kwargs: keyword arguments
+        @type       kwargs: C{dict}
+
+        @rtype: C{bool}
         """
-        valid_keys = ('^name$', '^parent$', '^cpu$', '^smp$', '^mem$', '^boot$', '^nic:0:model$', '^nic:0:dhcp',
-                      '^nic:1:model$', '^nic:1:vlan$', '^nic:1:mac$', '^vnc:ip$', '^vnc:password$', '^vnc:tls',
-                      '^ide:[0-1]:[0-1](:media)?$', '^scsi:0:[0-7](:media)?$', '^block:[0-7](:media)?$')
+        valid_keys = ('^name$', '^parent$', '^cpu$', '^smp$', '^mem$',
+                      '^boot$', '^nic:0:model$', '^nic:0:dhcp',
+                      '^nic:1:model$', '^nic:1:vlan$', '^nic:1:mac$',
+                      '^vnc:ip$', '^vnc:password$', '^vnc:tls',
+                      '^ide:[0-1]:[0-1](:media)?$', '^scsi:0:[0-7](:media)?$',
+                      '^block:[0-7](:media)?$')
 
         invalid_keys = []
         keys = list(kwargs.keys())
@@ -469,42 +523,66 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
                 invalid_keys.append(key)
 
         if invalid_keys:
-            raise CloudSigmaException('Invalid configuration key specified: %s' % (',' .join(invalid_keys)))
+            raise CloudSigmaException(
+                'Invalid configuration key specified: %s' % (
+                ',' .join(invalid_keys)))
 
-        response = self.connection.request(action='/servers/%s/set' % (node.id), data=dict2str(kwargs),
-                                           method='POST')
+        response = self.connection.request(
+            action='/servers/%s/set' % (node.id),
+            data=dict2str(kwargs),
+            method='POST')
 
         return (response.status == 200 and response.body != '')
 
     def ex_start_node(self, node):
         """
         Start a node.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
-        response = self.connection.request(action='/servers/%s/start' % (node.id),
-                                           method='POST')
+        response = self.connection.request(
+            action='/servers/%s/start' % (node.id),
+            method='POST')
 
         return response.status == 200
 
     def ex_stop_node(self, node):
         """
         Stop (shutdown) a node.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
-        response = self.connection.request(action='/servers/%s/stop' % (node.id),
-                                           method='POST')
+        response = self.connection.request(
+            action='/servers/%s/stop' % (node.id),
+            method='POST')
         return response.status == 204
 
     def ex_shutdown_node(self, node):
         """
         Stop (shutdown) a node.
+
+        @inherits: L{CloudSigmaBaseNodeDriver.ex_stop_node}
         """
         return self.ex_stop_node(node)
 
     def ex_destroy_drive(self, drive_uuid):
         """
         Destroy a drive.
+
+        @param      drive_uuid: Drive uuid which should be used
+        @type       drive_uuid: C{str}
+
+        @rtype: C{bool}
         """
-        response = self.connection.request(action='/drives/%s/destroy' % (drive_uuid),
-                                           method='POST')
+        response = self.connection.request(
+            action='/drives/%s/destroy' % (drive_uuid),
+            method='POST')
         return response.status == 204
 
     def _to_node(self, data):
@@ -527,7 +605,8 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
                     public_ips = [data['nic:0:dhcp']]
 
             extra = {}
-            extra_keys = [('cpu', 'int'), ('smp', 'auto'), ('mem', 'int'), ('status', 'str')]
+            extra_keys = [('cpu', 'int'), ('smp', 'auto'), ('mem', 'int'),
+                          ('status', 'str')]
             for key, value_type in extra_keys:
                 if key in data:
                     value = data[key]
@@ -543,10 +622,12 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
                     extra.update({key: value})
 
             if 'vnc:ip' in data and 'vnc:password' in data:
-                extra.update({'vnc_ip': data['vnc:ip'], 'vnc_password': data['vnc:password']})
+                extra.update({'vnc_ip': data['vnc:ip'],
+                              'vnc_password': data['vnc:password']})
 
             node = Node(id=data['server'], name=data['name'], state=state,
-                        public_ips=public_ips, private_ips=None, driver=self.connection.driver,
+                        public_ips=public_ips, private_ips=None,
+                        driver=self.connection.driver,
                         extra=extra)
 
             return node
@@ -557,12 +638,14 @@ class CloudSigmaBaseNodeDriver(NodeDriver):
         node = [node for node in nodes if node.id == node.id]
 
         if not node:
-            raise CloudSigmaException('Node with id %s does not exist' % (node_id))
+            raise CloudSigmaException(
+                'Node with id %s does not exist' % (node_id))
 
         return node[0]
 
     def _get_node_info(self, node):
-        response = self.connection.request(action='/servers/%s/info' % (node.id))
+        response = self.connection.request(
+            action='/servers/%s/info' % (node.id))
 
         result = str2dicts(response.body)
         return result[0]
diff --git libcloud/compute/drivers/cloudstack.py libcloud/compute/drivers/cloudstack.py
index 315924c..690b4ce 100644
--- libcloud/compute/drivers/cloudstack.py
+++ libcloud/compute/drivers/cloudstack.py
@@ -15,8 +15,8 @@
 
 from libcloud.compute.providers import Provider
 from libcloud.common.cloudstack import CloudStackDriverMixIn
-from libcloud.compute.base import Node, NodeDriver, NodeImage, NodeLocation, \
-                                  NodeSize, StorageVolume
+from libcloud.compute.base import Node, NodeDriver, NodeImage, NodeLocation,\
+    NodeSize, StorageVolume
 from libcloud.compute.types import NodeState, LibcloudError
 
 
@@ -90,6 +90,7 @@ class CloudStackDiskOffering(object):
     def __eq__(self, other):
         return self.__class__ is other.__class__ and self.id == other.id
 
+
 class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
     """Driver for the CloudStack API.
 
@@ -184,9 +185,7 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
                 public_ips=public_ips.get(vm['id'], {}).keys(),
                 private_ips=private_ips,
                 driver=self,
-                extra={
-                    'zoneid': vm['zoneid'],
-                }
+                extra={'zoneid': vm['zoneid'], }
             )
 
             addrs = public_ips.get(vm['id'], {}).items()
@@ -224,13 +223,10 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
         if 'network_id' in kwargs:
             extra_args['networkids'] = network_id
 
-        result = self._async_request('deployVirtualMachine',
-            name=name,
-            displayname=name,
-            serviceofferingid=size.id,
-            templateid=image.id,
-            zoneid=location.id,
-            **extra_args
+        result = self._async_request(
+            'deployVirtualMachine', name=name, displayname=name,
+            serviceofferingid=size.id, templateid=image.id,
+            zoneid=location.id, **extra_args
         )
 
         node = result['virtualmachine']
@@ -258,18 +254,21 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
         return True
 
     def ex_list_disk_offerings(self):
-        """Fetch a list of all available disk offerings."""
+        """Fetch a list of all available disk offerings.
+
+        @rtype: C{list} of L{CloudStackDiskOffering}
+        """
 
         diskOfferings = []
 
         diskOfferResponse = self._sync_request('listDiskOfferings')
         for diskOfferDict in diskOfferResponse.get('diskoffering', ()):
             diskOfferings.append(
-                    CloudStackDiskOffering(
-                        id=diskOfferDict['id'],
-                        name=diskOfferDict['name'],
-                        size=diskOfferDict['disksize'],
-                        customizable=diskOfferDict['iscustomized']))
+                CloudStackDiskOffering(
+                    id=diskOfferDict['id'],
+                    name=diskOfferDict['name'],
+                    size=diskOfferDict['disksize'],
+                    customizable=diskOfferDict['iscustomized']))
 
         return diskOfferings
 
@@ -280,25 +279,25 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
                 break
         else:
             raise LibcloudError(
-                    'Disk offering with size=%s not found' % size)
+                'Disk offering with size=%s not found' % size)
 
         extraParams = dict()
         if diskOffering.customizable:
             extraParams['size'] = size
 
         requestResult = self._async_request('createVolume',
-                                name=name,
-                                diskOfferingId=diskOffering.id,
-                                zoneId=location.id,
-                                **extraParams)
+                                            name=name,
+                                            diskOfferingId=diskOffering.id,
+                                            zoneId=location.id,
+                                            **extraParams)
 
         volumeResponse = requestResult['volume']
 
         return StorageVolume(id=volumeResponse['id'],
-                            name=name,
-                            size=size,
-                            driver=self,
-                            extra=dict(name=volumeResponse['name']))
+                             name=name,
+                             size=size,
+                             driver=self,
+                             extra=dict(name=volumeResponse['name']))
 
     def attach_volume(self, node, volume, device=None):
         # TODO Add handling for device name
@@ -315,13 +314,21 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
         return True
 
     def ex_allocate_public_ip(self, node):
-        "Allocate a public IP and bind it to a node."
+        """
+        "Allocate a public IP and bind it to a node.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: L{CloudStackAddress}
+        """
 
         zoneid = node.extra['zoneid']
         addr = self._async_request('associateIpAddress', zoneid=zoneid)
         addr = addr['ipaddress']
-        result = self._sync_request('enableStaticNat', virtualmachineid=node.id,
-                                   ipaddressid=addr['id'])
+        result = self._sync_request('enableStaticNat',
+                                    virtualmachineid=node.id,
+                                    ipaddressid=addr['id'])
         if result.get('success', '').lower() != 'true':
             return None
 
@@ -331,7 +338,17 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
         return addr
 
     def ex_release_public_ip(self, node, address):
-        "Release a public IP."
+        """
+        Release a public IP.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @param      address: CloudStackAddress which should be used
+        @type       address: L{CloudStackAddress}
+
+        @rtype: C{bool}
+        """
 
         node.extra['ip_addresses'].remove(address)
         node.public_ips.remove(address.address)
@@ -342,7 +359,26 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
 
     def ex_add_ip_forwarding_rule(self, node, address, protocol,
                                   start_port, end_port=None):
-        "Add a NAT/firewall forwarding rule."
+        """
+        "Add a NAT/firewall forwarding rule.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @param      address: CloudStackAddress which should be used
+        @type       address: L{CloudStackAddress}
+
+        @param      protocol: Protocol which should be used (TCP or UDP)
+        @type       protocol: C{str}
+
+        @param      start_port: Start port which should be used
+        @type       start_port: C{int}
+
+        @param end_port: End port which should be used
+        @type end_port: C{int}
+
+        @rtype: L{CloudStackForwardingRule}
+        """
 
         protocol = protocol.upper()
         if protocol not in ('TCP', 'UDP'):
@@ -364,14 +400,37 @@ class CloudStackNodeDriver(CloudStackDriverMixIn, NodeDriver):
         return rule
 
     def ex_delete_ip_forwarding_rule(self, node, rule):
-        "Remove a NAT/firewall forwarding rule."
+        """
+        Remove a NAT/firewall forwarding rule.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @param rule: Forwarding rule which should be used
+        @type rule: L{CloudStackForwardingRule}
+
+        @rtype: C{bool}
+        """
 
         node.extra['ip_forwarding_rules'].remove(rule)
         self._async_request('deleteIpForwardingRule', id=rule.id)
         return True
 
     def ex_register_iso(self, name, url, location=None, **kwargs):
-        "Registers an existing ISO by URL."
+        """
+        Registers an existing ISO by URL.
+
+        @param      name: Name which should be used
+        @type       name: C{str}
+
+        @param      url: Url should be used
+        @type       url: C{str}
+
+        @param      location: Location which should be used
+        @type       location: L{NodeLocation}
+
+        @rtype: C{str}
+        """
         if location is None:
             location = self.list_locations()[0]
 
diff --git libcloud/compute/drivers/dreamhost.py libcloud/compute/drivers/dreamhost.py
index f7e29e7..6322a43 100644
--- libcloud/compute/drivers/dreamhost.py
+++ libcloud/compute/drivers/dreamhost.py
@@ -30,45 +30,44 @@ from libcloud.compute.types import Provider, NodeState
 
 DH_PS_SIZES = {
     'minimum': {
-        'id' : 'minimum',
-        'name' : 'Minimum DH PS size',
-        'ram' : 300,
-        'disk' : None,
-        'bandwidth' : None
+        'id': 'minimum',
+        'name': 'Minimum DH PS size',
+        'ram': 300,
+        'disk': None,
+        'bandwidth': None
     },
     'maximum': {
-        'id' : 'maximum',
-        'name' : 'Maximum DH PS size',
-        'ram' : 4000,
-        'disk' : None,
-        'bandwidth' : None
+        'id': 'maximum',
+        'name': 'Maximum DH PS size',
+        'ram': 4000,
+        'disk': None,
+        'bandwidth': None
     },
     'default': {
-        'id' : 'default',
-        'name' : 'Default DH PS size',
-        'ram' : 2300,
-        'disk' : None,
-        'bandwidth' : None
+        'id': 'default',
+        'name': 'Default DH PS size',
+        'ram': 2300,
+        'disk': None,
+        'bandwidth': None
     },
     'low': {
-        'id' : 'low',
-        'name' : 'DH PS with 1GB RAM',
-        'ram' : 1000,
-        'disk' : None,
-        'bandwidth' : None
+        'id': 'low',
+        'name': 'DH PS with 1GB RAM',
+        'ram': 1000,
+        'disk': None,
+        'bandwidth': None
     },
     'high': {
-        'id' : 'high',
-        'name' : 'DH PS with 3GB RAM',
-        'ram' : 3000,
-        'disk' : None,
-        'bandwidth' : None
+        'id': 'high',
+        'name': 'DH PS with 3GB RAM',
+        'ram': 3000,
+        'disk': None,
+        'bandwidth': None
     },
 }
 
 
 class DreamhostAPIException(Exception):
-
     def __str__(self):
         return self.args[0]
 
@@ -136,17 +135,17 @@ class DreamhostNodeDriver(NodeDriver):
     def create_node(self, **kwargs):
         """Create a new Dreamhost node
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
 
         @keyword    ex_movedata: Copy all your existing users to this new PS
         @type       ex_movedata: C{str}
         """
         size = kwargs['size'].ram
         params = {
-            'cmd' : 'dreamhost_ps-add_ps',
-            'movedata' : kwargs.get('movedata', 'no'),
-            'type' : kwargs['image'].name,
-            'size' : size
+            'cmd': 'dreamhost_ps-add_ps',
+            'movedata': kwargs.get('movedata', 'no'),
+            'type': kwargs['image'].name,
+            'size': size
         }
         data = self.connection.request('/', params).object
         return Node(
@@ -157,14 +156,14 @@ class DreamhostNodeDriver(NodeDriver):
             private_ips=[],
             driver=self.connection.driver,
             extra={
-                'type' : kwargs['image'].name
+                'type': kwargs['image'].name
             }
         )
 
     def destroy_node(self, node):
         params = {
-            'cmd' : 'dreamhost_ps-remove_ps',
-            'ps' : node.id
+            'cmd': 'dreamhost_ps-remove_ps',
+            'ps': node.id
         }
         try:
             return self.connection.request('/', params).success()
@@ -173,8 +172,8 @@ class DreamhostNodeDriver(NodeDriver):
 
     def reboot_node(self, node):
         params = {
-            'cmd' : 'dreamhost_ps-reboot',
-            'ps' : node.id
+            'cmd': 'dreamhost_ps-reboot',
+            'ps': node.id
         }
         try:
             return self.connection.request('/', params).success()
@@ -212,17 +211,14 @@ class DreamhostNodeDriver(NodeDriver):
             'You cannot select a location for '
             'DreamHost Private Servers at this time.')
 
-    ############################################
-    # Private Methods (helpers and extensions) #
-    ############################################
     def _resize_node(self, node, size):
         if (size < 300 or size > 4000):
             return False
 
         params = {
-            'cmd' : 'dreamhost_ps-set_size',
-            'ps' : node.id,
-            'size' : size
+            'cmd': 'dreamhost_ps-set_size',
+            'ps': node.id,
+            'size': size
         }
         try:
             return self.connection.request('/', params).success()
diff --git libcloud/compute/drivers/dummy.py libcloud/compute/drivers/dummy.py
index 752b307..185b367 100644
--- libcloud/compute/drivers/dummy.py
+++ libcloud/compute/drivers/dummy.py
@@ -82,30 +82,30 @@ class DummyNodeDriver(NodeDriver):
             for i in range(num):
                 ip = _int_to_ip(startip + i)
                 self.nl.append(
-                Node(id=i,
-                    name='dummy-%d' % (i),
-                    state=NodeState.RUNNING,
-                    public_ips=[ip],
-                    private_ips=[],
-                    driver=self,
-                    extra={'foo': 'bar'})
+                    Node(id=i,
+                         name='dummy-%d' % (i),
+                         state=NodeState.RUNNING,
+                         public_ips=[ip],
+                         private_ips=[],
+                         driver=self,
+                         extra={'foo': 'bar'})
                 )
         else:
             self.nl = [
                 Node(id=1,
-                    name='dummy-1',
-                    state=NodeState.RUNNING,
-                    public_ips=['127.0.0.1'],
-                    private_ips=[],
-                    driver=self,
-                    extra={'foo': 'bar'}),
+                     name='dummy-1',
+                     state=NodeState.RUNNING,
+                     public_ips=['127.0.0.1'],
+                     private_ips=[],
+                     driver=self,
+                     extra={'foo': 'bar'}),
                 Node(id=2,
-                    name='dummy-2',
-                    state=NodeState.RUNNING,
-                    public_ips=['127.0.0.1'],
-                    private_ips=[],
-                    driver=self,
-                    extra={'foo': 'bar'}),
+                     name='dummy-2',
+                     state=NodeState.RUNNING,
+                     public_ips=['127.0.0.1'],
+                     private_ips=[],
+                     driver=self,
+                     extra={'foo': 'bar'}),
             ]
         self.connection = DummyConnection(self.creds)
 
@@ -237,9 +237,9 @@ class DummyNodeDriver(NodeDriver):
             NodeSize(id=4,
                      name="XXL Big",
                      ram=4096 * 2,
-                     disk=32*4,
-                     bandwidth=2500*3,
-                     price=32*2,
+                     disk=32 * 4,
+                     bandwidth=2500 * 3,
+                     price=32 * 2,
                      driver=self),
         ]
 
diff --git libcloud/compute/drivers/ec2.py libcloud/compute/drivers/ec2.py
index b824a97..77831e3 100644
--- libcloud/compute/drivers/ec2.py
+++ libcloud/compute/drivers/ec2.py
@@ -255,7 +255,8 @@ class EC2Connection(ConnectionUserAndKey):
         string_to_sign = '\n'.join(('GET', hostname, path, qs))
 
         b64_hmac = base64.b64encode(
-            hmac.new(b(secret_key), b(string_to_sign), digestmod=sha256).digest()
+            hmac.new(b(secret_key), b(string_to_sign),
+                     digestmod=sha256).digest()
         )
         return b64_hmac.decode('utf-8')
 
@@ -341,10 +342,10 @@ class EC2NodeDriver(NodeDriver):
 
     def _to_node(self, element, groups=None):
         try:
-            state = self.NODE_STATE_MAP[
-                    findattr(element=element, xpath="instanceState/name",
-                             namespace=NAMESPACE)
-            ]
+            state = self.NODE_STATE_MAP[findattr(element=element,
+                                                 xpath="instanceState/name",
+                                                 namespace=NAMESPACE)
+                                        ]
         except KeyError:
             state = NodeState.UNKNOWN
 
@@ -353,16 +354,18 @@ class EC2NodeDriver(NodeDriver):
         tags = dict((findtext(element=item, xpath='key', namespace=NAMESPACE),
                      findtext(element=item, xpath='value',
                               namespace=NAMESPACE))
-        for item in findall(element=element, xpath='tagSet/item',
-                            namespace=NAMESPACE))
+                    for item in findall(element=element,
+                                        xpath='tagSet/item',
+                                        namespace=NAMESPACE)
+                    )
 
         name = tags.get('Name', instance_id)
 
         public_ip = findtext(element=element, xpath='ipAddress',
-                              namespace=NAMESPACE)
+                             namespace=NAMESPACE)
         public_ips = [public_ip] if public_ip else []
         private_ip = findtext(element=element, xpath='privateIpAddress',
-                                 namespace=NAMESPACE)
+                              namespace=NAMESPACE)
         private_ips = [private_ip] if private_ip else []
 
         n = Node(
@@ -390,10 +393,11 @@ class EC2NodeDriver(NodeDriver):
                 'launchindex': findattr(element=element,
                                         xpath="amiLaunchIndex",
                                         namespace=NAMESPACE),
-                'productcode':
-                    [p.text for p in findall(element=element,
-                                    xpath="productCodesSet/item/productCode",
-                                    namespace=NAMESPACE
+                'productcode': [
+                    p.text for p in findall(
+                        element=element,
+                        xpath="productCodesSet/item/productCode",
+                        namespace=NAMESPACE
                     )],
                 'instancetype': findattr(element=element, xpath="instanceType",
                                          namespace=NAMESPACE),
@@ -415,49 +419,46 @@ class EC2NodeDriver(NodeDriver):
         return n
 
     def _to_images(self, object):
-        return [self._to_image(el)
-                for el in object.findall(
-            fixxpath(xpath='imagesSet/item', namespace=NAMESPACE)
-        )]
+        return [self._to_image(el) for el in object.findall(
+            fixxpath(xpath='imagesSet/item', namespace=NAMESPACE))
+        ]
 
     def _to_image(self, element):
-        n = NodeImage(id=findtext(element=element, xpath='imageId',
+        n = NodeImage(
+            id=findtext(element=element, xpath='imageId', namespace=NAMESPACE),
+            name=findtext(element=element, xpath='imageLocation',
+                          namespace=NAMESPACE),
+            driver=self.connection.driver,
+            extra={
+                'state': findattr(element=element, xpath="imageState",
                                   namespace=NAMESPACE),
-                      name=findtext(element=element, xpath='imageLocation',
+                'ownerid': findattr(element=element, xpath="imageOwnerId",
                                     namespace=NAMESPACE),
-                      driver=self.connection.driver,
-                      extra={
-                          'state': findattr(element=element,
-                                            xpath="imageState",
-                                            namespace=NAMESPACE),
-                          'ownerid': findattr(element=element,
-                                        xpath="imageOwnerId",
-                                        namespace=NAMESPACE),
-                          'owneralias': findattr(element=element,
-                                        xpath="imageOwnerAlias",
-                                        namespace=NAMESPACE),
-                          'ispublic': findattr(element=element,
-                                        xpath="isPublic",
-                                        namespace=NAMESPACE),
-                          'architecture': findattr(element=element,
-                                        xpath="architecture",
-                                        namespace=NAMESPACE),
-                          'imagetype': findattr(element=element,
-                                        xpath="imageType",
-                                        namespace=NAMESPACE),
-                          'platform': findattr(element=element,
-                                        xpath="platform",
-                                        namespace=NAMESPACE),
-                          'rootdevicetype': findattr(element=element,
-                                        xpath="rootDeviceType",
-                                        namespace=NAMESPACE),
-                          'virtualizationtype': findattr(element=element,
-                                        xpath="virtualizationType",
-                                        namespace=NAMESPACE),
-                          'hypervisor': findattr(element=element,
-                                        xpath="hypervisor",
-                                        namespace=NAMESPACE)
-                      }
+                'owneralias': findattr(element=element,
+                                       xpath="imageOwnerAlias",
+                                       namespace=NAMESPACE),
+                'ispublic': findattr(element=element,
+                                     xpath="isPublic",
+                                     namespace=NAMESPACE),
+                'architecture': findattr(element=element,
+                                         xpath="architecture",
+                                         namespace=NAMESPACE),
+                'imagetype': findattr(element=element,
+                                      xpath="imageType",
+                                      namespace=NAMESPACE),
+                'platform': findattr(element=element,
+                                     xpath="platform",
+                                     namespace=NAMESPACE),
+                'rootdevicetype': findattr(element=element,
+                                           xpath="rootDeviceType",
+                                           namespace=NAMESPACE),
+                'virtualizationtype': findattr(
+                    element=element, xpath="virtualizationType",
+                    namespace=NAMESPACE),
+                'hypervisor': findattr(element=element,
+                                       xpath="hypervisor",
+                                       namespace=NAMESPACE)
+            }
         )
         return n
 
@@ -466,19 +467,23 @@ class EC2NodeDriver(NodeDriver):
                          namespace=NAMESPACE)
         size = findtext(element=element, xpath='size', namespace=NAMESPACE)
 
-        return StorageVolume(
-                        id=volId,
-                        name=name,
-                        size=int(size),
-                        driver=self)
+        return StorageVolume(id=volId,
+                             name=name,
+                             size=int(size),
+                             driver=self)
 
     def list_nodes(self, ex_node_ids=None):
         """
-        @type node.id: C{list}
-        @param ex_node_ids: List of C{node.id}
-        This parameter is used to filter the list of
+        List all nodes
+
+        Ex_node_ids parameter is used to filter the list of
         nodes that should be returned. Only the nodes
         with the corresponding node ids will be returned.
+
+        @param      ex_node_ids: List of C{node.id}
+        @type       ex_node_ids: C{list} of C{str}
+
+        @rtype: C{list} of L{Node}
         """
         params = {'Action': 'DescribeInstances'}
         if ex_node_ids:
@@ -502,11 +507,11 @@ class EC2NodeDriver(NodeDriver):
     def list_sizes(self, location=None):
         # Cluster instances are not available in all the regions
         if self.region_name == 'us-east-1':
-          ignored_size_ids = None
+            ignored_size_ids = None
         elif self.region_name == 'eu-west-1':
-          ignored_size_ids = CLUSTER_INSTANCES_IDS[:-1]
+            ignored_size_ids = CLUSTER_INSTANCES_IDS[:-1]
         else:
-          ignored_size_ids = CLUSTER_INSTANCES_IDS
+            ignored_size_ids = CLUSTER_INSTANCES_IDS
 
         sizes = self._get_sizes(ignored_size_ids=ignored_size_ids)
         return sizes
@@ -531,50 +536,49 @@ class EC2NodeDriver(NodeDriver):
 
     def list_locations(self):
         locations = []
-        for index, availability_zone in \
-            enumerate(self.ex_list_availability_zones()):
-            locations.append(EC2NodeLocation(index,
-                                             self.friendly_name,
-                                             self.country,
-                                             self,
-                                             availability_zone))
+        for index, availability_zone in\
+                enumerate(self.ex_list_availability_zones()):
+                    locations.append(EC2NodeLocation(
+                        index, self.friendly_name, self.country, self,
+                        availability_zone)
+                    )
         return locations
 
     def create_volume(self, size, name, location=None, snapshot=None):
         params = {
-                'Action': 'CreateVolume',
-                'Size': str(size) }
+            'Action': 'CreateVolume',
+            'Size': str(size)}
 
         if location is not None:
             params['AvailabilityZone'] = location.availability_zone.name
 
         volume = self._to_volume(
-                   self.connection.request(self.path, params=params).object,
-                   name=name)
+            self.connection.request(self.path, params=params).object,
+            name=name)
         self.ex_create_tags(volume, {'Name': name})
         return volume
 
     def destroy_volume(self, volume):
         params = {
-                'Action': 'DeleteVolume',
-                'VolumeId': volume.id }
+            'Action': 'DeleteVolume',
+            'VolumeId': volume.id}
         response = self.connection.request(self.path, params=params).object
         return self._get_boolean(response)
 
     def attach_volume(self, node, volume, device):
         params = {
-                'Action': 'AttachVolume',
-                'VolumeId': volume.id,
-                'InstanceId': node.id,
-                'Device': device }
+            'Action': 'AttachVolume',
+            'VolumeId': volume.id,
+            'InstanceId': node.id,
+            'Device': device}
 
         self.connection.request(self.path, params=params)
         return True
 
     def detach_volume(self, volume):
         params = {
-                'Action': 'DetachVolume',
-                'VolumeId': volume.id }
+            'Action': 'DetachVolume',
+            'VolumeId': volume.id}
 
         self.connection.request(self.path, params=params)
         return True
@@ -582,18 +586,18 @@ class EC2NodeDriver(NodeDriver):
     def ex_create_keypair(self, name):
         """Creates a new keypair
 
-        @note: This is a non-standard extension API, and
-               only works for EC2.
+        @note: This is a non-standard extension API, and only works for EC2.
+
+        @param      name: The name of the keypair to Create. This must be
+            unique, otherwise an InvalidKeyPair.Duplicate exception is raised.
+        @type       name: C{str}
 
-        @type name: C{str}
-        @param name: The name of the keypair to Create. This must be
-                     unique, otherwise an InvalidKeyPair.Duplicate
-                     exception is raised.
+        @rtype: C{dict}
         """
         params = {
             'Action': 'CreateKeyPair',
             'KeyName': name,
-            }
+        }
         response = self.connection.request(self.path, params=params).object
         key_material = findtext(element=response, xpath='keyMaterial',
                                 namespace=NAMESPACE)
@@ -602,29 +606,32 @@ class EC2NodeDriver(NodeDriver):
         return {
             'keyMaterial': key_material,
             'keyFingerprint': key_fingerprint,
-            }
+        }
 
     def ex_import_keypair(self, name, keyfile):
-        """imports a new public key
+        """
+        imports a new public key
 
         @note: This is a non-standard extension API, and only works for EC2.
 
-        @type name: C{str}
-        @param name: The name of the public key to import. This must be unique,
-                     otherwise an InvalidKeyPair.Duplicate exception is raised.
+        @param      name: The name of the public key to import. This must be
+         unique, otherwise an InvalidKeyPair.Duplicate exception is raised.
+        @type       name: C{str}
 
-        @type keyfile: C{str}
-        @param keyfile: The filename with path of the public key to import.
+        @param     keyfile: The filename with path of the public key to import.
+        @type      keyfile: C{str}
 
+        @rtype: C{dict}
         """
         with open(os.path.expanduser(keyfile)) as fh:
             content = fh.read()
 
         base64key = base64.b64encode(content)
 
-        params = {'Action': 'ImportKeyPair',
-                  'KeyName': name,
-                  'PublicKeyMaterial': base64key
+        params = {
+            'Action': 'ImportKeyPair',
+            'KeyName': name,
+            'PublicKeyMaterial': base64key
         }
 
         response = self.connection.request(self.path, params=params).object
@@ -635,20 +642,23 @@ class EC2NodeDriver(NodeDriver):
         return {
             'keyName': key_name,
             'keyFingerprint': key_fingerprint,
-            }
+        }
 
     def ex_describe_keypairs(self, name):
         """Describes a keypair by name
 
         @note: This is a non-standard extension API, and only works for EC2.
 
-        @type name: C{str}
-        @param name: The name of the keypair to describe.
+        @param      name: The name of the keypair to describe.
+        @type       name: C{str}
+
+        @rtype: C{dict}
 
         """
 
-        params = {'Action': 'DescribeKeyPairs',
-                  'KeyName.1': name
+        params = {
+            'Action': 'DescribeKeyPairs',
+            'KeyName.1': name
         }
 
         response = self.connection.request(self.path, params=params).object
@@ -663,12 +673,15 @@ class EC2NodeDriver(NodeDriver):
 
         @note: This is a non-standard extension API, and only works for EC2.
 
-        @type name: C{str}
-        @param name: The name of the security group to Create.
+        @param      name: The name of the security group to Create.
                      This must be unique.
+        @type       name: C{str}
+
+        @param      description: Human readable description of a Security
+        Group.
+        @type       description: C{str}
 
-        @type description: C{str}
-        @param description: Human readable description of a Security Group.
+        @rtype: C{str}
         """
         params = {'Action': 'CreateSecurityGroup',
                   'GroupName': name,
@@ -676,12 +689,15 @@ class EC2NodeDriver(NodeDriver):
         return self.connection.request(self.path, params=params).object
 
     def ex_authorize_security_group_permissive(self, name):
-        """Edit a Security Group to allow all traffic.
+        """
+        Edit a Security Group to allow all traffic.
 
         @note: This is a non-standard extension API, and only works for EC2.
 
-        @type name: C{str}
-        @param name: The name of the security group to edit
+        @param      name: The name of the security group to edit
+        @type       name: C{str}
+
+        @rtype: C{list} of C{str}
         """
 
         results = []
@@ -733,7 +749,9 @@ class EC2NodeDriver(NodeDriver):
 
         @keyword  only_available: If true, return only availability zones
                                   with state 'available'
-        @type     only_available: C{string}
+        @type     only_available: C{str}
+
+        @rtype: C{list} of L{ExEC2AvailabilityZone}
         """
         params = {'Action': 'DescribeAvailabilityZones'}
 
@@ -771,10 +789,11 @@ class EC2NodeDriver(NodeDriver):
         """
         Return a dictionary of tags for a resource (Node or StorageVolume).
 
-        @type node: C{Node}
-        @param node: Node instance
+        @param  resource: resource which should be used
+        @type   resource: L{Node} or L{StorageVolume}
 
-        @return dict Node tags
+        @return: dict Node tags
+        @rtype: C{dict}
         """
         params = {'Action': 'DescribeTags',
                   'Filter.0.Name': 'resource-id',
@@ -800,10 +819,14 @@ class EC2NodeDriver(NodeDriver):
         """
         Create tags for a resource (Node or StorageVolume).
 
-        @type resource: EC2 resource
         @param resource: Resource to be tagged
+        @type resource: L{Node} or L{StorageVolume}
+
         @param tags: A dictionary or other mapping of strings to strings,
                      associating tag names with tag values.
+        @type tags: C{dict}
+
+        @rtype: C{bool}
         """
         if not tags:
             return
@@ -814,17 +837,24 @@ class EC2NodeDriver(NodeDriver):
             params['Tag.%d.Key' % i] = key
             params['Tag.%d.Value' % i] = tags[key]
 
-        self.connection.request(self.path,
-                                params=params.copy()).object
+        result = self.connection.request(self.path,
+                                         params=params.copy()).object
+        element = findtext(element=result, xpath='return',
+                           namespace=NAMESPACE)
+        return element == 'true'
 
     def ex_delete_tags(self, resource, tags):
         """
         Delete tags from a resource.
 
-        @type resource: EC2 resource
         @param resource: Resource to be tagged
+        @type resource: L{Node} or L{StorageVolume}
+
         @param tags: A dictionary or other mapping of strings to strings,
                      specifying the tag names and tag values to be deleted.
+        @type tags: C{dict}
+
+        @rtype: C{bool}
         """
         if not tags:
             return
@@ -835,8 +865,11 @@ class EC2NodeDriver(NodeDriver):
             params['Tag.%d.Key' % i] = key
             params['Tag.%d.Value' % i] = tags[key]
 
-        self.connection.request(self.path,
-                                params=params.copy()).object
+        result = self.connection.request(self.path,
+                                         params=params.copy()).object
+        element = findtext(element=result, xpath='return',
+                           namespace=NAMESPACE)
+        return element == 'true'
 
     def _add_instance_filter(self, params, node):
         """
@@ -852,11 +885,12 @@ class EC2NodeDriver(NodeDriver):
         Return all the Elastic IP addresses for this account
         optionally, return only the allocated addresses
 
-        @keyword  only_allocated: If true, return only those addresses
+        @param    only_allocated: If true, return only those addresses
                                   that are associated with an instance
-        @type     only_allocated: C{string}
+        @type     only_allocated: C{str}
 
-        @return   list list of elastic ips for this particular account.
+        @return:   list list of elastic ips for this particular account.
+        @rtype: C{list} of C{str}
         """
         params = {'Action': 'DescribeAddresses'}
 
@@ -885,9 +919,13 @@ class EC2NodeDriver(NodeDriver):
         """
         Associate an IP address with a particular node.
 
-        @type node: C{Node}
-        @param node: Node instance
+        @param      node: Node instance
+        @type       node: L{Node}
+
+        @param      elastic_ip_address: IP address which should be used
+        @type       elastic_ip_address: C{str}
 
+        @rtype: C{bool}
         """
         params = {'Action': 'AssociateAddress'}
 
@@ -900,12 +938,12 @@ class EC2NodeDriver(NodeDriver):
         """
         Return Elastic IP addresses for all the nodes in the provided list.
 
-        @type nodes: C{list}
-        @param nodes: List of C{Node} instances
+        @param      nodes: List of C{Node} instances
+        @type       nodes: C{list} of L{Node}
 
-        @return dict Dictionary where a key is a node ID and the value is a
-                     list with the Elastic IP addresses associated with
-                     this node.
+        @return: Dictionary where a key is a node ID and the value is a
+            list with the Elastic IP addresses associated with this node.
+        @rtype: C{dict}
         """
         if not nodes:
             return {}
@@ -940,10 +978,11 @@ class EC2NodeDriver(NodeDriver):
         """
         Return a list of Elastic IP addresses associated with this node.
 
-        @type node: C{Node}
-        @param node: Node instance
+        @param      node: Node instance
+        @type       node: L{Node}
 
-        @return list Elastic IP addresses attached to this node.
+        @return: list Elastic IP addresses attached to this node.
+        @rtype: C{list} of C{str}
         """
         node_elastic_ips = self.ex_describe_addresses([node])
         return node_elastic_ips[node.id]
@@ -953,13 +992,14 @@ class EC2NodeDriver(NodeDriver):
         Modify node attributes.
         A list of valid attributes can be found at http://goo.gl/gxcj8
 
-        @type node: C{Node}
-        @param node: Node instance
+        @param      node: Node instance
+        @type       node: L{Node}
 
-        @type attributes: C{dict}
-        @param attributes: Dictionary with node attributes
+        @param      attributes: Dictionary with node attributes
+        @type       attributes: C{dict}
 
-        @return bool True on success, False otherwise.
+        @return: True on success, False otherwise.
+        @rtype: C{bool}
         """
         attributes = attributes or {}
         attributes.update({'InstanceId': node.id})
@@ -978,13 +1018,14 @@ class EC2NodeDriver(NodeDriver):
         Change the node size.
         Note: Node must be turned of before changing the size.
 
-        @type node: C{Node}
-        @param node: Node instance
+        @param      node: Node instance
+        @type       node: L{Node}
 
-        @type new_size: C{NodeSize}
-        @param new_size: NodeSize intance
+        @param      new_size: NodeSize intance
+        @type       new_size: L{NodeSize}
 
-        @return bool True on success, False otherwise.
+        @return: True on success, False otherwise.
+        @rtype: C{bool}
         """
         if 'instancetype' in node.extra:
             current_instance_type = node.extra['instancetype']
@@ -999,9 +1040,10 @@ class EC2NodeDriver(NodeDriver):
     def create_node(self, **kwargs):
         """Create a new EC2 node
 
-        See L{NodeDriver.create_node} for more keyword args.
         Reference: http://bit.ly/8ZyPSy [docs.amazonwebservices.com]
 
+        @inherits: L{NodeDriver.create_node}
+
         @keyword    ex_mincount: Minimum number of instances to launch
         @type       ex_mincount: C{int}
 
@@ -1034,8 +1076,8 @@ class EC2NodeDriver(NodeDriver):
             if not isinstance(kwargs['ex_securitygroup'], list):
                 kwargs['ex_securitygroup'] = [kwargs['ex_securitygroup']]
             for sig in range(len(kwargs['ex_securitygroup'])):
-                params['SecurityGroup.%d' % (sig + 1,)] = \
-                            kwargs['ex_securitygroup'][sig]
+                params['SecurityGroup.%d' % (sig + 1,)] =\
+                    kwargs['ex_securitygroup'][sig]
 
         if 'location' in kwargs:
             availability_zone = getattr(kwargs['location'],
@@ -1043,15 +1085,15 @@ class EC2NodeDriver(NodeDriver):
             if availability_zone:
                 if availability_zone.region_name != self.region_name:
                     raise AttributeError('Invalid availability zone: %s'
-                    % (availability_zone.name))
+                                         % (availability_zone.name))
                 params['Placement.AvailabilityZone'] = availability_zone.name
 
         if 'ex_keyname' in kwargs:
             params['KeyName'] = kwargs['ex_keyname']
 
         if 'ex_userdata' in kwargs:
-            params['UserData'] = base64.b64encode(b(kwargs['ex_userdata'])) \
-                                       .decode('utf-8')
+            params['UserData'] = base64.b64encode(b(kwargs['ex_userdata']))\
+                .decode('utf-8')
 
         if 'ex_clienttoken' in kwargs:
             params['ClientToken'] = kwargs['ex_clienttoken']
@@ -1076,9 +1118,6 @@ class EC2NodeDriver(NodeDriver):
             return nodes
 
     def reboot_node(self, node):
-        """
-        Reboot the node by passing in the node object
-        """
         params = {'Action': 'RebootInstances'}
         params.update(self._pathlist('InstanceId', [node.id]))
         res = self.connection.request(self.path, params=params).object
@@ -1088,6 +1127,11 @@ class EC2NodeDriver(NodeDriver):
         """
         Start the node by passing in the node object, does not work with
         instance store backed instances
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
         params = {'Action': 'StartInstances'}
         params.update(self._pathlist('InstanceId', [node.id]))
@@ -1098,6 +1142,11 @@ class EC2NodeDriver(NodeDriver):
         """
         Stop the node by passing in the node object, does not work with
         instance store backed instances
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
         params = {'Action': 'StopInstances'}
         params.update(self._pathlist('InstanceId', [node.id]))
@@ -1105,9 +1154,6 @@ class EC2NodeDriver(NodeDriver):
         return self._get_state_boolean(res)
 
     def destroy_node(self, node):
-        """
-        Destroy node by passing in the node object
-        """
         params = {'Action': 'TerminateInstances'}
         params.update(self._pathlist('InstanceId', [node.id]))
         res = self.connection.request(self.path, params=params).object
@@ -1284,7 +1330,7 @@ class EucNodeDriver(EC2NodeDriver):
 
     def list_locations(self):
         raise NotImplementedError(
-                'list_locations not implemented for this driver')
+            'list_locations not implemented for this driver')
 
     def _add_instance_filter(self, params, node):
         """
@@ -1302,22 +1348,22 @@ NIMBUS_INSTANCE_TYPES = {
         'ram': None,
         'disk': None,
         'bandwidth': None,
-        },
+    },
     'm1.large': {
         'id': 'm1.large',
         'name': 'Large Instance',
         'ram': None,
         'disk': None,
         'bandwidth': None,
-        },
+    },
     'm1.xlarge': {
         'id': 'm1.xlarge',
         'name': 'Extra Large Instance',
         'ram': None,
         'disk': None,
         'bandwidth': None,
-        },
-    }
+    },
+}
 
 
 class NimbusConnection(EC2Connection):
@@ -1344,6 +1390,8 @@ class NimbusNodeDriver(EC2NodeDriver):
     def ex_describe_addresses(self, nodes):
         """
         Nimbus doesn't support elastic IPs, so this is a passthrough
+
+        @inherits: L{EC2NodeDriver.ex_describe_addresses}
         """
         nodes_elastic_ip_mappings = {}
         for node in nodes:
@@ -1354,5 +1402,7 @@ class NimbusNodeDriver(EC2NodeDriver):
     def ex_create_tags(self, resource, tags):
         """
         Nimbus doesn't support creating tags, so this is a passthrough
+
+        @inherits: L{EC2NodeDriver.ex_create_tags}
         """
         pass
diff --git libcloud/compute/drivers/ecp.py libcloud/compute/drivers/ecp.py
index da8943a..dff49c0 100644
--- libcloud/compute/drivers/ecp.py
+++ libcloud/compute/drivers/ecp.py
@@ -45,7 +45,6 @@ API_PORT = (80, 443)
 
 
 class ECPResponse(Response):
-
     def success(self):
         if self.status == httplib.OK or self.status == httplib.CREATED:
             try:
@@ -89,7 +88,7 @@ class ECPConnection(ConnectionUserAndKey):
         username = self.user_id
         password = self.key
         base64string = base64.encodestring(
-                b('%s:%s' % (username, password)))[:-1]
+            b('%s:%s' % (username, password)))[:-1]
         authheader = "Basic %s" % base64string
         headers['Authorization'] = authheader
 
@@ -131,6 +130,8 @@ class ECPNodeDriver(NodeDriver):
     def list_nodes(self):
         """
         Returns a list of all running Nodes
+
+        @rtype: C{list} of L{Node}
         """
 
         #Make the call
@@ -140,7 +141,7 @@ class ECPNodeDriver(NodeDriver):
         nodes = []
         for vm in res['vms']:
             node = self._to_node(vm)
-            if not node == None:
+            if not node is None:
                 nodes.append(node)
 
         #And return it
@@ -157,7 +158,8 @@ class ECPNodeDriver(NodeDriver):
             return None
 
         #IPs
-        iplist = [interface['ip'] for interface in vm['interfaces']  if interface['ip'] != '127.0.0.1']
+        iplist = [interface['ip'] for interface in vm['interfaces'] if
+                  interface['ip'] != '127.0.0.1']
 
         public_ips = []
         private_ips = []
@@ -174,12 +176,12 @@ class ECPNodeDriver(NodeDriver):
 
         #Create the node object
         n = Node(
-          id=vm['uuid'],
-          name=vm['name'],
-          state=NodeState.RUNNING,
-          public_ips=public_ips,
-          private_ips=private_ips,
-          driver=self,
+            id=vm['uuid'],
+            name=vm['name'],
+            state=NodeState.RUNNING,
+            public_ips=public_ips,
+            private_ips=private_ips,
+            driver=self,
         )
 
         return n
@@ -187,16 +189,18 @@ class ECPNodeDriver(NodeDriver):
     def reboot_node(self, node):
         """
         Shuts down a VM and then starts it again.
+
+        @inherits: L{NodeDriver.reboot_node}
         """
 
         #Turn the VM off
         #Black magic to make the POST requests work
         d = self.connection._encode_multipart_formdata({'action': 'stop'})
         self.connection.request(
-                   '/rest/hosting/vm/%s' % node.id,
-                   method='POST',
-                   headers=d[0],
-                   data=d[1]
+            '/rest/hosting/vm/%s' % node.id,
+            method='POST',
+            headers=d[0],
+            data=d[1]
         ).parse_body()
 
         node.state = NodeState.REBOOTING
@@ -204,8 +208,8 @@ class ECPNodeDriver(NodeDriver):
         while node.state == NodeState.REBOOTING:
             #Check if it's off.
             response = self.connection.request(
-                     '/rest/hosting/vm/%s' % node.id
-                     ).parse_body()
+                '/rest/hosting/vm/%s' % node.id
+            ).parse_body()
             if response['vm']['state'] == 'off':
                 node.state = NodeState.TERMINATED
             else:
@@ -227,6 +231,8 @@ class ECPNodeDriver(NodeDriver):
     def destroy_node(self, node):
         """
         Shuts down and deletes a VM.
+
+        @inherits: L{NodeDriver.destroy_node}
         """
 
         #Shut down first
@@ -245,8 +251,8 @@ class ECPNodeDriver(NodeDriver):
         while node.state == NodeState.PENDING:
             #Check if it's off.
             response = self.connection.request(
-                       '/rest/hosting/vm/%s' % node.id
-                       ).parse_body()
+                '/rest/hosting/vm/%s' % node.id
+            ).parse_body()
             if response['vm']['state'] == 'off':
                 node.state = NodeState.TERMINATED
             else:
@@ -267,6 +273,8 @@ class ECPNodeDriver(NodeDriver):
     def list_images(self, location=None):
         """
         Returns a list of all package templates aka appiances aka images.
+
+        @inherits: L{NodeDriver.list_images}
         """
 
         #Make the call
@@ -279,14 +287,16 @@ class ECPNodeDriver(NodeDriver):
             images.append(NodeImage(
                 id=ptemplate['uuid'],
                 name='%s: %s' % (ptemplate['name'], ptemplate['description']),
-                driver=self,
-                ))
+                driver=self,)
+            )
 
         return images
 
     def list_sizes(self, location=None):
         """
         Returns a list of all hardware templates
+
+        @inherits: L{NodeDriver.list_sizes}
         """
 
         #Make the call
@@ -303,31 +313,43 @@ class ECPNodeDriver(NodeDriver):
                 disk=0,  # Disk is independent of hardware template.
                 bandwidth=0,  # There is no way to keep track of bandwidth.
                 price=0,  # The billing system is external.
-                driver=self,
-                ))
+                driver=self,)
+            )
 
         return sizes
 
     def list_locations(self):
         """
         This feature does not exist in ECP. Returns hard coded dummy location.
+
+        @rtype: C{list} of L{NodeLocation}
         """
-        return [
-          NodeLocation(id=1,
-                       name="Cloud",
-                       country='',
-                       driver=self),
-        ]
+        return [NodeLocation(id=1,
+                             name="Cloud",
+                             country='',
+                             driver=self),
+                ]
 
     def create_node(self, **kwargs):
         """
         Creates a virtual machine.
 
-        Parameters: name (string), image (NodeImage), size (NodeSize)
+        @keyword    name:   String with a name for this new node (required)
+        @type       name:   C{str}
+
+        @keyword    size:   The size of resources allocated to this node .
+                            (required)
+        @type       size:   L{NodeSize}
+
+        @keyword    image:  OS Image to boot on node. (required)
+        @type       image:  L{NodeImage}
+
+        @rtype: L{Node}
         """
 
         #Find out what network to put the VM on.
-        res = self.connection.request('/rest/hosting/network/list').parse_body()
+        res = self.connection.request(
+            '/rest/hosting/network/list').parse_body()
 
         #Use the first / default network because there is no way to specific
         #which one
@@ -335,11 +357,11 @@ class ECPNodeDriver(NodeDriver):
 
         #Prepare to make the VM
         data = {
-            'name' : str(kwargs['name']),
-            'package' : str(kwargs['image'].id),
-            'hardware' : str(kwargs['size'].id),
-            'network_uuid' : str(network),
-            'disk' : ''
+            'name': str(kwargs['name']),
+            'package': str(kwargs['image'].id),
+            'hardware': str(kwargs['size'].id),
+            'network_uuid': str(network),
+            'disk': ''
         }
 
         #Black magic to make the POST requests work
diff --git libcloud/compute/drivers/elasticstack.py libcloud/compute/drivers/elasticstack.py
index 678a606..530e434 100644
--- libcloud/compute/drivers/elasticstack.py
+++ libcloud/compute/drivers/elasticstack.py
@@ -154,11 +154,10 @@ class ElasticStackBaseConnection(ConnectionUserAndKey):
     def add_default_headers(self, headers):
         headers['Accept'] = 'application/json'
         headers['Content-Type'] = 'application/json'
-        headers['Authorization'] = ('Basic %s'
-                                    % (base64.b64encode(b('%s:%s'
-                                                        % (self.user_id,
-                                                           self.key))))
-                                                        .decode('utf-8'))
+        headers['Authorization'] = \
+            ('Basic %s' % (base64.b64encode(b('%s:%s' % (self.user_id,
+                                                         self.key))))
+                .decode('utf-8'))
         return headers
 
 
@@ -227,10 +226,10 @@ class ElasticStackBaseNodeDriver(NodeDriver):
     def create_node(self, **kwargs):
         """Creates a ElasticStack instance
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
 
         @keyword    name: String with a name for this new node (required)
-        @type       name: C{string}
+        @type       name: C{str}
 
         @keyword    smp: Number of virtual processors or None to calculate
                          based on the cpu speed
@@ -238,13 +237,13 @@ class ElasticStackBaseNodeDriver(NodeDriver):
 
         @keyword    nic_model: e1000, rtl8139 or virtio
                                (if not specified, e1000 is used)
-        @type       nic_model: C{string}
+        @type       nic_model: C{str}
 
         @keyword    vnc_password: If set, the same password is also used for
                                   SSH access with user toor,
                                   otherwise VNC access is disabled and
                                   no SSH login is possible.
-        @type       vnc_password: C{string}
+        @type       vnc_password: C{str}
         """
         size = kwargs['size']
         image = kwargs['image']
@@ -294,8 +293,7 @@ class ElasticStackBaseNodeDriver(NodeDriver):
             ).object
 
             elapsed_time = time.time() - imaging_start
-            if ('imaging' in response
-                and elapsed_time >= IMAGING_TIMEOUT):
+            if ('imaging' in response and elapsed_time >= IMAGING_TIMEOUT):
                 raise ElasticStackException('Drive imaging timed out')
 
             time.sleep(1)
@@ -326,7 +324,17 @@ class ElasticStackBaseNodeDriver(NodeDriver):
 
     # Extension methods
     def ex_set_node_configuration(self, node, **kwargs):
-        # Changes the configuration of the running server
+        """
+        Changes the configuration of the running server
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @param      kwargs: keyword arguments
+        @type       kwargs: C{dict}
+
+        @rtype: C{bool}
+        """
         valid_keys = ('^name$', '^parent$', '^cpu$', '^smp$', '^mem$',
                       '^boot$', '^nic:0:model$', '^nic:0:dhcp',
                       '^nic:1:model$', '^nic:1:vlan$', '^nic:1:mac$',
@@ -362,13 +370,12 @@ class ElasticStackBaseNodeDriver(NodeDriver):
         """
         Create a new node, and start deployment.
 
+        @inherits: L{NodeDriver.deploy_node}
+
         @keyword    enable_root: If true, root password will be set to
                                  vnc_password (this will enable SSH access)
                                  and default 'toor' account will be deleted.
         @type       enable_root: C{bool}
-
-        For detailed description and keywords args, see
-        L{NodeDriver.deploy_node}.
         """
         image = kwargs['image']
         vnc_password = kwargs.get('vnc_password', None)
@@ -378,8 +385,8 @@ class ElasticStackBaseNodeDriver(NodeDriver):
             raise ValueError('You need to provide vnc_password argument '
                              'if you want to use deployment')
 
-        if (image in self._standard_drives
-            and not self._standard_drives[image]['supports_deployment']):
+        if (image in self._standard_drives and
+                not self._standard_drives[image]['supports_deployment']):
             raise ValueError('Image %s does not support deployment'
                              % (image.id))
 
@@ -392,8 +399,8 @@ class ElasticStackBaseNodeDriver(NodeDriver):
                                                   delete=True)
             deploy = kwargs.get('deploy', None)
             if deploy:
-                if (isinstance(deploy, ScriptDeployment)
-                    or isinstance(deploy, SSHKeyDeployment)):
+                if (isinstance(deploy, ScriptDeployment) or
+                        isinstance(deploy, SSHKeyDeployment)):
                     deployment = MultiStepDeployment([deploy,
                                                       root_enable_script])
                 elif isinstance(deploy, MultiStepDeployment):
@@ -410,7 +417,14 @@ class ElasticStackBaseNodeDriver(NodeDriver):
         return super(ElasticStackBaseNodeDriver, self).deploy_node(**kwargs)
 
     def ex_shutdown_node(self, node):
-        # Sends the ACPI power-down event
+        """
+        Sends the ACPI power-down event
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
+        """
         response = self.connection.request(
             action='/servers/%s/shutdown' % (node.id),
             method='POST'
@@ -418,7 +432,14 @@ class ElasticStackBaseNodeDriver(NodeDriver):
         return response.status == 204
 
     def ex_destroy_drive(self, drive_uuid):
-        # Deletes a drive
+        """
+        Deletes a drive
+
+        @param      drive_uuid: Drive uuid which should be used
+        @type       drive_uuid: C{str}
+
+        @rtype: C{bool}
+        """
         response = self.connection.request(
             action='/drives/%s/destroy' % (drive_uuid),
             method='POST'
diff --git libcloud/compute/drivers/gandi.py libcloud/compute/drivers/gandi.py
index ac6dde6..d6e49c3 100644
--- libcloud/compute/drivers/gandi.py
+++ libcloud/compute/drivers/gandi.py
@@ -18,7 +18,7 @@ Gandi driver for compute
 import sys
 from datetime import datetime
 
-from libcloud.common.gandi import BaseGandiDriver, GandiException, \
+from libcloud.common.gandi import BaseGandiDriver, GandiException,\
     NetworkInterface, IPAddress, Disk
 from libcloud.compute.types import NodeState, Provider
 from libcloud.compute.base import Node, NodeDriver
@@ -119,58 +119,66 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
         return False
 
     def deploy_node(self, **kwargs):
+        """
+        deploy_node is not implemented for gandi driver
+
+        @rtype: C{bool}
+        """
         raise NotImplementedError(
             'deploy_node not implemented for gandi driver')
 
     def create_node(self, **kwargs):
-        """Create a new Gandi node
+        """
+        Create a new Gandi node
 
         @keyword    name:   String with a name for this new node (required)
-        @type       name:   str
+        @type       name:   C{str}
 
         @keyword    image:  OS Image to boot on node. (required)
         @type       image:  L{NodeImage}
 
         @keyword    location: Which data center to create a node in. If empty,
-                              undefined behavoir will be selected. (optional)
+                              undefined behavior will be selected. (optional)
         @type       location: L{NodeLocation}
 
         @keyword    size:   The size of resources allocated to this node.
                             (required)
         @type       size:   L{NodeSize}
 
-        @keyword    login:  user name to create for login on machine (required)
-        @type       login: String
+        @keyword    login: user name to create for login on machine (required)
+        @type       login: C{str}
 
         @keyword    password: password for user that'll be created (required)
-        @type       password: String
+        @type       password: C{str}
+
+        @keyword    inet_family: version of ip to use, default 4 (optional)
+        @type       inet_family: C{int}
 
-        @keywork    inet_family: version of ip to use, default 4 (optional)
-        @type       inet_family: int
+        @rtype: L{Node}
         """
 
         if kwargs.get('login') is None or kwargs.get('password') is None:
-            raise GandiException(1020,
-                'login and password must be defined for node creation')
+            raise GandiException(
+                1020, 'login and password must be defined for node creation')
 
         location = kwargs.get('location')
         if location and isinstance(location, NodeLocation):
             dc_id = int(location.id)
         else:
-            raise GandiException(1021,
-                'location must be a subclass of NodeLocation')
+            raise GandiException(
+                1021, 'location must be a subclass of NodeLocation')
 
         size = kwargs.get('size')
         if not size and not isinstance(size, NodeSize):
-            raise GandiException(1022,
-                'size must be a subclass of NodeSize')
+            raise GandiException(
+                1022, 'size must be a subclass of NodeSize')
 
         src_disk_id = int(kwargs['image'].id)
 
         disk_spec = {
             'datacenter_id': dc_id,
             'name': 'disk_%s' % kwargs['name']
-            }
+        }
 
         vm_spec = {
             'datacenter_id': dc_id,
@@ -181,7 +189,7 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
             'cores': int(size.id),
             'bandwidth': int(size.bandwidth),
             'ip_version': kwargs.get('inet_family', 4),
-            }
+        }
 
         # Call create_from helper api. Return 3 operations : disk_create,
         # iface_create,vm_create
@@ -289,7 +297,7 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
                 self.connection.driver,
                 version=ip.get('version'),
                 extra={'reverse': ip['reverse']}
-                )
+            )
             ips.append(new_ip)
         return NetworkInterface(
             iface['id'],
@@ -308,11 +316,16 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
         return [self._to_iface(i) for i in ifaces]
 
     def ex_list_interfaces(self):
-        """Specific method to list network interfaces"""
+        """
+        Specific method to list network interfaces
+
+        @rtype: C{list} of L{GandiNetworkInterface}
+        """
         ifaces = self.connection.request('iface.list')
         ips = self.connection.request('ip.list')
         for iface in ifaces:
-            iface['ips'] = list(filter(lambda i: i['iface_id'] == iface['id'], ips))
+            iface['ips'] = list(
+                filter(lambda i: i['iface_id'] == iface['id'], ips))
         return self._to_ifaces(ifaces)
 
     def _to_disk(self, element):
@@ -333,56 +346,109 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
         return [self._to_disk(el) for el in elements]
 
     def ex_list_disks(self):
-        """Specific method to list all disk"""
+        """
+        Specific method to list all disk
+
+        @rtype: C{list} of L{GandiDisk}
+        """
         res = self.connection.request('disk.list', {})
         return self._to_disks(res)
 
     def ex_node_attach_disk(self, node, disk):
-        """Specific method to attach a disk to a node"""
+        """
+        Specific method to attach a disk to a node
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @param      disk: Disk which should be used
+        @type       disk: L{GandiDisk}
+
+        @rtype: C{bool}
+        """
         op = self.connection.request('vm.disk_attach',
-            int(node.id), int(disk.id))
+                                     int(node.id), int(disk.id))
         if self._wait_operation(op['id']):
             return True
         return False
 
     def ex_node_detach_disk(self, node, disk):
-        """Specific method to detach a disk from a node"""
+        """
+        Specific method to detach a disk from a node
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @param      disk: Disk which should be used
+        @type       disk: L{GandiDisk}
+
+        @rtype: C{bool}
+        """
         op = self.connection.request('vm.disk_detach',
-            int(node.id), int(disk.id))
+                                     int(node.id), int(disk.id))
         if self._wait_operation(op['id']):
             return True
         return False
 
     def ex_node_attach_interface(self, node, iface):
-        """Specific method to attach an interface to a node"""
+        """
+        Specific method to attach an interface to a node
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+
+        @param      iface: Network interface which should be used
+        @type       iface: L{GandiNetworkInterface}
+
+        @rtype: C{bool}
+        """
         op = self.connection.request('vm.iface_attach',
-            int(node.id), int(iface.id))
+                                     int(node.id), int(iface.id))
         if self._wait_operation(op['id']):
             return True
         return False
 
     def ex_node_detach_interface(self, node, iface):
-        """Specific method to detach an interface from a node"""
+        """
+        Specific method to detach an interface from a node
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+
+        @param      iface: Network interface which should be used
+        @type       iface: L{GandiNetworkInterface}
+
+        @rtype: C{bool}
+        """
         op = self.connection.request('vm.iface_detach',
-            int(node.id), int(iface.id))
+                                     int(node.id), int(iface.id))
         if self._wait_operation(op['id']):
             return True
         return False
 
     def ex_snapshot_disk(self, disk, name=None):
-        """Specific method to make a snapshot of a disk"""
+        """
+        Specific method to make a snapshot of a disk
+
+        @param      disk: Disk which should be used
+        @type       disk: L{GandiDisk}
+
+        @param      name: Name which should be used
+        @type       name: C{str}
+
+        @rtype: C{bool}
+        """
         if not disk.extra.get('can_snapshot'):
             raise GandiException(1021, "Disk %s can't snapshot" % disk.id)
         if not name:
             suffix = datetime.today().strftime("%Y%m%d")
             name = "snap_%s" % (suffix)
         op = self.connection.request('disk.create_from',
-            {
-                'name': name,
-                'type': 'snapshot',
-            },
-            int(disk.id),
-            )
+                                     {'name': name, 'type': 'snapshot', },
+                                     int(disk.id),
+                                     )
         if self._wait_operation(op['id']):
             return True
         return False
@@ -390,6 +456,17 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
     def ex_update_disk(self, disk, new_size=None, new_name=None):
         """Specific method to update size or name of a disk
         WARNING: if a server is attached it'll be rebooted
+
+        @param      disk: Disk which should be used
+        @type       disk: L{GandiDisk}
+
+        @param      new_size: New size
+        @type       new_size: C{int}
+
+        @param      new_name: New name
+        @type       new_name: C{str}
+
+        @rtype: C{bool}
         """
         params = {}
         if new_size:
@@ -397,8 +474,8 @@ class GandiNodeDriver(BaseGandiDriver, NodeDriver):
         if new_name:
             params.update({'name': new_name})
         op = self.connection.request('disk.update',
-            int(disk.id),
-            params)
+                                     int(disk.id),
+                                     params)
         if self._wait_operation(op['id']):
             return True
         return False
diff --git libcloud/compute/drivers/gogrid.py libcloud/compute/drivers/gogrid.py
index ec00076..3a28c4e 100644
--- libcloud/compute/drivers/gogrid.py
+++ libcloud/compute/drivers/gogrid.py
@@ -39,41 +39,41 @@ STATE = {
 }
 
 GOGRID_INSTANCE_TYPES = {
-        '512MB': {'id': '512MB',
-                       'name': '512MB',
-                       'ram': 512,
-                       'disk': 30,
-                       'bandwidth': None},
-        '1GB': {'id': '1GB',
-                       'name': '1GB',
-                       'ram': 1024,
-                       'disk': 60,
-                       'bandwidth': None},
-        '2GB': {'id': '2GB',
-                       'name': '2GB',
-                       'ram': 2048,
-                       'disk': 120,
-                       'bandwidth': None},
-        '4GB': {'id': '4GB',
-                       'name': '4GB',
-                       'ram': 4096,
-                       'disk': 240,
-                       'bandwidth': None},
-        '8GB': {'id': '8GB',
-                       'name': '8GB',
-                       'ram': 8192,
-                       'disk': 480,
-                       'bandwidth': None},
-        '16GB': {'id': '16GB',
-                       'name': '16GB',
-                       'ram': 16384,
-                       'disk': 960,
-                       'bandwidth': None},
-        '24GB': {'id': '24GB',
-                       'name': '24GB',
-                       'ram': 24576,
-                       'disk': 960,
-                       'bandwidth': None},
+    '512MB': {'id': '512MB',
+              'name': '512MB',
+              'ram': 512,
+              'disk': 30,
+              'bandwidth': None},
+    '1GB': {'id': '1GB',
+            'name': '1GB',
+            'ram': 1024,
+            'disk': 60,
+            'bandwidth': None},
+    '2GB': {'id': '2GB',
+            'name': '2GB',
+            'ram': 2048,
+            'disk': 120,
+            'bandwidth': None},
+    '4GB': {'id': '4GB',
+            'name': '4GB',
+            'ram': 4096,
+            'disk': 240,
+            'bandwidth': None},
+    '8GB': {'id': '8GB',
+            'name': '8GB',
+            'ram': 8192,
+            'disk': 480,
+            'bandwidth': None},
+    '16GB': {'id': '16GB',
+             'name': '16GB',
+             'ram': 16384,
+             'disk': 960,
+             'bandwidth': None},
+    '24GB': {'id': '24GB',
+             'name': '24GB',
+             'ram': 24576,
+             'disk': 960,
+             'bandwidth': None},
 }
 
 
@@ -121,13 +121,13 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
         ip = self._get_ip(element)
         id = self._get_id(element)
         n = GoGridNode(id=id,
-                 name=element['name'],
-                 state=state,
-                 public_ips=[ip],
-                 private_ips=[],
-                 extra={'ram': element.get('ram').get('name'),
-                     'description': element.get('description', '')},
-                 driver=self.connection.driver)
+                       name=element['name'],
+                       state=state,
+                       public_ips=[ip],
+                       private_ips=[],
+                       extra={'ram': element.get('ram').get('name'),
+                              'description': element.get('description', '')},
+                       driver=self.connection.driver)
         if password:
             n.extra['password'] = password
 
@@ -141,13 +141,13 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
 
     def _to_images(self, object):
         return [self._to_image(el)
-                 for el in object['list']]
+                for el in object['list']]
 
     def _to_location(self, element):
         location = NodeLocation(id=element['id'],
-                name=element['name'],
-                country="US",
-                driver=self.connection.driver)
+                                name=element['name'],
+                                country="US",
+                                driver=self.connection.driver)
         return location
 
     def _to_locations(self, object):
@@ -159,7 +159,7 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
         if location is not None:
             params["datacenter"] = location.id
         images = self._to_images(
-                self.connection.request('/api/grid/image/list', params).object)
+            self.connection.request('/api/grid/image/list', params).object)
         return images
 
     def list_nodes(self):
@@ -169,15 +169,17 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
         try:
             for password in self._password_list()['list']:
                 try:
-                    passwords_map[password['server']['id']] = password['password']
+                    passwords_map[password['server']['id']] = \
+                        password['password']
                 except KeyError:
                     pass
         except InvalidCredsError:
-            # some gogrid API keys don't have permission to access the password list.
+            # some gogrid API keys don't have permission to access the
+            # password list.
             pass
 
         return [self._to_node(el, passwords_map.get(el.get('id')))
-                 for el in res['list']]
+                for el in res['list']]
 
     def reboot_node(self, node):
         id = node.id
@@ -204,12 +206,12 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
         # power in ['start', 'stop', 'restart']
         params = {'id': id, 'power': power}
         return self.connection.request("/api/grid/server/power", params,
-                                         method='POST')
+                                       method='POST')
 
     def _server_delete(self, id):
         params = {'id': id}
         return self.connection.request("/api/grid/server/delete", params,
-                                        method='POST')
+                                       method='POST')
 
     def _get_first_ip(self, location=None):
         ips = self.ex_list_ips(public=True, assigned=False, location=location)
@@ -217,7 +219,7 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
             return ips[0].ip
         except IndexError:
             raise LibcloudError('No public unassigned IPs left',
-                    GoGridNodeDriver)
+                                GoGridNodeDriver)
 
     def list_sizes(self, location=None):
         sizes = []
@@ -231,7 +233,7 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
     def list_locations(self):
         locations = self._to_locations(
             self.connection.request('/api/common/lookup/list',
-                params={'lookup': 'ip.datacenter'}).object)
+                                    params={'lookup': 'ip.datacenter'}).object)
         return locations
 
     def ex_create_node_nowait(self, **kwargs):
@@ -240,7 +242,28 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
 
         The existance of this method is explained by the fact
         that GoGrid assigns id to a node only few minutes after
-        creation."""
+        creation.
+
+
+        @keyword    name:   String with a name for this new node (required)
+        @type       name:   C{str}
+
+        @keyword    size:   The size of resources allocated to this node .
+                            (required)
+        @type       size:   L{NodeSize}
+
+        @keyword    image:  OS Image to boot on node. (required)
+        @type       image:  L{NodeImage}
+
+        @keyword    ex_description: Description of a Node
+        @type       ex_description: C{str}
+
+        @keyword    ex_ip: Public IP address to use for a Node. If not
+            specified, first available IP address will be picked
+        @type       ex_ip: C{str}
+
+        @rtype: L{Node}
+        """
         name = kwargs['name']
         image = kwargs['image']
         size = kwargs['size']
@@ -264,13 +287,14 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
     def create_node(self, **kwargs):
         """Create a new GoGird node
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
 
         @keyword    ex_description: Description of a Node
-        @type       ex_description: C{string}
+        @type       ex_description: C{str}
+
         @keyword    ex_ip: Public IP address to use for a Node. If not
                     specified, first available IP address will be picked
-        @type       ex_ip: C{string}
+        @type       ex_ip: C{str}
         """
         node = self.ex_create_node_nowait(**kwargs)
 
@@ -289,7 +313,9 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
             time.sleep(interval)
 
         if id is None:
-            raise Exception("Wasn't able to wait for id allocation for the node %s" % str(node))
+            raise Exception(
+                "Wasn't able to wait for id allocation for the node %s"
+                % str(node))
 
         return node
 
@@ -303,8 +329,11 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
 
         @keyword    node: node to use as a base for image
         @type       node: L{Node}
+
         @keyword    name: name for new image
-        @type       name: C{string}
+        @type       name: C{str}
+
+        @rtype: L{NodeImage}
         """
         params = {'server': node.id,
                   'friendlyName': name}
@@ -318,22 +347,26 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
 
         @keyword    node: node to be edited
         @type       node: L{Node}
+
         @keyword    size: new size of a node
         @type       size: L{NodeSize}
+
         @keyword    ex_description: new description of a node
-        @type       ex_description: C{string}
+        @type       ex_description: C{str}
+
+        @rtype: L{Node}
         """
         node = kwargs['node']
         size = kwargs['size']
 
         params = {'id': node.id,
-                'server.ram': size.id}
+                  'server.ram': size.id}
 
         if 'ex_description' in kwargs:
             params['description'] = kwargs['ex_description']
 
         object = self.connection.request('/api/grid/server/edit',
-                params=params).object
+                                         params=params).object
 
         return self._to_node(object['list'][0])
 
@@ -342,20 +375,24 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
 
         @keyword    image: image to be edited
         @type       image: L{NodeImage}
+
         @keyword    public: should be the image public?
         @type       public: C{bool}
+
         @keyword    ex_description: description of the image (optional)
-        @type       ex_description: C{string}
+        @type       ex_description: C{str}
+
         @keyword    name: name of the image
-        @type       name C{string}
+        @type       name C{str}
 
+        @rtype: L{NodeImage}
         """
 
         image = kwargs['image']
         public = kwargs['public']
 
         params = {'id': image.id,
-                'isPublic': str(public).lower()}
+                  'isPublic': str(public).lower()}
 
         if 'ex_description' in kwargs:
             params['description'] = kwargs['ex_description']
@@ -364,7 +401,7 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
             params['friendlyName'] = kwargs['name']
 
         object = self.connection.request('/api/grid/image/edit',
-                params=params).object
+                                         params=params).object
 
         return self._to_image(object['list'][0])
 
@@ -377,28 +414,31 @@ class GoGridNodeDriver(BaseGoGridDriver, NodeDriver):
                     private IPs. Set to None or not specify
                     at all not to filter by type
         @type       public: C{bool}
+
         @keyword    assigned: set to True to list only addresses
                     assigned to servers, False to list unassigned
                     addresses and set to None or don't set at all
                     not no filter by state
         @type       assigned: C{bool}
+
         @keyword    location: filter IP addresses by location
         @type       location: L{NodeLocation}
-        @return:    C{list} of L{GoGridIpAddress}es
+
+        @rtype: C{list} of L{GoGridIpAddress}
         """
 
         params = {}
 
         if "public" in kwargs and kwargs["public"] is not None:
             params["ip.type"] = {True: "Public",
-                    False: "Private"}[kwargs["public"]]
+                                 False: "Private"}[kwargs["public"]]
         if "assigned" in kwargs and kwargs["assigned"] is not None:
             params["ip.state"] = {True: "Assigned",
-                    False: "Unassigned"}[kwargs["assigned"]]
+                                  False: "Unassigned"}[kwargs["assigned"]]
         if "location" in kwargs and kwargs['location'] is not None:
             params['datacenter'] = kwargs['location'].id
 
         ips = self._to_ips(
-                self.connection.request('/api/grid/ip/list',
-                    params=params).object)
+            self.connection.request('/api/grid/ip/list',
+                                    params=params).object)
         return ips
diff --git libcloud/compute/drivers/ibm_sce.py libcloud/compute/drivers/ibm_sce.py
index 71aa3be..eb4f156 100644
--- libcloud/compute/drivers/ibm_sce.py
+++ libcloud/compute/drivers/ibm_sce.py
@@ -29,7 +29,8 @@ from libcloud.utils.py3 import b
 from libcloud.common.base import XmlResponse, ConnectionUserAndKey
 from libcloud.common.types import InvalidCredsError
 from libcloud.compute.types import NodeState, Provider
-from libcloud.compute.base import NodeDriver, Node, NodeImage, NodeSize, NodeLocation, NodeAuthSSHKey
+from libcloud.compute.base import NodeDriver, Node, NodeImage, \
+    NodeSize, NodeLocation, NodeAuthSSHKey
 
 HOST = 'www-147.ibm.com'
 REST_BASE = '/computecloud/enterprise/api/rest/20100331'
@@ -58,8 +59,8 @@ class IBMConnection(ConnectionUserAndKey):
 
     def add_default_headers(self, headers):
         headers['Accept'] = 'text/xml'
-        headers['Authorization'] = ('Basic %s' % (base64.b64encode(b('%s:%s' %
-                                                 (self.user_id, self.key))).decode('utf-8')))
+        headers['Authorization'] = ('Basic %s' % (base64.b64encode(
+            b('%s:%s' % (self.user_id, self.key))).decode('utf-8')))
         if not 'Content-Type' in headers:
             headers['Content-Type'] = 'text/xml'
         return headers
@@ -77,46 +78,43 @@ class IBMNodeDriver(NodeDriver):
     name = "IBM SmartCloud Enterprise"
     website = 'http://ibm.com/services/us/en/cloud-enterprise/'
 
-    NODE_STATE_MAP = {0: NodeState.PENDING,      # New
-                      1: NodeState.PENDING,      # Provisioning
-                      2: NodeState.TERMINATED,   # Failed
-                      3: NodeState.TERMINATED,   # Removed
-                      4: NodeState.TERMINATED,   # Rejected
-                      5: NodeState.RUNNING,      # Active
-                      6: NodeState.UNKNOWN,      # Unknown
-                      7: NodeState.PENDING,      # Deprovisioning
-                      8: NodeState.REBOOTING,    # Restarting
-                      9: NodeState.PENDING,      # Starting
-                      10: NodeState.PENDING,     # Stopping
-                      11: NodeState.TERMINATED,  # Stopped
-                      12: NodeState.PENDING,     # Deprovision Pending
-                      13: NodeState.PENDING,     # Restart Pending
-                      14: NodeState.PENDING,     # Attaching
-                      15: NodeState.PENDING }    # Detaching
+    NODE_STATE_MAP = {
+        0: NodeState.PENDING,      # New
+        1: NodeState.PENDING,      # Provisioning
+        2: NodeState.TERMINATED,   # Failed
+        3: NodeState.TERMINATED,   # Removed
+        4: NodeState.TERMINATED,   # Rejected
+        5: NodeState.RUNNING,      # Active
+        6: NodeState.UNKNOWN,      # Unknown
+        7: NodeState.PENDING,      # Deprovisioning
+        8: NodeState.REBOOTING,    # Restarting
+        9: NodeState.PENDING,      # Starting
+        10: NodeState.PENDING,     # Stopping
+        11: NodeState.TERMINATED,  # Stopped
+        12: NodeState.PENDING,     # Deprovision Pending
+        13: NodeState.PENDING,     # Restart Pending
+        14: NodeState.PENDING,     # Attaching
+        15: NodeState.PENDING,      # Detaching
+    }
 
     def create_node(self, **kwargs):
         """
         Creates a node in the IBM Developer Cloud.
 
-        See L{NodeDriver.create_node} for more keyword args.
-
-        @keyword    auth Name of the pubkey to use. When constructing
-                         C{NodeAuthSSHKey} instance, 'pubkey' argument must be
-                         the name of the public key to use.
-                         You chose this name when creating a new public key on
-                         the IBM server.
-        @type       auth C{NodeAuthSSHKey}
-
-        @keyword    ex_configurationData: Image-specific configuration parameters.
-                                       Configuration parameters are defined in
-                                       the parameters.xml file.  The URL to
-                                       this file is defined in the NodeImage
-                                       at extra[parametersURL].
-
-                                       Note: This argument must be specified
-                                       when launching a Windows instance. It
-                                       must contain 'UserName' and 'Password'
-                                       keys.
+        @inherits: L{NodeDriver.create_node}
+
+        @keyword    auth: Name of the pubkey to use. When constructing
+            C{NodeAuthSSHKey} instance, 'pubkey' argument must be the name of
+            the public key to use. You chose this name when creating
+            a new public key on the IBM server.
+        @type       auth: L{NodeAuthSSHKey}
+
+        @keyword    ex_configurationData: Image-specific configuration
+            parameters. Configuration parameters are defined in the parameters
+            .xml file.  The URL to this file is defined in the NodeImage at
+            extra[parametersURL].
+            Note: This argument must be specified when launching a Windows
+            instance. It must contain 'UserName' and 'Password' keys.
         @type       ex_configurationData: C{dict}
         """
 
@@ -137,10 +135,11 @@ class IBMNodeDriver(NodeDriver):
                 data.update({key: configurationData.get(key)})
 
         # Send request!
-        resp = self.connection.request(action=REST_BASE + '/instances',
-                                       headers={'Content-Type': 'application/x-www-form-urlencoded'},
-                                       method='POST',
-                                       data=data).object
+        resp = self.connection.request(
+            action=REST_BASE + '/instances',
+            headers={'Content-Type': 'application/x-www-form-urlencoded'},
+            method='POST',
+            data=data).object
         return self._to_nodes(resp)[0]
 
     def destroy_node(self, node):
@@ -154,38 +153,54 @@ class IBMNodeDriver(NodeDriver):
         headers = {'Content-Type': 'application/x-www-form-urlencoded'}
         data = {'state': 'restart'}
 
-        resp = self.connection.request(action = url,
-                                       method = 'PUT',
-                                       headers = headers,
-                                       data = data)
+        resp = self.connection.request(action=url,
+                                       method='PUT',
+                                       headers=headers,
+                                       data=data)
         return int(resp.status) == 200
 
     def list_nodes(self):
-        return self._to_nodes(self.connection.request(REST_BASE + '/instances').object)
+        return self._to_nodes(
+            self.connection.request(REST_BASE + '/instances').object)
 
-    def list_images(self, location = None):
-        return self._to_images(self.connection.request(REST_BASE + '/offerings/image').object)
+    def list_images(self, location=None):
+        return self._to_images(
+            self.connection.request(REST_BASE + '/offerings/image').object)
 
-    def list_sizes(self, location = None):
+    def list_sizes(self, location=None):
         """
-        Returns a generic list of sizes.  See list_images() for a list of supported sizes for specific
-        images.
+        Returns a generic list of sizes.  See list_images() for a
+        list of supported sizes for specific images.
+
+        @inherits: L{NodeDriver.list_sizes}
         """
-        return [NodeSize('BRZ32.1/2048/60*175', 'Bronze 32 bit', None, None, None, None, self.connection.driver),
-                NodeSize('BRZ64.2/4096/60*500*350', 'Bronze 64 bit', None, None, None, None, self.connection.driver),
-                NodeSize('COP32.1/2048/60', 'Copper 32 bit', None, None, None, None, self.connection.driver),
-                NodeSize('COP64.2/4096/60', 'Copper 64 bit', None, None, None, None, self.connection.driver),
-                NodeSize('SLV32.2/4096/60*350', 'Silver 32 bit', None, None, None, None, self.connection.driver),
-                NodeSize('SLV64.4/8192/60*500*500', 'Silver 64 bit', None, None, None, None, self.connection.driver),
-                NodeSize('GLD32.4/4096/60*350', 'Gold 32 bit', None, None, None, None, self.connection.driver),
-                NodeSize('GLD64.8/16384/60*500*500', 'Gold 64 bit', None, None, None, None, self.connection.driver),
-                NodeSize('PLT64.16/16384/60*500*500*500*500', 'Platinum 64 bit', None, None, None, None, self.connection.driver)]
+        return [
+            NodeSize('BRZ32.1/2048/60*175', 'Bronze 32 bit', None, None, None,
+                     None, self.connection.driver),
+            NodeSize('BRZ64.2/4096/60*500*350', 'Bronze 64 bit', None, None,
+                     None, None, self.connection.driver),
+            NodeSize('COP32.1/2048/60', 'Copper 32 bit', None, None, None,
+                     None, self.connection.driver),
+            NodeSize('COP64.2/4096/60', 'Copper 64 bit', None, None, None,
+                     None, self.connection.driver),
+            NodeSize('SLV32.2/4096/60*350', 'Silver 32 bit', None, None, None,
+                     None, self.connection.driver),
+            NodeSize('SLV64.4/8192/60*500*500', 'Silver 64 bit', None, None,
+                     None, None, self.connection.driver),
+            NodeSize('GLD32.4/4096/60*350', 'Gold 32 bit', None, None, None,
+                     None, self.connection.driver),
+            NodeSize('GLD64.8/16384/60*500*500', 'Gold 64 bit', None, None,
+                     None, None, self.connection.driver),
+            NodeSize('PLT64.16/16384/60*500*500*500*500', 'Platinum 64 bit',
+                     None, None, None, None, self.connection.driver)]
 
     def list_locations(self):
-        return self._to_locations(self.connection.request(REST_BASE + '/locations').object)
+        return self._to_locations(
+            self.connection.request(REST_BASE + '/locations').object)
 
     def _to_nodes(self, object):
-        return [ self._to_node(instance) for instance in object.findall('Instance') ]
+        return [self._to_node(instance) for instance in
+                object.findall('Instance')]
 
     def _to_node(self, instance):
         public_ips = []
@@ -194,48 +209,52 @@ class IBMNodeDriver(NodeDriver):
         if ip:
             public_ips.append(ip)
 
-        return Node(id=instance.findtext('ID'),
-                    name=instance.findtext('Name'),
-                    state=self.NODE_STATE_MAP[int(instance.findtext('Status'))],
-                    public_ips=public_ips,
-                    private_ips=[],
-                    driver=self.connection.driver)
+        return Node(
+            id=instance.findtext('ID'),
+            name=instance.findtext('Name'),
+            state=self.NODE_STATE_MAP[int(instance.findtext('Status'))],
+            public_ips=public_ips,
+            private_ips=[],
+            driver=self.connection.driver
+        )
 
     def _to_images(self, object):
-        # Converts data retrieved from SCE /offerings/image REST call to a NodeImage
+    #Converts data retrieved from SCE /offerings/image REST call to a NodeImage
         return [self._to_image(image) for image in object.findall('Image')]
 
     def _to_image(self, image):
         # Converts an SCE Image object to a NodeImage
-        imageID=image.findtext('ID')
-        imageName=image.findtext('Name')
-        parametersURL=image.findtext('Manifest')
-        location=image.findtext('Location')
-        state=image.findtext('State')
-        owner=image.findtext('Owner')
-        visibility=image.findtext('Visibility')
-        platform=image.findtext('Platform')
-        description=image.findtext('Description')
-        documentation=image.findtext('Documentation')
-        instanceTypes=image.findall('SupportedInstanceTypes')
-        nodeSizes=self._to_node_sizes(image.find('SupportedInstanceTypes'))
+        imageID = image.findtext('ID')
+        imageName = image.findtext('Name')
+        parametersURL = image.findtext('Manifest')
+        location = image.findtext('Location')
+        state = image.findtext('State')
+        owner = image.findtext('Owner')
+        visibility = image.findtext('Visibility')
+        platform = image.findtext('Platform')
+        description = image.findtext('Description')
+        documentation = image.findtext('Documentation')
+        instanceTypes = image.findall('SupportedInstanceTypes')
+        nodeSizes = self._to_node_sizes(image.find('SupportedInstanceTypes'))
         return NodeImage(id=imageID,
                          name=imageName,
                          driver=self.connection.driver,
-                         extra={'parametersURL': parametersURL,
-                                'location' : location,
-                                'state' : state,
-                                'owner' : owner,
-                                'visibility' : visibility,
-                                'platform' : platform,
-                                'description' : description,
-                                'documentation' : documentation,
-                                'supportedInstanceTypes' : nodeSizes
-                                }
+                         extra={
+                             'parametersURL': parametersURL,
+                             'location': location,
+                             'state': state,
+                             'owner': owner,
+                             'visibility': visibility,
+                             'platform': platform,
+                             'description': description,
+                             'documentation': documentation,
+                             'supportedInstanceTypes': nodeSizes
+                         }
                          )
 
     def _to_locations(self, object):
-        return [self._to_location(location) for location in object.findall('Location')]
+        return [self._to_location(location) for location in
+                object.findall('Location')]
 
     def _to_location(self, location):
         # Converts an SCE Location object to a Libcloud NodeLocation object
@@ -247,13 +266,15 @@ class IBMNodeDriver(NodeDriver):
                             driver=self.connection.driver)
 
     def _to_node_sizes(self, object):
-        # Converts SCE SupportedInstanceTypes object to a list of Libcloud NodeSize objects
-        return [self._to_node_size(iType) for iType in object.findall('InstanceType')]
+        # Converts SCE SupportedInstanceTypes object to
+        # a list of Libcloud NodeSize objects
+        return [self._to_node_size(iType) for iType in
+                object.findall('InstanceType')]
 
     def _to_node_size(self, object):
         # Converts to an SCE InstanceType to a Libcloud NodeSize
-        return NodeSize(object.findtext('ID'), 
-                        object.findtext('Label'), 
+        return NodeSize(object.findtext('ID'),
+                        object.findtext('Label'),
                         None,
                         None,
                         None,
diff --git libcloud/compute/drivers/joyent.py libcloud/compute/drivers/joyent.py
index 4dc7d5a..a0928d5 100644
--- libcloud/compute/drivers/joyent.py
+++ libcloud/compute/drivers/joyent.py
@@ -56,7 +56,7 @@ class JoyentResponse(JsonResponse):
     """
 
     valid_response_codes = [httplib.OK, httplib.ACCEPTED, httplib.CREATED,
-                             httplib.NO_CONTENT]
+                            httplib.NO_CONTENT]
 
     def parse_error(self):
         if self.status == 401:
@@ -104,7 +104,7 @@ class JoyentNodeDriver(NodeDriver):
             if kwargs['location'] not in LOCATIONS:
                 msg = 'Invalid location: "%s". Valid locations: %s'
                 raise LibcloudError(msg % (kwargs['location'],
-                                ', '.join(LOCATIONS)), driver=self)
+                                    ', '.join(LOCATIONS)), driver=self)
         else:
             kwargs['location'] = DEFAULT_LOCATION
 
@@ -119,7 +119,7 @@ class JoyentNodeDriver(NodeDriver):
             extra = {'type': value['type'], 'urn': value['urn'],
                      'os': value['os'], 'default': value['default']}
             image = NodeImage(id=value['id'], name=value['name'],
-                    driver=self.connection.driver, extra=extra)
+                              driver=self.connection.driver, extra=extra)
             images.append(image)
 
         return images
@@ -170,6 +170,14 @@ class JoyentNodeDriver(NodeDriver):
         return self._to_node(result.object)
 
     def ex_stop_node(self, node):
+        """
+        Stop node
+
+        @param  node: The node to be stopped
+        @type   node: L{Node}
+
+        @rtype: C{bool}
+        """
         data = json.dumps({'action': 'stop'})
         result = self.connection.request('/my/machines/%s' % (node.id),
                                          data=data, method='POST')
diff --git libcloud/compute/drivers/ktucloud.py libcloud/compute/drivers/ktucloud.py
index b100060..cd39bf1 100644
--- libcloud/compute/drivers/ktucloud.py
+++ libcloud/compute/drivers/ktucloud.py
@@ -15,7 +15,7 @@
 
 from libcloud.compute.providers import Provider
 from libcloud.compute.base import Node, NodeDriver, NodeImage, NodeLocation, \
-                                  NodeSize
+    NodeSize
 from libcloud.compute.types import NodeState
 from libcloud.compute.drivers.cloudstack import CloudStackNodeDriver
 
@@ -38,14 +38,18 @@ class KTUCloudNodeDriver(CloudStackNodeDriver):
         images = []
 
         for img in imgs['producttypes']:
-            images.append(NodeImage(img['serviceofferingid'],
-                img['serviceofferingdesc'], self, {
-                'hypervisor': '',
-                'format': '',
-                'os': img['templatedesc'],
-                'templateid': img['templateid'],
-                'zoneid': img['zoneid']
-            }))
+            images.append(
+                NodeImage(
+                    img['serviceofferingid'],
+                    img['serviceofferingdesc'],
+                    self,
+                    {'hypervisor': '',
+                     'format': '',
+                     'os': img['templatedesc'],
+                     'templateid': img['templateid'],
+                     'zoneid': img['zoneid']}
+                )
+            )
 
         return images
 
@@ -53,8 +57,11 @@ class KTUCloudNodeDriver(CloudStackNodeDriver):
         szs = self._sync_request('listAvailableProductTypes')
         sizes = []
         for sz in szs['producttypes']:
-            sizes.append(NodeSize(sz['diskofferingid'],
-            sz['diskofferingdesc'], 0, 0, 0, 0, self))
+            sizes.append(NodeSize(
+                sz['diskofferingid'],
+                sz['diskofferingdesc'],
+                0, 0, 0, 0, self)
+            )
         return sizes
 
     def create_node(self, name, size, image, location=None, **kwargs):
@@ -65,7 +72,8 @@ class KTUCloudNodeDriver(CloudStackNodeDriver):
         else:
             extra_args['usageplantype'] = usageplantype
 
-        result = self._async_request('deployVirtualMachine',
+        result = self._async_request(
+            'deployVirtualMachine',
             displayname=name,
             serviceofferingid=image.id,
             diskofferingid=size.id,
diff --git libcloud/compute/drivers/libvirt_driver.py libcloud/compute/drivers/libvirt_driver.py
index 6da6b80..4167937 100644
--- libcloud/compute/drivers/libvirt_driver.py
+++ libcloud/compute/drivers/libvirt_driver.py
@@ -94,6 +94,11 @@ class LibvirtNodeDriver(NodeDriver):
     def ex_start(self, node):
         """
         Start a stopped node.
+
+        @param  node: Node which should be used
+        @type   node: L{Node}
+
+        @rtype: C{bool}
         """
         domain = self._get_domain_for_node(node=node)
         return domain.create() == 0
@@ -101,6 +106,11 @@ class LibvirtNodeDriver(NodeDriver):
     def ex_shutdown(self, node):
         """
         Shutdown a running node.
+
+        @param  node: Node which should be used
+        @type   node: L{Node}
+
+        @rtype: C{bool}
         """
         domain = self._get_domain_for_node(node=node)
         return domain.shutdown() == 0
@@ -108,6 +118,11 @@ class LibvirtNodeDriver(NodeDriver):
     def ex_suspend(self, node):
         """
         Suspend a running node.
+
+        @param  node: Node which should be used
+        @type   node: L{Node}
+
+        @rtype: C{bool}
         """
         domain = self._get_domain_for_node(node=node)
         return domain.suspend() == 0
@@ -115,6 +130,11 @@ class LibvirtNodeDriver(NodeDriver):
     def ex_resume(self, node):
         """
         Resume a suspended node.
+
+        @param  node: Node which should be used
+        @type   node: L{Node}
+
+        @rtype: C{bool}
         """
         domain = self._get_domain_for_node(node=node)
         return domain.resume() == 0
diff --git libcloud/compute/drivers/linode.py libcloud/compute/drivers/linode.py
index 4a9b560..cf0ab03 100644
--- libcloud/compute/drivers/linode.py
+++ libcloud/compute/drivers/linode.py
@@ -15,9 +15,9 @@
 
 """libcloud driver for the Linode(R) API
 
-This driver implements all libcloud functionality for the Linode API.  Since the
-API is a bit more fine-grained, create_node abstracts a significant amount of
-work (and may take a while to run).
+This driver implements all libcloud functionality for the Linode API.
+Since the API is a bit more fine-grained, create_node abstracts a significant
+amount of work (and may take a while to run).
 
 Linode home page                    http://www.linode.com/
 Linode API documentation            http://www.linode.com/api/
@@ -41,8 +41,8 @@ from copy import copy
 
 from libcloud.utils.py3 import PY3
 
-from libcloud.common.linode import (API_ROOT, LinodeException, LinodeConnection,
-    LINODE_PLAN_IDS)
+from libcloud.common.linode import (API_ROOT, LinodeException,
+                                    LinodeConnection, LINODE_PLAN_IDS)
 from libcloud.compute.types import Provider, NodeState
 from libcloud.compute.base import NodeDriver, NodeSize, Node, NodeLocation
 from libcloud.compute.base import NodeAuthPassword, NodeAuthSSHKey
@@ -88,35 +88,43 @@ class LinodeNodeDriver(NodeDriver):
 
     # Converts Linode's state from DB to a NodeState constant.
     LINODE_STATES = {
-        -2: NodeState.UNKNOWN,              # Boot Failed
-        -1: NodeState.PENDING,              # Being Created
-         0: NodeState.PENDING,              # Brand New
-         1: NodeState.RUNNING,              # Running
-         2: NodeState.TERMINATED,           # Powered Off
-         3: NodeState.REBOOTING,            # Shutting Down
-         4: NodeState.UNKNOWN               # Reserved
+        -2: NodeState.UNKNOWN,    # Boot Failed
+        -1: NodeState.PENDING,    # Being Created
+        0: NodeState.PENDING,     # Brand New
+        1: NodeState.RUNNING,     # Running
+        2: NodeState.TERMINATED,  # Powered Off
+        3: NodeState.REBOOTING,   # Shutting Down
+        4: NodeState.UNKNOWN      # Reserved
     }
 
     def list_nodes(self):
-        """List all Linodes that the API key can access
+        """
+        List all Linodes that the API key can access
 
-        This call will return all Linodes that the API key in use has access to.
+        This call will return all Linodes that the API key in use has access
+         to.
         If a node is in this list, rebooting will work; however, creation and
         destruction are a separate grant.
 
-        @return: C{list} of L{Node} objects that the API key can access"""
+        @return: List of node objects that the API key can access
+        @rtype: C{list} of L{Node}
+        """
         params = {"api_action": "linode.list"}
         data = self.connection.request(API_ROOT, params=params).objects[0]
         return self._to_nodes(data)
 
     def reboot_node(self, node):
-        """Reboot the given Linode
+        """
+        Reboot the given Linode
 
         Will issue a shutdown job followed by a boot job, using the last booted
         configuration.  In most cases, this will be the only configuration.
 
-        @keyword node: the Linode to reboot
-        @type node: L{Node}"""
+        @param      node: the Linode to reboot
+        @type       node: L{Node}
+
+        @rtype: C{bool}
+        """
         params = {"api_action": "linode.reboot", "LinodeID": node.id}
         self.connection.request(API_ROOT, params=params)
         return True
@@ -132,10 +140,13 @@ class LinodeNodeDriver(NodeDriver):
         Linode can be removed; however, this call explicitly skips those
         safeguards. There is no going back from this method.
 
-        @keyword node: the Linode to destroy
-        @type node: L{Node}"""
+        @param       node: the Linode to destroy
+        @type        node: L{Node}
+
+        @rtype: C{bool}
+        """
         params = {"api_action": "linode.delete", "LinodeID": node.id,
-            "skipChecks": True}
+                  "skipChecks": True}
         self.connection.request(API_ROOT, params=params)
         return True
 
@@ -150,48 +161,49 @@ class LinodeNodeDriver(NodeDriver):
         prevent a runaway script from ruining your day.
 
         @keyword name: the name to assign the Linode (mandatory)
-        @type name: C{str}
+        @type    name: C{str}
 
         @keyword image: which distribution to deploy on the Linode (mandatory)
-        @type image: L{NodeImage}
+        @type    image: L{NodeImage}
 
         @keyword size: the plan size to create (mandatory)
-        @type size: L{NodeSize}
+        @type    size: L{NodeSize}
 
         @keyword auth: an SSH key or root password (mandatory)
-        @type auth: L{NodeAuthSSHKey} or L{NodeAuthPassword}
+        @type    auth: L{NodeAuthSSHKey} or L{NodeAuthPassword}
 
         @keyword location: which datacenter to create the Linode in
-        @type location: L{NodeLocation}
+        @type    location: L{NodeLocation}
 
         @keyword ex_swap: size of the swap partition in MB (128)
-        @type ex_swap: C{int}
+        @type    ex_swap: C{int}
 
         @keyword ex_rsize: size of the root partition in MB (plan size - swap).
-        @type ex_rsize: C{int}
+        @type    ex_rsize: C{int}
 
         @keyword ex_kernel: a kernel ID from avail.kernels (Latest 2.6 Stable).
-        @type ex_kernel: C{str}
+        @type    ex_kernel: C{str}
 
         @keyword ex_payment: one of 1, 12, or 24; subscription length (1)
-        @type ex_payment: C{int}
+        @type    ex_payment: C{int}
 
         @keyword ex_comment: a small comment for the configuration (libcloud)
-        @type ex_comment: C{str}
+        @type    ex_comment: C{str}
 
         @keyword ex_private: whether or not to request a private IP (False)
-        @type ex_private: C{bool}
+        @type    ex_private: C{bool}
 
         @keyword lconfig: what to call the configuration (generated)
-        @type lconfig: C{str}
+        @type    lconfig: C{str}
 
         @keyword lroot: what to call the root image (generated)
-        @type lroot: C{str}
+        @type    lroot: C{str}
 
         @keyword lswap: what to call the swap space (generated)
-        @type lswap: C{str}
+        @type    lswap: C{str}
 
-        @return: a L{Node} representing the newly-created Linode
+        @return: Node representing the newly-created Linode
+        @rtype: L{Node}
         """
         name = kwargs["name"]
         image = kwargs["image"]
@@ -216,7 +228,8 @@ class LinodeNodeDriver(NodeDriver):
             raise LinodeException(0xFB, "Invalid plan ID -- avail.plans")
 
         # Payment schedule
-        payment = "1" if "ex_payment" not in kwargs else str(kwargs["ex_payment"])
+        payment = "1" if "ex_payment" not in kwargs else \
+            str(kwargs["ex_payment"])
         if payment not in ["1", "12", "24"]:
             raise LinodeException(0xFB, "Invalid subscription (1, 12, 24)")
 
@@ -240,7 +253,7 @@ class LinodeNodeDriver(NodeDriver):
             raise LinodeException(0xFB, "Need an integer swap size")
 
         # Root partition size
-        imagesize = (size.disk - swap) if "ex_rsize" not in kwargs else \
+        imagesize = (size.disk - swap) if "ex_rsize" not in kwargs else\
             int(kwargs["ex_rsize"])
         if (imagesize + swap) > size.disk:
             raise LinodeException(0xFB, "Total disk images are too big")
@@ -259,13 +272,13 @@ class LinodeNodeDriver(NodeDriver):
                 kernel = 111 if image.extra['pvops'] else 107
             else:
                 kernel = 110 if image.extra['pvops'] else 60
-        params = { "api_action": "avail.kernels" }
+        params = {"api_action": "avail.kernels"}
         kernels = self.connection.request(API_ROOT, params=params).objects[0]
         if kernel not in [z["KERNELID"] for z in kernels]:
             raise LinodeException(0xFB, "Invalid kernel -- avail.kernels")
 
         # Comments
-        comments = "Created by Apache libcloud <http://www.libcloud.org>" if \
+        comments = "Created by Apache libcloud <http://www.libcloud.org>" if\
             "ex_comment" not in kwargs else kwargs["ex_comment"]
 
         # Labels
@@ -280,13 +293,13 @@ class LinodeNodeDriver(NodeDriver):
 
         # Step 1: linode.create
         params = {
-            "api_action":   "linode.create",
+            "api_action": "linode.create",
             "DatacenterID": chosen,
-            "PlanID":       size.id,
-            "PaymentTerm":  payment
+            "PlanID": size.id,
+            "PaymentTerm": payment
         }
         data = self.connection.request(API_ROOT, params=params).objects[0]
-        linode = { "id": data["LinodeID"] }
+        linode = {"id": data["LinodeID"]}
 
         # Step 1b. linode.update to rename the Linode
         params = {
@@ -299,8 +312,8 @@ class LinodeNodeDriver(NodeDriver):
         # Step 1c. linode.ip.addprivate if it was requested
         if "ex_private" in kwargs and kwargs["ex_private"]:
             params = {
-                "api_action":   "linode.ip.addprivate",
-                "LinodeID":     linode["id"]
+                "api_action": "linode.ip.addprivate",
+                "LinodeID": linode["id"]
             }
             self.connection.request(API_ROOT, params=params)
 
@@ -309,12 +322,12 @@ class LinodeNodeDriver(NodeDriver):
             root = binascii.b2a_base64(os.urandom(8)).decode('ascii')
 
         params = {
-            "api_action":       "linode.disk.createfromdistribution",
-            "LinodeID":         linode["id"],
-            "DistributionID":   image.id,
-            "Label":            label["lroot"],
-            "Size":             imagesize,
-            "rootPass":         root,
+            "api_action": "linode.disk.createfromdistribution",
+            "LinodeID": linode["id"],
+            "DistributionID": image.id,
+            "Label": label["lroot"],
+            "Size": imagesize,
+            "rootPass": root,
         }
         if ssh:
             params["rootSSHKey"] = ssh
@@ -323,11 +336,11 @@ class LinodeNodeDriver(NodeDriver):
 
         # Step 3: linode.disk.create for swap
         params = {
-            "api_action":       "linode.disk.create",
-            "LinodeID":         linode["id"],
-            "Label":            label["lswap"],
-            "Type":             "swap",
-            "Size":             swap
+            "api_action": "linode.disk.create",
+            "LinodeID": linode["id"],
+            "Label": label["lswap"],
+            "Type": "swap",
+            "Size": swap
         }
         data = self.connection.request(API_ROOT, params=params).objects[0]
         linode["swapimage"] = data["DiskID"]
@@ -335,26 +348,26 @@ class LinodeNodeDriver(NodeDriver):
         # Step 4: linode.config.create for main profile
         disks = "%s,%s,,,,,,," % (linode["rootimage"], linode["swapimage"])
         params = {
-            "api_action":       "linode.config.create",
-            "LinodeID":         linode["id"],
-            "KernelID":         kernel,
-            "Label":            label["lconfig"],
-            "Comments":         comments,
-            "DiskList":         disks
+            "api_action": "linode.config.create",
+            "LinodeID": linode["id"],
+            "KernelID": kernel,
+            "Label": label["lconfig"],
+            "Comments": comments,
+            "DiskList": disks
         }
         data = self.connection.request(API_ROOT, params=params).objects[0]
         linode["config"] = data["ConfigID"]
 
         # Step 5: linode.boot
         params = {
-            "api_action":       "linode.boot",
-            "LinodeID":         linode["id"],
-            "ConfigID":         linode["config"]
+            "api_action": "linode.boot",
+            "LinodeID": linode["id"],
+            "ConfigID": linode["config"]
         }
         self.connection.request(API_ROOT, params=params)
 
         # Make a node out of it and hand it back
-        params = { "api_action": "linode.list", "LinodeID": linode["id"] }
+        params = {"api_action": "linode.list", "LinodeID": linode["id"]}
         data = self.connection.request(API_ROOT, params=params).objects[0]
         nodes = self._to_nodes(data)
 
@@ -364,33 +377,37 @@ class LinodeNodeDriver(NodeDriver):
         return None
 
     def list_sizes(self, location=None):
-        """List available Linode plans
+        """
+        List available Linode plans
 
         Gets the sizes that can be used for creating a Linode.  Since available
         Linode plans vary per-location, this method can also be passed a
         location to filter the availability.
 
         @keyword location: the facility to retrieve plans in
-        @type location: NodeLocation
+        @type    location: L{NodeLocation}
 
-        @return: a C{list} of L{NodeSize}s"""
-        params = { "api_action": "avail.linodeplans" }
+        @rtype: C{list} of L{NodeSize}
+        """
+        params = {"api_action": "avail.linodeplans"}
         data = self.connection.request(API_ROOT, params=params).objects[0]
         sizes = []
         for obj in data:
             n = NodeSize(id=obj["PLANID"], name=obj["LABEL"], ram=obj["RAM"],
-                    disk=(obj["DISK"] * 1024), bandwidth=obj["XFER"],
-                    price=obj["PRICE"], driver=self.connection.driver)
+                         disk=(obj["DISK"] * 1024), bandwidth=obj["XFER"],
+                         price=obj["PRICE"], driver=self.connection.driver)
             sizes.append(n)
         return sizes
 
     def list_images(self):
-        """List available Linux distributions
+        """
+        List available Linux distributions
 
         Retrieve all Linux distributions that can be deployed to a Linode.
 
-        @return: a C{list} of L{NodeImage}s"""
-        params = { "api_action": "avail.distributions" }
+        @rtype: C{list} of L{NodeImage}
+        """
+        params = {"api_action": "avail.distributions"}
         data = self.connection.request(API_ROOT, params=params).objects[0]
         distros = []
         for obj in data:
@@ -403,12 +420,14 @@ class LinodeNodeDriver(NodeDriver):
         return distros
 
     def list_locations(self):
-        """List available facilities for deployment
+        """
+        List available facilities for deployment
 
         Retrieve all facilities that a Linode can be deployed in.
 
-        @return: a C{list} of L{NodeLocation}s"""
-        params = { "api_action": "avail.datacenters" }
+        @rtype: C{list} of L{NodeLocation}
+        """
+        params = {"api_action": "avail.datacenters"}
         data = self.connection.request(API_ROOT, params=params).objects[0]
         nl = []
         for dc in data:
@@ -428,16 +447,20 @@ class LinodeNodeDriver(NodeDriver):
         return nl
 
     def linode_set_datacenter(self, dc):
-        """Set the default datacenter for Linode creation
+        """
+        Set the default datacenter for Linode creation
 
         Since Linodes must be created in a facility, this function sets the
         default that L{create_node} will use.  If a C{location} keyword is not
         passed to L{create_node}, this method must have already been used.
 
         @keyword dc: the datacenter to create Linodes in unless specified
-        @type dc: L{NodeLocation}"""
+        @type dc: L{NodeLocation}
+
+        @rtype: C{bool}
+        """
         did = dc.id
-        params = { "api_action": "avail.datacenters" }
+        params = {"api_action": "avail.datacenters"}
         data = self.connection.request(API_ROOT, params=params).objects[0]
         for datacenter in data:
             if did == dc["DATACENTERID"]:
@@ -461,8 +484,9 @@ class LinodeNodeDriver(NodeDriver):
         for o in objs:
             lid = o["LINODEID"]
             nodes[lid] = n = Node(id=lid, name=o["LABEL"], public_ips=[],
-                private_ips=[], state=self.LINODE_STATES[o["STATUS"]],
-                driver=self.connection.driver)
+                                  private_ips=[],
+                                  state=self.LINODE_STATES[o["STATUS"]],
+                                  driver=self.connection.driver)
             n.extra = copy(o)
             n.extra["PLANID"] = self._linode_plan_ids.get(o.get("TOTALRAM"))
             batch.append({"api_action": "linode.ip.list", "LinodeID": lid})
@@ -478,8 +502,8 @@ class LinodeNodeDriver(NodeDriver):
 
         for twenty_five in izip_longest(*args):
             twenty_five = [q for q in twenty_five if q]
-            params = { "api_action": "batch",
-                "api_requestArray": json.dumps(twenty_five) }
+            params = {"api_action": "batch",
+                      "api_requestArray": json.dumps(twenty_five)}
             req = self.connection.request(API_ROOT, params=params)
             if not req.success() or len(req.objects) == 0:
                 return None
@@ -489,7 +513,7 @@ class LinodeNodeDriver(NodeDriver):
         for ip_list in ip_answers:
             for ip in ip_list:
                 lid = ip["LINODEID"]
-                which = nodes[lid].public_ips if ip["ISPUBLIC"] == 1 else \
+                which = nodes[lid].public_ips if ip["ISPUBLIC"] == 1 else\
                     nodes[lid].private_ips
                 which.append(ip["IPADDRESS"])
         return list(nodes.values())
@@ -505,8 +529,9 @@ def _izip_longest(*args, **kwds):
 
     fillvalue = kwds.get('fillvalue')
 
-    def sentinel(counter = ([fillvalue]*(len(args)-1)).pop):
+    def sentinel(counter=([fillvalue] * (len(args) - 1)).pop):
         yield counter()  # yields the fillvalue, or raises IndexError
+
     fillers = itertools.repeat(fillvalue)
     iters = [itertools.chain(it, sentinel(), fillers) for it in args]
     try:
diff --git libcloud/compute/drivers/ninefold.py libcloud/compute/drivers/ninefold.py
index e860a94..2689aad 100644
--- libcloud/compute/drivers/ninefold.py
+++ libcloud/compute/drivers/ninefold.py
@@ -17,6 +17,7 @@ from libcloud.compute.providers import Provider
 
 from libcloud.compute.drivers.cloudstack import CloudStackNodeDriver
 
+
 class NinefoldNodeDriver(CloudStackNodeDriver):
     "Driver for Ninefold's Compute platform."
 
diff --git libcloud/compute/drivers/opennebula.py libcloud/compute/drivers/opennebula.py
index c79aeb0..36b8ec8 100644
--- libcloud/compute/drivers/opennebula.py
+++ libcloud/compute/drivers/opennebula.py
@@ -167,8 +167,8 @@ class OpenNebulaConnection(ConnectionUserAndKey):
         @return: Dictionary containing updated headers.
         """
         pass_sha1 = hashlib.sha1(b(self.key)).hexdigest()
-        headers['Authorization'] = ('Basic %s' % b64encode(b('%s:%s' %
-                                                (self.user_id,
+        headers['Authorization'] =\
+            ('Basic %s' % b64encode(b('%s:%s' % (self.user_id,
                                                  pass_sha1))).decode('utf-8'))
         return headers
 
@@ -299,14 +299,12 @@ class OpenNebulaNodeDriver(NodeDriver):
         """
         Create a new OpenNebula node.
 
-        See L{NodeDriver.create_node} for more keyword args.
-        @type    networks: L{OpenNebulaNetwork} or C{list}
-                           of L{OpenNebulaNetwork}s
+        @inherits: L{NodeDriver.create_node}
+
         @keyword networks: List of virtual networks to which this node should
                            connect. (optional)
-
-        @rtype:  L{Node}
-        @return: Instance of a newly created node.
+        @type    networks: L{OpenNebulaNetwork} or
+            C{list} of L{OpenNebulaNetwork}
         """
         compute = ET.Element('COMPUTE')
 
@@ -317,8 +315,9 @@ class OpenNebulaNodeDriver(NodeDriver):
         instance_type.text = kwargs['size'].name
 
         storage = ET.SubElement(compute, 'STORAGE')
-        ET.SubElement(storage, 'DISK', {'image': '%s' %
-                                                  (str(kwargs['image'].id))})
+        ET.SubElement(storage,
+                      'DISK',
+                      {'image': '%s' % (str(kwargs['image'].id))})
 
         if 'networks' in kwargs:
             if not isinstance(kwargs['networks'], list):
@@ -328,11 +327,11 @@ class OpenNebulaNodeDriver(NodeDriver):
             for network in kwargs['networks']:
                 if network.address:
                     ET.SubElement(networkGroup, 'NIC',
-                        {'network': '%s' % (str(network.id)),
-                        'ip': network.address})
+                                  {'network': '%s' % (str(network.id)),
+                                  'ip': network.address})
                 else:
                     ET.SubElement(networkGroup, 'NIC',
-                        {'network': '%s' % (str(network.id))})
+                                  {'network': '%s' % (str(network.id))})
 
         xml = ET.tostring(compute)
         node = self.connection.request('/compute', method='POST',
@@ -356,33 +355,33 @@ class OpenNebulaNodeDriver(NodeDriver):
         """
         Return list of sizes on a provider.
 
-        See L{NodeDriver.list_sizes} for more args.
+        @inherits: L{NodeDriver.list_sizes}
 
-        @rtype:  C{list} of L{OpenNebulaNodeSize}
         @return: List of compute node sizes supported by the cloud provider.
+        @rtype:  C{list} of L{OpenNebulaNodeSize}
         """
         return [
             NodeSize(id=1,
-                name='small',
-                ram=None,
-                disk=None,
-                bandwidth=None,
-                price=None,
-                driver=self),
+                     name='small',
+                     ram=None,
+                     disk=None,
+                     bandwidth=None,
+                     price=None,
+                     driver=self),
             NodeSize(id=2,
-                name='medium',
-                ram=None,
-                disk=None,
-                bandwidth=None,
-                price=None,
-                driver=self),
+                     name='medium',
+                     ram=None,
+                     disk=None,
+                     bandwidth=None,
+                     price=None,
+                     driver=self),
             NodeSize(id=3,
-                name='large',
-                ram=None,
-                disk=None,
-                bandwidth=None,
-                price=None,
-                driver=self),
+                     name='large',
+                     ram=None,
+                     disk=None,
+                     bandwidth=None,
+                     price=None,
+                     driver=self),
         ]
 
     def list_locations(self):
@@ -396,9 +395,9 @@ class OpenNebulaNodeDriver(NodeDriver):
         @param location: Location from which to request a list of virtual
                          networks. (optional)
 
-        @rtype:  C{list} of L{OpenNebulaNetwork}
         @return: List of virtual networks available to be connected to a
                  compute node.
+        @rtype:  C{list} of L{OpenNebulaNetwork}
         """
         return self._to_networks(self.connection.request('/network').object)
 
@@ -410,14 +409,15 @@ class OpenNebulaNodeDriver(NodeDriver):
         action which should be carried out on that compute node. Then
         instruct the node to carry out that action.
 
-        @type  node: L{Node}
         @param node: Compute node instance.
-        @type  action: C{str}
+        @type  node: L{Node}
+
         @param action: Action to be carried out on the compute node.
+        @type  action: C{str}
 
-        @rtype:  C{bool}
         @return: False if an HTTP Bad Request is received, else, True is
                  returned.
+        @rtype:  C{bool}
         """
         compute_node_id = str(node.id)
 
@@ -433,7 +433,7 @@ class OpenNebulaNodeDriver(NodeDriver):
 
         url = '/compute/%s' % compute_node_id
         resp = self.connection.request(url, method='PUT',
-                                        data=xml)
+                                       data=xml)
 
         if resp.status == httplib.BAD_REQUEST:
             return False
@@ -455,8 +455,8 @@ class OpenNebulaNodeDriver(NodeDriver):
         images = []
         for element in object.findall('DISK'):
             image_id = element.attrib['href'].partition('/storage/')[2]
-            image = self.connection.request(('/storage/%s' % (
-                                             image_id))).object
+            image = self.connection.request(
+                ('/storage/%s' % (image_id))).object
             images.append(self._to_image(image))
 
         return images
@@ -493,8 +493,8 @@ class OpenNebulaNodeDriver(NodeDriver):
         networks = []
         for element in object.findall('NETWORK'):
             network_id = element.attrib['href'].partition('/network/')[2]
-            network_element = self.connection.request(('/network/%s' % (
-                                             network_id))).object
+            network_element = self.connection.request(
+                ('/network/%s' % (network_id))).object
             networks.append(self._to_network(network_element))
 
         return networks
@@ -511,10 +511,10 @@ class OpenNebulaNodeDriver(NodeDriver):
         @return: The newly extracted L{OpenNebulaNetwork}.
         """
         return OpenNebulaNetwork(id=element.findtext('ID'),
-                      name=element.findtext('NAME'),
-                      address=element.findtext('ADDRESS'),
-                      size=element.findtext('SIZE'),
-                      driver=self.connection.driver)
+                                 name=element.findtext('NAME'),
+                                 address=element.findtext('ADDRESS'),
+                                 size=element.findtext('SIZE'),
+                                 driver=self.connection.driver)
 
     def _to_nodes(self, object):
         """
@@ -531,8 +531,8 @@ class OpenNebulaNodeDriver(NodeDriver):
         computes = []
         for element in object.findall('COMPUTE'):
             compute_id = element.attrib['href'].partition('/compute/')[2]
-            compute = self.connection.request(('/compute/%s' % (
-                                               compute_id))).object
+            compute = self.connection.request(
+                ('/compute/%s' % (compute_id))).object
             computes.append(self._to_node(compute))
 
         return computes
@@ -583,10 +583,10 @@ class OpenNebulaNodeDriver(NodeDriver):
         for element in network_list.findall('NIC'):
             networks.append(
                 OpenNebulaNetwork(id=element.attrib.get('network', None),
-                    name=None,
-                    address=element.attrib.get('ip', None),
-                    size=1,
-                    driver=self.connection.driver))
+                                  name=None,
+                                  address=element.attrib.get('ip', None),
+                                  size=1,
+                                  driver=self.connection.driver))
 
         return networks
 
@@ -610,9 +610,9 @@ class OpenNebulaNodeDriver(NodeDriver):
             for element in disk_list.findall('DISK'):
                 disks.append(
                     NodeImage(id=element.attrib.get('image', None),
-                        name=None,
-                        driver=self.connection.driver,
-                        extra={'dev': element.attrib.get('dev', None)}))
+                              name=None,
+                              driver=self.connection.driver,
+                              extra={'dev': element.attrib.get('dev', None)}))
 
         # @TODO: Return all disks when the Node type accepts multiple
         # attached disks per node.
@@ -640,17 +640,19 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
         """
         Create a new OpenNebula node.
 
-        See L{NodeDriver.create_node} for more keyword args.
-        @type    networks: L{OpenNebulaNetwork} or C{list}
-                           of L{OpenNebulaNetwork}s
+        @inherits: L{NodeDriver.create_node}
+
         @keyword networks: List of virtual networks to which this node should
                            connect. (optional)
-        @type    context: C{dict}
+        @type    networks: L{OpenNebulaNetwork} or C{list}
+                           of L{OpenNebulaNetwork}
+
         @keyword context: Custom (key, value) pairs to be injected into
                           compute node XML description. (optional)
+        @type    context: C{dict}
 
-        @rtype:  L{Node}
         @return: Instance of a newly created node.
+        @rtype:  L{Node}
         """
         compute = ET.Element('COMPUTE')
 
@@ -661,8 +663,9 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
         instance_type.text = kwargs['size'].name
 
         disk = ET.SubElement(compute, 'DISK')
-        ET.SubElement(disk, 'STORAGE', {'href': '/storage/%s' %
-                                                  (str(kwargs['image'].id))})
+        ET.SubElement(disk,
+                      'STORAGE',
+                      {'href': '/storage/%s' % (str(kwargs['image'].id))})
 
         if 'networks' in kwargs:
             if not isinstance(kwargs['networks'], list):
@@ -671,7 +674,7 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
             for network in kwargs['networks']:
                 nic = ET.SubElement(compute, 'NIC')
                 ET.SubElement(nic, 'NETWORK',
-                            {'href': '/network/%s' % (str(network.id))})
+                              {'href': '/network/%s' % (str(network.id))})
                 if network.address:
                     ip_line = ET.SubElement(nic, 'IP')
                     ip_line.text = network.address
@@ -699,44 +702,44 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
         """
         Return list of sizes on a provider.
 
-        See L{NodeDriver.list_sizes} for more args.
+        @inherits: L{NodeDriver.list_sizes}
 
-        @rtype:  C{list} of L{OpenNebulaNodeSize}
         @return: List of compute node sizes supported by the cloud provider.
+        @rtype:  C{list} of L{OpenNebulaNodeSize}
         """
         return [
-          OpenNebulaNodeSize(id=1,
-                   name='small',
-                   ram=1024,
-                   cpu=1,
-                   disk=None,
-                   bandwidth=None,
-                   price=None,
-                   driver=self),
-          OpenNebulaNodeSize(id=2,
-                   name='medium',
-                   ram=4096,
-                   cpu=4,
-                   disk=None,
-                   bandwidth=None,
-                   price=None,
-                   driver=self),
-          OpenNebulaNodeSize(id=3,
-                   name='large',
-                   ram=8192,
-                   cpu=8,
-                   disk=None,
-                   bandwidth=None,
-                   price=None,
-                   driver=self),
-          OpenNebulaNodeSize(id=4,
-                   name='custom',
-                   ram=0,
-                   cpu=0,
-                   disk=None,
-                   bandwidth=None,
-                   price=None,
-                   driver=self),
+            OpenNebulaNodeSize(id=1,
+                               name='small',
+                               ram=1024,
+                               cpu=1,
+                               disk=None,
+                               bandwidth=None,
+                               price=None,
+                               driver=self),
+            OpenNebulaNodeSize(id=2,
+                               name='medium',
+                               ram=4096,
+                               cpu=4,
+                               disk=None,
+                               bandwidth=None,
+                               price=None,
+                               driver=self),
+            OpenNebulaNodeSize(id=3,
+                               name='large',
+                               ram=8192,
+                               cpu=8,
+                               disk=None,
+                               bandwidth=None,
+                               price=None,
+                               driver=self),
+            OpenNebulaNodeSize(id=4,
+                               name='custom',
+                               ram=0,
+                               cpu=0,
+                               disk=None,
+                               bandwidth=None,
+                               price=None,
+                               driver=self),
         ]
 
     def _to_images(self, object):
@@ -754,8 +757,8 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
         images = []
         for element in object.findall('STORAGE'):
             image_id = element.attrib["href"].partition("/storage/")[2]
-            image = self.connection.request(("/storage/%s" %
-                                             (image_id))).object
+            image = self.connection.request(
+                ("/storage/%s" % (image_id))).object
             images.append(self._to_image(image))
 
         return images
@@ -829,11 +832,11 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
 
             networks.append(
                 OpenNebulaNetwork(id=network_id,
-                         name=network.attrib.get('name', None),
-                         address=element.findtext('IP'),
-                         size=1,
-                         driver=self.connection.driver,
-                         extra={'mac': element.findtext('MAC')}))
+                                  name=network.attrib.get('name', None),
+                                  address=element.findtext('IP'),
+                                  size=1,
+                                  driver=self.connection.driver,
+                                  extra={'mac': element.findtext('MAC')}))
 
         return networks
 
@@ -858,10 +861,10 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
 
             disks.append(
                 NodeImage(id=disk_id,
-                    name=disk.attrib.get('name', None),
-                    driver=self.connection.driver,
-                    extra={'type': element.findtext('TYPE'),
-                           'target': element.findtext('TARGET')}))
+                          name=disk.attrib.get('name', None),
+                          driver=self.connection.driver,
+                          extra={'type': element.findtext('TYPE'),
+                                 'target': element.findtext('TARGET')}))
 
         # @TODO: Return all disks when the Node type accepts multiple
         # attached disks per node.
@@ -887,7 +890,7 @@ class OpenNebula_2_0_NodeDriver(OpenNebulaNodeDriver):
 
         try:
             return next((node_size for node_size in self.list_sizes()
-                    if node_size.name == instance_type.text))
+                        if node_size.name == instance_type.text))
         except StopIteration:
             return None
 
@@ -928,15 +931,16 @@ class OpenNebula_3_0_NodeDriver(OpenNebula_2_0_NodeDriver):
         which will be saved, and the name under which the image will be saved
         upon shutting down the compute node.
 
-        @type  node: L{Node}
         @param node: Compute node instance.
-        @type  name: C{str}
+        @type  node: L{Node}
+
         @param name: Name under which the image should be saved after shutting
                      down the compute node.
+        @type  name: C{str}
 
-        @rtype:  C{bool}
         @return: False if an HTTP Bad Request is received, else, True is
                  returned.
+        @rtype:  C{bool}
         """
         compute_node_id = str(node.id)
 
@@ -947,9 +951,9 @@ class OpenNebula_3_0_NodeDriver(OpenNebula_2_0_NodeDriver):
 
         disk = ET.SubElement(compute, 'DISK', {'id': str(node.image.id)})
 
-        ET.SubElement(disk, 'STORAGE', {'href': '/storage/%s' %
-                                        (str(node.image.id)),
-                                        'name': node.image.name})
+        ET.SubElement(disk, 'STORAGE',
+                      {'href': '/storage/%s' % (str(node.image.id)),
+                       'name': node.image.name})
 
         ET.SubElement(disk, 'SAVE_AS', {'name': str(name)})
 
@@ -957,7 +961,7 @@ class OpenNebula_3_0_NodeDriver(OpenNebula_2_0_NodeDriver):
 
         url = '/compute/%s' % compute_node_id
         resp = self.connection.request(url, method='PUT',
-                                        data=xml)
+                                       data=xml)
 
         if resp.status == httplib.BAD_REQUEST:
             return False
@@ -972,15 +976,15 @@ class OpenNebula_3_0_NodeDriver(OpenNebula_2_0_NodeDriver):
         Take XML representation containing a network description and
         convert to OpenNebulaNetwork object.
 
-        @rtype:  L{OpenNebulaNetwork}
         @return: The newly extracted L{OpenNebulaNetwork}.
+        @rtype:  L{OpenNebulaNetwork}
         """
         return OpenNebulaNetwork(id=element.findtext('ID'),
-                      name=element.findtext('NAME'),
-                      address=element.findtext('ADDRESS'),
-                      size=element.findtext('SIZE'),
-                      driver=self.connection.driver,
-                      extra={'public': element.findtext('PUBLIC')})
+                                 name=element.findtext('NAME'),
+                                 address=element.findtext('ADDRESS'),
+                                 size=element.findtext('SIZE'),
+                                 driver=self.connection.driver,
+                                 extra={'public': element.findtext('PUBLIC')})
 
 
 class OpenNebula_3_2_NodeDriver(OpenNebula_3_0_NodeDriver):
@@ -995,10 +999,10 @@ class OpenNebula_3_2_NodeDriver(OpenNebula_3_0_NodeDriver):
         """
         Return list of sizes on a provider.
 
-        See L{NodeDriver.list_sizes} for more args.
+        @inherits: L{NodeDriver.list_sizes}
 
-        @rtype:  C{list} of L{OpenNebulaNodeSize}
         @return: List of compute node sizes supported by the cloud provider.
+        @rtype:  C{list} of L{OpenNebulaNodeSize}
         """
         return self._to_sizes(self.connection.request('/instance_type').object)
 
@@ -1011,8 +1015,8 @@ class OpenNebula_3_2_NodeDriver(OpenNebula_3_0_NodeDriver):
         and issue a request to convert each XML object representation of an
         instance type to an OpenNebulaNodeSize object.
 
-        @rtype:  C{list} of L{OpenNebulaNodeSize}
         @return: List of instance types.
+        @rtype:  C{list} of L{OpenNebulaNodeSize}
         """
         sizes = []
         ids = 1
diff --git libcloud/compute/drivers/openstack.py libcloud/compute/drivers/openstack.py
index 8c442ae..23df12a 100644
--- libcloud/compute/drivers/openstack.py
+++ libcloud/compute/drivers/openstack.py
@@ -54,7 +54,7 @@ __all__ = [
     'OpenStack_1_1_Connection',
     'OpenStack_1_1_NodeDriver',
     'OpenStackNodeDriver'
-  ]
+]
 
 ATOM_NAMESPACE = "http://www.w3.org/2005/Atom"
 
@@ -62,7 +62,6 @@ DEFAULT_API_VERSION = '1.1'
 
 
 class OpenStackResponse(Response):
-
     node_driver = None
 
     def success(self):
@@ -166,7 +165,6 @@ class OpenStackNodeDriver(NodeDriver, OpenStackDriverMixin):
         'VERIFY_RESIZE': NodeState.RUNNING,
         'PASSWORD': NodeState.PENDING,
         'RESCUE': NodeState.PENDING,
-        'REBUILD': NodeState.PENDING,
         'REBOOT': NodeState.REBOOTING,
         'HARD_REBOOT': NodeState.REBOOTING,
         'SHARE_IP': NodeState.PENDING,
@@ -176,7 +174,7 @@ class OpenStackNodeDriver(NodeDriver, OpenStackDriverMixin):
     }
 
     def __new__(cls, key, secret=None, secure=True, host=None, port=None,
-                 api_version=DEFAULT_API_VERSION, **kwargs):
+                api_version=DEFAULT_API_VERSION, **kwargs):
         """
         @requires: key, secret
         """
@@ -209,16 +207,23 @@ class OpenStackNodeDriver(NodeDriver, OpenStackDriverMixin):
         return self._reboot_node(node, reboot_type='HARD')
 
     def list_nodes(self):
-        return self._to_nodes(self.connection.request('/servers/detail')
-                                             .object)
+        return self._to_nodes(
+            self.connection.request('/servers/detail').object)
 
     def list_images(self, location=None, ex_only_active=True):
-        return self._to_images(self.connection.request('/images/detail')
-                                              .object, ex_only_active)
+        """
+        @inherits: L{NodeDriver.list_images}
+
+        @param ex_only_active: True if list only active
+        @type ex_only_active: C{bool}
+
+        """
+        return self._to_images(
+            self.connection.request('/images/detail').object, ex_only_active)
 
     def list_sizes(self, location=None):
-        return self._to_sizes(self.connection.request('/flavors/detail')
-                                             .object)
+        return self._to_sizes(
+            self.connection.request('/flavors/detail').object)
 
     def list_locations(self):
         return [NodeLocation(0, '', '', self)]
@@ -227,6 +232,14 @@ class OpenStackNodeDriver(NodeDriver, OpenStackDriverMixin):
         return self.openstack_connection_kwargs()
 
     def ex_get_node_details(self, node_id):
+        """
+        Lists details of the specified server.
+
+        @param       node_id: ID of the node which should be used
+        @type        node_id: C{str}
+
+        @rtype: L{Node}
+        """
         # @TODO: Remove this if in 0.6
         if isinstance(node_id, Node):
             node_id = node_id.id
@@ -239,14 +252,29 @@ class OpenStackNodeDriver(NodeDriver, OpenStackDriverMixin):
         return self._to_node_from_obj(resp.object)
 
     def ex_soft_reboot_node(self, node):
+        """
+        Soft reboots the specified server
+
+        @param      node:  node
+        @type       node: L{Node}
+
+        @rtype: C{bool}
+        """
         return self._reboot_node(node, reboot_type='SOFT')
 
     def ex_hard_reboot_node(self, node):
+        """
+        Hard reboots the specified server
+
+        @param      node:  node
+        @type       node: L{Node}
+
+        @rtype: C{bool}
+        """
         return self._reboot_node(node, reboot_type='HARD')
 
 
 class OpenStack_1_0_Response(OpenStackResponse):
-
     def __init__(self, *args, **kwargs):
         # done because of a circular reference from
         # NodeDriver -> Connection -> Response
@@ -293,15 +321,17 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
 
     def _to_image(self, element):
         return NodeImage(id=element.get('id'),
-                      name=element.get('name'),
-                      driver=self.connection.driver,
-                      extra={'updated': element.get('updated'),
-                             'created': element.get('created'),
-                             'status': element.get('status'),
-                             'serverId': element.get('serverId'),
-                             'progress': element.get('progress'),
-                             'minDisk': element.get('minDisk'),
-                             'minRam': element.get('minRam')})
+                         name=element.get('name'),
+                         driver=self.connection.driver,
+                         extra={'updated': element.get('updated'),
+                                'created': element.get('created'),
+                                'status': element.get('status'),
+                                'serverId': element.get('serverId'),
+                                'progress': element.get('progress'),
+                                'minDisk': element.get('minDisk'),
+                                'minRam': element.get('minRam')
+                                }
+                         )
 
     def _change_password_or_name(self, node, name=None, password=None):
         uri = '/servers/%s' % (node.id)
@@ -310,9 +340,9 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
             name = node.name
 
         body = {'xmlns': self.XML_NAMESPACE,
-                 'name': name}
+                'name': name}
 
-        if password != None:
+        if password is not None:
             body['adminPass'] = password
 
         server_elm = ET.Element('server', body)
@@ -320,7 +350,7 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         resp = self.connection.request(
             uri, method='PUT', data=ET.tostring(server_elm))
 
-        if resp.status == httplib.NO_CONTENT and password != None:
+        if resp.status == httplib.NO_CONTENT and password is not None:
             node.extra['password'] = password
 
         return resp.status == httplib.NO_CONTENT
@@ -329,7 +359,8 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         """
         Create a new node
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
+
         @keyword    ex_metadata: Key/Value metadata to associate with a node
         @type       ex_metadata: C{dict}
 
@@ -342,16 +373,16 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         size = kwargs['size']
 
         attributes = {'xmlns': self.XML_NAMESPACE,
-             'name': name,
-             'imageId': str(image.id),
-             'flavorId': str(size.id)}
+                      'name': name,
+                      'imageId': str(image.id),
+                      'flavorId': str(size.id)}
 
         if 'ex_shared_ip_group' in kwargs:
             # Deprecate this. Be explicit and call the variable
             # ex_shared_ip_group_id since user needs to pass in the id, not the
             # name.
-            warnings.warn('ex_shared_ip_group argument is deprecated. Please'
-                          + ' use ex_shared_ip_group_id')
+            warnings.warn('ex_shared_ip_group argument is deprecated.'
+                          ' Please use ex_shared_ip_group_id')
 
         if 'ex_shared_ip_group_id' in kwargs:
             shared_ip_group_id = kwargs['ex_shared_ip_group_id']
@@ -378,8 +409,16 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
 
         This will reboot the instance to complete the operation.
 
-        L{node.extra['password']} will be set to the new value if the
+        L{Node.extra['password']} will be set to the new value if the
         operation was successful.
+
+        @param      node: node to set password
+        @type       node: L{Node}
+
+        @param      password: new password.
+        @type       password: C{str}
+
+        @rtype: C{bool}
         """
         return self._change_password_or_name(node, password=password)
 
@@ -388,6 +427,14 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         Sets the Node's name.
 
         This will reboot the instance to complete the operation.
+
+        @param      node: node to set name
+        @type       node: L{Node}
+
+        @param      name: new name
+        @type       name: C{str}
+
+        @rtype: C{bool}
         """
         return self._change_password_or_name(node, name=name)
 
@@ -395,17 +442,18 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         """
         Change an existing server flavor / scale the server up or down.
 
-        @keyword    node: node to resize.
-        @param      node: C{Node}
+        @param      node: node to resize.
+        @type       node: L{Node}
+
+        @param      size: new size.
+        @type       size: L{NodeSize}
 
-        @keyword    size: new size.
-        @param      size: C{NodeSize}
+        @rtype: C{bool}
         """
         elm = ET.Element(
             'resize',
             {'xmlns': self.XML_NAMESPACE,
-             'flavorId': str(size.id),
-            }
+             'flavorId': str(size.id)}
         )
 
         resp = self.connection.request("/servers/%s/action" % (node.id),
@@ -421,8 +469,10 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
 
         For more info refer to the API documentation: http://goo.gl/zjFI1
 
-        @keyword    node: node for which the resize request will be confirmed.
-        @param      node: C{Node}
+        @param      node: node for which the resize request will be confirmed.
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
         elm = ET.Element(
             'confirmResize',
@@ -442,8 +492,10 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
 
         For more info refer to the API documentation: http://goo.gl/AizBu
 
-        @keyword    node: node for which the resize request will be reverted.
-        @param      node: C{Node}
+        @param      node: node for which the resize request will be reverted.
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
         elm = ET.Element(
             'revertResize',
@@ -456,6 +508,17 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         return resp.status == httplib.NO_CONTENT
 
     def ex_rebuild(self, node_id, image_id):
+        """
+        Rebuilds the specified server.
+
+        @param       node_id: ID of the node which should be used
+        @type        node_id: C{str}
+
+        @param       image_id: ID of the image which should be used
+        @type        image_id: C{str}
+
+        @rtype: C{bool}
+        """
         # @TODO: Remove those ifs in 0.6
         if isinstance(node_id, Node):
             node_id = node_id.id
@@ -466,8 +529,7 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         elm = ET.Element(
             'rebuild',
             {'xmlns': self.XML_NAMESPACE,
-             'imageId': image_id,
-            }
+             'imageId': image_id}
         )
 
         resp = self.connection.request("/servers/%s/action" % node_id,
@@ -476,6 +538,17 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         return resp.status == httplib.ACCEPTED
 
     def ex_create_ip_group(self, group_name, node_id=None):
+        """
+        Creates a shared IP group.
+
+        @param       group_name:  group name which should be used
+        @type        group_name: C{str}
+
+        @param       node_id: ID of the node which should be used
+        @type        node_id: C{str}
+
+        @rtype: C{bool}
+        """
         # @TODO: Remove this if in 0.6
         if isinstance(node_id, Node):
             node_id = node_id.id
@@ -483,12 +556,12 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         group_elm = ET.Element(
             'sharedIpGroup',
             {'xmlns': self.XML_NAMESPACE,
-             'name': group_name,
-            }
+             'name': group_name}
         )
 
         if node_id:
-            ET.SubElement(group_elm,
+            ET.SubElement(
+                group_elm,
                 'server',
                 {'id': node_id}
             )
@@ -499,19 +572,53 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         return self._to_shared_ip_group(resp.object)
 
     def ex_list_ip_groups(self, details=False):
+        """
+        Lists IDs and names for shared IP groups.
+        If details lists all details for shared IP groups.
+
+        @param       details: True if details is required
+        @type        details: C{bool}
+
+        @rtype: C{list} of L{OpenStack_1_0_SharedIpGroup}
+        """
         uri = '/shared_ip_groups/detail' if details else '/shared_ip_groups'
         resp = self.connection.request(uri,
                                        method='GET')
         groups = findall(resp.object, 'sharedIpGroup',
-                               self.XML_NAMESPACE)
+                         self.XML_NAMESPACE)
         return [self._to_shared_ip_group(el) for el in groups]
 
     def ex_delete_ip_group(self, group_id):
+        """
+        Deletes the specified shared IP group.
+
+        @param       group_id:  group id which should be used
+        @type        group_id: C{str}
+
+        @rtype: C{bool}
+        """
         uri = '/shared_ip_groups/%s' % group_id
         resp = self.connection.request(uri, method='DELETE')
         return resp.status == httplib.NO_CONTENT
 
     def ex_share_ip(self, group_id, node_id, ip, configure_node=True):
+        """
+        Shares an IP address to the specified server.
+
+        @param       group_id:  group id which should be used
+        @type        group_id: C{str}
+
+        @param       node_id: ID of the node which should be used
+        @type        node_id: C{str}
+
+        @param       ip: ip which should be used
+        @type        ip: C{str}
+
+        @param       configure_node: configure node
+        @type        configure_node: C{bool}
+
+        @rtype: C{bool}
+        """
         # @TODO: Remove this if in 0.6
         if isinstance(node_id, Node):
             node_id = node_id.id
@@ -536,6 +643,17 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         return resp.status == httplib.ACCEPTED
 
     def ex_unshare_ip(self, node_id, ip):
+        """
+        Removes a shared IP address from the specified server.
+
+        @param       node_id: ID of the node which should be used
+        @type        node_id: C{str}
+
+        @param       ip: ip which should be used
+        @type        ip: C{str}
+
+        @rtype: C{bool}
+        """
         # @TODO: Remove this if in 0.6
         if isinstance(node_id, Node):
             node_id = node_id.id
@@ -547,6 +665,14 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         return resp.status == httplib.ACCEPTED
 
     def ex_list_ip_addresses(self, node_id):
+        """
+        List all server addresses.
+
+        @param       node_id: ID of the node which should be used
+        @type        node_id: C{str}
+
+        @rtype: C{bool}
+        """
         # @TODO: Remove this if in 0.6
         if isinstance(node_id, Node):
             node_id = node_id.id
@@ -598,8 +724,7 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         return [self._to_node(el) for el in node_elements]
 
     def _to_node_from_obj(self, obj):
-        return self._to_node(findall(obj, 'server',
-                                           self.XML_NAMESPACE)[0])
+        return self._to_node(findall(obj, 'server', self.XML_NAMESPACE)[0])
 
     def _to_node(self, el):
         def get_ips(el):
@@ -612,11 +737,11 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
             return d
 
         public_ip = get_ips(findall(el, 'addresses/public/ip',
-                                          self.XML_NAMESPACE))
+                                    self.XML_NAMESPACE))
         private_ip = get_ips(findall(el, 'addresses/private/ip',
-                                          self.XML_NAMESPACE))
+                                     self.XML_NAMESPACE))
         metadata = get_meta_dict(findall(el, 'metadata/meta',
-                                          self.XML_NAMESPACE))
+                                         self.XML_NAMESPACE))
 
         n = Node(id=el.get('id'),
                  name=el.get('name'),
@@ -626,14 +751,14 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
                  private_ips=private_ip,
                  driver=self.connection.driver,
                  extra={
-                    'password': el.get('adminPass'),
-                    'hostId': el.get('hostId'),
-                    'imageId': el.get('imageId'),
-                    'flavorId': el.get('flavorId'),
-                    'uri': "https://%s%s/servers/%s" % (
+                     'password': el.get('adminPass'),
+                     'hostId': el.get('hostId'),
+                     'imageId': el.get('imageId'),
+                     'flavorId': el.get('flavorId'),
+                     'uri': "https://%s%s/servers/%s" % (
                          self.connection.host,
                          self.connection.request_path, el.get('id')),
-                    'metadata': metadata,
+                     'metadata': metadata,
                  })
         return n
 
@@ -643,14 +768,14 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
 
     def _to_size(self, el):
         return NodeSize(id=el.get('id'),
-                     name=el.get('name'),
-                     ram=int(el.get('ram')),
-                     disk=int(el.get('disk')),
-                     # XXX: needs hardcode
-                     bandwidth=None,
-                     # Hardcoded
-                     price=self._get_size_price(el.get('id')),
-                     driver=self.connection.driver)
+                        name=el.get('name'),
+                        ram=int(el.get('ram')),
+                        disk=int(el.get('disk')),
+                        # XXX: needs hardcode
+                        bandwidth=None,
+                        # Hardcoded
+                        price=self._get_size_price(el.get('id')),
+                        driver=self.connection.driver)
 
     def ex_limits(self):
         """
@@ -659,7 +784,8 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         and absolute limits like total amount of available
         RAM to be used by servers.
 
-        @return: C{dict} with keys 'rate' and 'absolute'
+        @return: dict with keys 'rate' and 'absolute'
+        @rtype: C{dict}
         """
 
         def _to_rate(el):
@@ -674,10 +800,10 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
 
         limits = self.connection.request("/limits").object
         rate = [_to_rate(el) for el in findall(limits, 'rate/limit',
-            self.XML_NAMESPACE)]
+                                               self.XML_NAMESPACE)]
         absolute = {}
         for item in findall(limits, 'absolute/limit',
-          self.XML_NAMESPACE):
+                            self.XML_NAMESPACE):
             absolute.update(_to_absolute(item))
 
         return {"rate": rate, "absolute": absolute}
@@ -685,27 +811,33 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
     def ex_save_image(self, node, name):
         """Create an image for node.
 
-        @keyword    node: node to use as a base for image
-        @param      node: L{Node}
-        @keyword    name: name for new image
-        @param      name: C{string}
+        @param      node: node to use as a base for image
+        @type       node: L{Node}
+
+        @param      name: name for new image
+        @type       name: C{str}
+
+        @rtype: L{NodeImage}
         """
 
         image_elm = ET.Element(
-                'image',
-                {'xmlns': self.XML_NAMESPACE,
-                    'name': name,
-                    'serverId': node.id})
+            'image',
+            {'xmlns': self.XML_NAMESPACE,
+             'name': name,
+             'serverId': node.id}
+        )
 
-        return self._to_image(self.connection.request("/images",
-                    method="POST",
-                    data=ET.tostring(image_elm)).object)
+        return self._to_image(
+            self.connection.request("/images", method="POST",
+                                    data=ET.tostring(image_elm)).object)
 
     def ex_delete_image(self, image):
         """Delete an image for node.
 
-        @keyword    image: the image to be deleted
-        @param      image: L{NodeImage}
+        @param      image: the image to be deleted
+        @type       image: L{NodeImage}
+
+        @rtype: C{bool}
         """
         uri = '/images/%s' % image.id
         resp = self.connection.request(uri, method='DELETE')
@@ -716,20 +848,20 @@ class OpenStack_1_0_NodeDriver(OpenStackNodeDriver):
         if servers_el:
             servers = [s.get('id')
                        for s in findall(servers_el[0], 'server',
-                       self.XML_NAMESPACE)]
+                                        self.XML_NAMESPACE)]
         else:
             servers = None
         return OpenStack_1_0_SharedIpGroup(id=el.get('id'),
-                                      name=el.get('name'),
-                                      servers=servers)
+                                           name=el.get('name'),
+                                           servers=servers)
 
     def _to_ip_addresses(self, el):
-        public_ips = [ip.get('addr') for ip in findall(findall(el, 'public',
-                                                 self.XML_NAMESPACE)[0],
-                                                 'ip', self.XML_NAMESPACE)]
-        private_ips = [ip.get('addr') for ip in findall(findall(el, 'private',
-                                                 self.XML_NAMESPACE)[0],
-                                                 'ip', self.XML_NAMESPACE)]
+        public_ips = [ip.get('addr') for ip in findall(
+            findall(el, 'public', self.XML_NAMESPACE)[0],
+            'ip', self.XML_NAMESPACE)]
+        private_ips = [ip.get('addr') for ip in findall(
+            findall(el, 'private', self.XML_NAMESPACE)[0],
+            'ip', self.XML_NAMESPACE)]
 
         return OpenStack_1_0_NodeIpAddresses(public_ips, private_ips)
 
@@ -764,7 +896,6 @@ class OpenStack_1_0_NodeIpAddresses(object):
 
 
 class OpenStack_1_1_Response(OpenStackResponse):
-
     def __init__(self, *args, **kwargs):
         # done because of a circular reference from
         # NodeDriver -> Connection -> Response
@@ -791,7 +922,6 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
     features = {"create_node": ["generates_password"]}
 
     def __init__(self, *args, **kwargs):
-
         self._ex_force_api_version = str(kwargs.pop('ex_force_api_version',
                                                     None))
         super(OpenStack_1_1_NodeDriver, self).__init__(*args, **kwargs)
@@ -799,23 +929,23 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
     def create_node(self, **kwargs):
         """Create a new node
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits:  L{NodeDriver.create_node}
+
         @keyword    ex_metadata: Key/Value metadata to associate with a node
         @type       ex_metadata: C{dict}
 
         @keyword    ex_files:   File Path => File contents to create on
-                                the node
+                                the no  de
         @type       ex_files:   C{dict}
 
         @keyword    ex_keyname:  Name of existing public key to inject into
                                  instance
-        @type       ex_keyname:  C{string}
+        @type       ex_keyname:  C{str}
 
         @keyword    ex_userdata: String containing user data
                                  see
                                  https://help.ubuntu.com/community/CloudInit
-        @type       ex_userdata: C{string}
-
+        @type       ex_userdata: C{str}
         """
 
         server_params = self._create_args_to_params(None, **kwargs)
@@ -825,7 +955,8 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
                                        data={'server': server_params})
 
         create_response = resp.object['server']
-        server_resp = self.connection.request('/servers/%s' % create_response['id'])
+        server_resp = self.connection.request(
+            '/servers/%s' % create_response['id'])
         server_object = server_resp.object['server']
         server_object['adminPass'] = create_response['adminPass']
 
@@ -843,20 +974,20 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
     def _to_image(self, api_image):
         server = api_image.get('server', {})
         return NodeImage(
-                      id=api_image['id'],
-                      name=api_image['name'],
-                      driver=self,
-                      extra=dict(
-                                 updated=api_image['updated'],
-                                 created=api_image['created'],
-                                 status=api_image['status'],
-                                 progress=api_image.get('progress'),
-                                 metadata=api_image.get('metadata'),
-                                 serverId=server.get('id'),
-                                 minDisk=api_image.get('minDisk'),
-                                 minRam=api_image.get('minRam'),
-                      )
-                  )
+            id=api_image['id'],
+            name=api_image['name'],
+            driver=self,
+            extra=dict(
+                updated=api_image['updated'],
+                created=api_image['created'],
+                status=api_image['status'],
+                progress=api_image.get('progress'),
+                metadata=api_image.get('metadata'),
+                serverId=server.get('id'),
+                minDisk=api_image.get('minDisk'),
+                minRam=api_image.get('minRam'),
+            )
+        )
 
     def _to_nodes(self, obj):
         servers = obj['servers']
@@ -911,6 +1042,17 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
         return resp.status == httplib.ACCEPTED
 
     def ex_set_password(self, node, password):
+        """
+        Changes the administrator password for a specified server.
+
+        @param      node: Node to rebuild.
+        @type       node: L{Node}
+
+        @param      password: The administrator password.
+        @type       password: C{str}
+
+        @rtype: C{bool}
+        """
         resp = self._node_action(node, 'changePassword', adminPass=password)
         node.extra['password'] = password
         return resp.status == httplib.ACCEPTED
@@ -919,11 +1061,13 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
         """
         Rebuild a Node.
 
-        @type node: C{Node}
-        @param node: Node to rebuild.
+        @param      node: Node to rebuild.
+        @type       node: L{Node}
 
-        @type image: C{NodeImage}
-        @param image: New image to use.
+        @param      image: New image to use.
+        @type       image: L{NodeImage}
+
+        @rtype: C{bool}
         """
         server_params = self._create_args_to_params(node, image=image)
         resp = self._node_action(node, 'rebuild', **server_params)
@@ -933,26 +1077,57 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
         """
         Change a node size.
 
-        @type node: C{Node}
-        @param node: Node to resize.
+        @param      node: Node to resize.
+        @type       node: L{Node}
 
-        @type image: C{NodeSize}
-        @param image: New size to use.
-        """
+        @type       size: L{NodeSize}
+        @param      size: New size to use.
 
+        @rtype: C{bool}
+        """
         server_params = self._create_args_to_params(node, size=size)
         resp = self._node_action(node, 'resize', **server_params)
         return resp.status == httplib.ACCEPTED
 
     def ex_confirm_resize(self, node):
+        """
+        Confirms a pending resize action.
+
+        @param      node: Node to resize.
+        @type       node: L{Node}
+
+        @rtype: C{bool}
+        """
         resp = self._node_action(node, 'confirmResize')
         return resp.status == httplib.NO_CONTENT
 
     def ex_revert_resize(self, node):
+        """
+        Cancels and reverts a pending resize action.
+
+        @param      node: Node to resize.
+        @type       node: L{Node}
+
+        @rtype: C{bool}
+        """
         resp = self._node_action(node, 'revertResize')
         return resp.status == httplib.ACCEPTED
 
     def ex_save_image(self, node, name, metadata=None):
+        """
+        Creates a new image.
+
+        @param      node: Node
+        @type       node: L{Node}
+
+        @param      name: The name for the new image.
+        @type       name: C{str}
+
+        @param      metadata: Key and value pairs for metadata.
+        @type       metadata: C{dict}
+
+        @rtype: L{NodeImage}
+        """
         optional_params = {}
         if metadata:
             optional_params['metadata'] = metadata
@@ -964,6 +1139,14 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
     def ex_set_server_name(self, node, name):
         """
         Sets the Node's name.
+
+        @param      node: Node
+        @type       node: L{Node}
+
+        @param      name: The name of the server.
+        @type       name: C{str}
+
+        @rtype: L{Node}
         """
         return self._update_node(node, name=name)
 
@@ -971,24 +1154,32 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
         """
         Get a Node's metadata.
 
-        @return     Key/Value metadata associated with node.
-        @type       C{dict}
+        @param      node: Node
+        @type       node: L{Node}
+
+        @return: Key/Value metadata associated with node.
+        @rtype: C{dict}
         """
         return self.connection.request(
-                '/servers/%s/metadata' % (node.id,), method='GET',
-            ).object['metadata']
+            '/servers/%s/metadata' % (node.id,),
+            method='GET',).object['metadata']
 
     def ex_set_metadata(self, node, metadata):
         """
         Sets the Node's metadata.
 
-        @keyword    metadata: Key/Value metadata to associate with a node
+        @param      node: Node
+        @type       node: L{Node}
+
+        @param      metadata: Key/Value metadata to associate with a node
         @type       metadata: C{dict}
+
+        @rtype: C{dict}
         """
         return self.connection.request(
-                '/servers/%s/metadata' % (node.id,), method='PUT',
-                data={'metadata': metadata}
-            ).object['metadata']
+            '/servers/%s/metadata' % (node.id,), method='PUT',
+            data={'metadata': metadata}
+        ).object['metadata']
 
     def ex_update_node(self, node, **node_updates):
         """
@@ -997,24 +1188,51 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
 
         The driver currently only supports updating the node name.
 
+        @param      node: Node
+        @type       node: L{Node}
+
         @keyword    name:   New name for the server
         @type       name:   C{str}
+
+        @rtype: L{Node}
         """
         potential_data = self._create_args_to_params(node, **node_updates)
         updates = {'name': potential_data['name']}
         return self._update_node(node, **updates)
 
     def ex_get_size(self, size_id):
-        return self._to_size(self.connection.request('/flavors/%s' %
-                                                     (size_id,))
-                   .object['flavor'])
+        """
+        Get a NodeSize
+
+        @param      size_id: ID of the size which should be used
+        @type       size_id: C{str}
+
+        @rtype: L{NodeSize}
+        """
+        return self._to_size(self.connection.request(
+            '/flavors/%s' % (size_id,)) .object['flavor'])
 
     def ex_get_image(self, image_id):
-        return self._to_image(self.connection.request('/images/%s' %
-                                                      (image_id,))
-                   .object['image'])
+        """
+        Get a NodeImage
+
+        @param      image_id: ID of the image which should be used
+        @type       image_id: C{str}
+
+        @rtype: L{NodeImage}
+        """
+        return self._to_image(self.connection.request(
+            '/images/%s' % (image_id,)).object['image'])
 
     def ex_delete_image(self, image):
+        """
+        Delete a NodeImage
+
+        @param      image: image witch should be used
+        @type       image: L{NodeImage}
+
+        @rtype: C{bool}
+        """
         resp = self.connection.request('/images/%s' % (image.id,),
                                        method='DELETE')
         return resp.status == httplib.NO_CONTENT
@@ -1046,10 +1264,10 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
             state=self.NODE_STATE_MAP.get(api_node['status'],
                                           NodeState.UNKNOWN),
             public_ips=[addr_desc['addr'] for addr_desc in
-                       chain(api_node['addresses'].get('public', []),
-                           api_node['addresses'].get('internet', []))],
+                        chain(api_node['addresses'].get('public', []),
+                              api_node['addresses'].get('internet', []))],
             private_ips=[addr_desc['addr'] for addr_desc in
-                        api_node['addresses'].get('private', [])],
+                         api_node['addresses'].get('private', [])],
             driver=self,
             extra=dict(
                 hostId=api_node['hostId'],
@@ -1059,7 +1277,7 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
                 imageId=api_node['image']['id'],
                 flavorId=api_node['flavor']['id'],
                 uri=next(link['href'] for link in api_node['links'] if
-                     link['rel'] == 'self'),
+                    link['rel'] == 'self'),
                 metadata=api_node['metadata'],
                 password=api_node.get('adminPass'),
                 created=api_node['created'],
@@ -1085,14 +1303,14 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
         )
 
     def _get_size_price(self, size_id):
-            try:
-                return get_size_price(
-                    driver_type='compute',
-                    driver_name=self.api_name,
-                    size_id=size_id,
-                )
-            except KeyError:
-                return(0.0)
+        try:
+            return get_size_price(
+                driver_type='compute',
+                driver_name=self.api_name,
+                size_id=size_id,
+            )
+        except KeyError:
+            return(0.0)
 
     def _extract_image_id_from_url(self, location_header):
         path = urlparse.urlparse(location_header).path
@@ -1101,6 +1319,17 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
 
     def ex_rescue(self, node, password=None):
         # Requires Rescue Mode extension
+        """
+        Rescue a node
+
+        @param      node: node
+        @type       node: L{Node}
+
+        @param      password: password
+        @type       password: C{str}
+
+        @rtype: L{Node}
+        """
         if password:
             resp = self._node_action(node, 'rescue', adminPass=password)
         else:
@@ -1110,5 +1339,13 @@ class OpenStack_1_1_NodeDriver(OpenStackNodeDriver):
         return node
 
     def ex_unrescue(self, node):
+        """
+        Unrescue a node
+
+        @param      node: node
+        @type       node: L{Node}
+
+        @rtype: C{bool}
+        """
         resp = self._node_action(node, 'unrescue')
         return resp.status == httplib.ACCEPTED
diff --git libcloud/compute/drivers/opsource.py libcloud/compute/drivers/opsource.py
index bf5b6f5..8b89ea8 100644
--- libcloud/compute/drivers/opsource.py
+++ libcloud/compute/drivers/opsource.py
@@ -103,8 +103,8 @@ class OpsourceResponse(XmlResponse):
             code = findtext(body, 'resultCode', SERVER_NS)
             message = findtext(body, 'resultDetail', SERVER_NS)
             raise OpsourceAPIException(code,
-                message,
-                driver=OpsourceNodeDriver)
+                                       message,
+                                       driver=OpsourceNodeDriver)
 
         return self.body
 
@@ -135,8 +135,8 @@ class OpsourceConnection(ConnectionUserAndKey):
     responseCls = OpsourceResponse
 
     def add_default_headers(self, headers):
-        headers['Authorization'] = ('Basic %s' % b64encode(b('%s:%s' %
-                                                (self.user_id,
+        headers['Authorization'] = \
+            ('Basic %s' % b64encode(b('%s:%s' % (self.user_id,
                                                  self.key))).decode('utf-8'))
         return headers
 
@@ -165,7 +165,7 @@ class OpsourceConnection(ConnectionUserAndKey):
         networks, and customer snapshots.
         """
         return ("%s/%s/%s" % (self.api_path, self.api_version,
-            self._get_orgId()))
+                              self._get_orgId()))
 
     def _get_orgId(self):
         """
@@ -173,7 +173,7 @@ class OpsourceConnection(ConnectionUserAndKey):
         'orgId' from the XML response object. We need the orgId to use most
         of the other API functions
         """
-        if self._orgId == None:
+        if self._orgId is None:
             body = self.request('myaccount').object
             self._orgId = findtext(body, 'orgId', DIRECTORY_NS)
         return self._orgId
@@ -186,9 +186,9 @@ class OpsourceStatus(object):
         step.name, step.number, step.percentComplete, failureReason,
     """
     def __init__(self, action=None, requestTime=None, userName=None,
-                numberOfSteps=None, updateTime=None, step_name=None,
-                step_number=None, step_percentComplete=None,
-                failureReason=None):
+                 numberOfSteps=None, updateTime=None, step_name=None,
+                 step_number=None, step_percentComplete=None,
+                 failureReason=None):
         self.action = action
         self.requestTime = requestTime
         self.userName = userName
@@ -200,14 +200,14 @@ class OpsourceStatus(object):
         self.failureReason = failureReason
 
     def __repr__(self):
-        return (('<OpsourceStatus: action=%s, requestTime=%s, userName=%s, ' \
-                    'numberOfSteps=%s, updateTime=%s, step_name=%s, ' \
-                    'step_number=%s, step_percentComplete=%s, ' \
-                    'failureReason=%s')
-                  % (self.action, self.requestTime, self.userName,
-                    self.numberOfSteps, self.updateTime, self.step_name,
-                    self.step_number, self.step_percentComplete,
-                    self.failureReason))
+        return (('<OpsourceStatus: action=%s, requestTime=%s, userName=%s, '
+                 'numberOfSteps=%s, updateTime=%s, step_name=%s, '
+                 'step_number=%s, step_percentComplete=%s, '
+                 'failureReason=%s')
+                % (self.action, self.requestTime, self.userName,
+                   self.numberOfSteps, self.updateTime, self.step_name,
+                   self.step_number, self.step_percentComplete,
+                   self.failureReason))
 
 
 class OpsourceNetwork(object):
@@ -216,7 +216,7 @@ class OpsourceNetwork(object):
     """
 
     def __init__(self, id, name, description, location, privateNet,
-                multicast, status):
+                 multicast, status):
         self.id = str(id)
         self.name = name
         self.description = description
@@ -226,7 +226,7 @@ class OpsourceNetwork(object):
         self.status = status
 
     def __repr__(self):
-        return (('<OpsourceNetwork: id=%s, name=%s, description=%s, ' \
+        return (('<OpsourceNetwork: id=%s, name=%s, description=%s, '
                  'location=%s, privateNet=%s, multicast=%s>')
                 % (self.id, self.name, self.description, self.location,
                    self.privateNet, self.multicast))
@@ -247,9 +247,8 @@ class OpsourceNodeDriver(NodeDriver):
         """
         Create a new opsource node
 
-        Standard keyword arguments from L{NodeDriver.create_node}:
         @keyword    name:   String with a name for this new node (required)
-        @type       name:   str
+        @type       name:   C{str}
 
         @keyword    image:  OS Image to boot on node. (required)
         @type       image:  L{NodeImage}
@@ -258,7 +257,6 @@ class OpsourceNodeDriver(NodeDriver):
                             node (required)
         @type       auth:   L{NodeAuthPassword}
 
-        Non-standard keyword arguments:
         @keyword    ex_description:  description for this node (required)
         @type       ex_description:  C{str}
 
@@ -274,6 +272,7 @@ class OpsourceNodeDriver(NodeDriver):
                  so the returned L{Node} is not guaranteed to be the same one
                  that was created.  This is only the case when multiple nodes
                  with the same name exist.
+        @rtype: L{Node}
         """
         name = kwargs['name']
         image = kwargs['image']
@@ -303,7 +302,7 @@ class OpsourceNodeDriver(NodeDriver):
             imageResourcePath = image.extra['resourcePath']
         else:
             imageResourcePath = "%s/%s" % (self.connection.get_resource_path(),
-                image.id)
+                                           image.id)
 
         server_elm = ET.Element('Server', {'xmlns': SERVER_NS})
         ET.SubElement(server_elm, "name").text = name
@@ -314,8 +313,8 @@ class OpsourceNodeDriver(NodeDriver):
         ET.SubElement(server_elm, "isStarted").text = str(ex_isStarted)
 
         self.connection.request_with_orgId('server',
-                                          method='POST',
-                                          data=ET.tostring(server_elm)).object
+                                           method='POST',
+                                           data=ET.tostring(server_elm)).object
 
         # XXX: return the last node in the list that has a matching name.  this
         #      is likely but not guaranteed to be the node we just created
@@ -323,23 +322,23 @@ class OpsourceNodeDriver(NodeDriver):
         return list(filter(lambda x: x.name == name, self.list_nodes()))[-1]
 
     def destroy_node(self, node):
-        body = self.connection.request_with_orgId('server/%s?delete' %
-                                                  (node.id)).object
+        body = self.connection.request_with_orgId(
+            'server/%s?delete' % (node.id)).object
 
         result = findtext(body, 'result', GENERAL_NS)
         return result == 'SUCCESS'
 
     def reboot_node(self, node):
-        body = self.connection.request_with_orgId('server/%s?restart' %
-                                                 (node.id)).object
+        body = self.connection.request_with_orgId(
+            'server/%s?restart' % (node.id)).object
         result = findtext(body, 'result', GENERAL_NS)
         return result == 'SUCCESS'
 
     def list_nodes(self):
-        nodes = self._to_nodes(self.connection
-            .request_with_orgId('server/deployed').object)
-        nodes.extend(self._to_nodes(self.connection
-            .request_with_orgId('server/pendingDeploy').object))
+        nodes = self._to_nodes(
+            self.connection.request_with_orgId('server/deployed').object)
+        nodes.extend(self._to_nodes(
+            self.connection.request_with_orgId('server/pendingDeploy').object))
         return nodes
 
     def list_images(self, location=None):
@@ -347,6 +346,8 @@ class OpsourceNodeDriver(NodeDriver):
         return a list of available images
             Currently only returns the default 'base OS images' provided by
             opsource. Customer images (snapshots) are not yet supported.
+
+        @inherits: L{NodeDriver.list_images}
         """
         return self._to_base_images(self.connection.request('base/image')
                    .object)
@@ -354,31 +355,38 @@ class OpsourceNodeDriver(NodeDriver):
     def list_sizes(self, location=None):
         return [
             NodeSize(id=1,
-                name="default",
-                ram=0,
-                disk=0,
-                bandwidth=0,
-                price=0,
-                driver=self.connection.driver),
+                     name="default",
+                     ram=0,
+                     disk=0,
+                     bandwidth=0,
+                     price=0,
+                     driver=self.connection.driver),
         ]
 
     def list_locations(self):
         """
         list locations (datacenters) available for instantiating servers and
         networks.
+
+        @inherits: L{NodeDriver.list_locations}
         """
-        return self._to_locations(self.connection
-            .request_with_orgId('datacenter').object)
+        return self._to_locations(
+            self.connection.request_with_orgId('datacenter').object)
 
     def list_networks(self, location=None):
         """
         List networks deployed across all data center locations for your
         organization.  The response includes the location of each network.
 
-        Returns a list of OpsourceNetwork objects
+
+        @keyword location: The location
+        @type    location: L{NodeLocation}
+
+        @return: a list of OpsourceNetwork objects
+        @rtype: C{list} of L{OpsourceNetwork}
         """
-        return self._to_networks(self.connection
-            .request_with_orgId('networkWithLocation').object)
+        return self._to_networks(
+            self.connection.request_with_orgId('networkWithLocation').object)
 
     def _to_base_images(self, object):
         images = []
@@ -399,28 +407,33 @@ class OpsourceNodeDriver(NodeDriver):
             'description': findtext(element, 'description', SERVER_NS),
             'OS_type': findtext(element, 'operatingSystem/type', SERVER_NS),
             'OS_displayName': findtext(element, 'operatingSystem/displayName',
-                SERVER_NS),
+                                       SERVER_NS),
             'cpuCount': findtext(element, 'cpuCount', SERVER_NS),
             'resourcePath': findtext(element, 'resourcePath', SERVER_NS),
             'memory': findtext(element, 'memory', SERVER_NS),
             'osStorage': findtext(element, 'osStorage', SERVER_NS),
             'additionalStorage': findtext(element, 'additionalStorage',
-                SERVER_NS),
+                                          SERVER_NS),
             'created': findtext(element, 'created', SERVER_NS),
             'location': location,
         }
 
         return NodeImage(id=str(findtext(element, 'id', SERVER_NS)),
-                     name=str(findtext(element, 'name', SERVER_NS)),
-                     extra=extra,
-                     driver=self.connection.driver)
+                         name=str(findtext(element, 'name', SERVER_NS)),
+                         extra=extra,
+                         driver=self.connection.driver)
 
     def ex_start_node(self, node):
         """
         Powers on an existing deployed server
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
-        body = self.connection.request_with_orgId('server/%s?start' %
-            node.id).object
+        body = self.connection.request_with_orgId(
+            'server/%s?start' % node.id).object
         result = findtext(body, 'result', GENERAL_NS)
         return result == 'SUCCESS'
 
@@ -430,9 +443,14 @@ class OpsourceNodeDriver(NodeDriver):
         initiating a shutdown sequence within the guest operating system.
         A successful response on this function means the system has
         successfully passed the request into the operating system.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
-        body = self.connection.request_with_orgId('server/%s?shutdown' %
-                                                  (node.id)).object
+        body = self.connection.request_with_orgId(
+            'server/%s?shutdown' % (node.id)).object
         result = findtext(body, 'result', GENERAL_NS)
         return result == 'SUCCESS'
 
@@ -442,9 +460,14 @@ class OpsourceNodeDriver(NodeDriver):
         ex_shutdown_graceful, success ensures the node will stop but some OS
         and application configurations may be adversely affected by the
         equivalent of pulling the power plug out of the machine.
+
+        @param      node: Node which should be used
+        @type       node: L{Node}
+
+        @rtype: C{bool}
         """
-        body = self.connection.request_with_orgId('server/%s?poweroff' %
-            node.id).object
+        body = self.connection.request_with_orgId(
+            'server/%s?poweroff' % node.id).object
         result = findtext(body, 'result', GENERAL_NS)
         return result == 'SUCCESS'
 
@@ -453,16 +476,26 @@ class OpsourceNodeDriver(NodeDriver):
         List networks deployed across all data center locations for your
         organization.  The response includes the location of each network.
 
-        Returns a list of OpsourceNetwork objects
+        @return: a list of OpsourceNetwork objects
+        @rtype: C{list} of L{OpsourceNetwork}
         """
         response = self.connection.request_with_orgId('networkWithLocation') \
                                   .object
         return self._to_networks(response)
 
     def ex_get_location_by_id(self, id):
+        """
+        Get location by ID.
+
+        @param  id: ID of the node location which should be used
+        @type   id: C{str}
+
+        @rtype: L{NodeLocation}
+        """
         location = None
         if id is not None:
-            location = list(filter(lambda x: x.id == id, self.list_locations()))[0]
+            location = list(
+                filter(lambda x: x.id == id, self.list_locations()))[0]
         return location
 
     def _to_networks(self, object):
@@ -485,10 +518,10 @@ class OpsourceNodeDriver(NodeDriver):
         return OpsourceNetwork(id=findtext(element, 'id', NETWORK_NS),
                                name=findtext(element, 'name', NETWORK_NS),
                                description=findtext(element, 'description',
-                                   NETWORK_NS),
+                                                    NETWORK_NS),
                                location=location,
                                privateNet=findtext(element, 'privateNet',
-                                   NETWORK_NS),
+                                                   NETWORK_NS),
                                multicast=multicast,
                                status=status)
 
@@ -508,8 +541,8 @@ class OpsourceNodeDriver(NodeDriver):
 
     def _to_nodes(self, object):
         node_elements = object.findall(fixxpath('DeployedServer', SERVER_NS))
-        node_elements.extend(object.findall(fixxpath('PendingDeployServer',
-            SERVER_NS)))
+        node_elements.extend(object.findall(
+            fixxpath('PendingDeployServer', SERVER_NS)))
         return [self._to_node(el) for el in node_elements]
 
     def _to_node(self, element):
@@ -527,17 +560,21 @@ class OpsourceNodeDriver(NodeDriver):
             'machineName': findtext(element, 'machineName', SERVER_NS),
             'deployedTime': findtext(element, 'deployedTime', SERVER_NS),
             'cpuCount': findtext(element, 'machineSpecification/cpuCount',
-                SERVER_NS),
+                                 SERVER_NS),
             'memoryMb': findtext(element, 'machineSpecification/memoryMb',
-                SERVER_NS),
+                                 SERVER_NS),
             'osStorageGb': findtext(element,
-                'machineSpecification/osStorageGb', SERVER_NS),
-            'additionalLocalStorageGb': findtext(element,
-                'machineSpecification/additionalLocalStorageGb', SERVER_NS),
+                                    'machineSpecification/osStorageGb',
+                                    SERVER_NS),
+            'additionalLocalStorageGb': findtext(
+                element, 'machineSpecification/additionalLocalStorageGb',
+                SERVER_NS),
             'OS_type': findtext(element,
-                'machineSpecification/operatingSystem/type', SERVER_NS),
-            'OS_displayName': findtext(element,
-                'machineSpecification/operatingSystem/displayName', SERVER_NS),
+                                'machineSpecification/operatingSystem/type',
+                                SERVER_NS),
+            'OS_displayName': findtext(
+                element, 'machineSpecification/operatingSystem/displayName',
+                SERVER_NS),
             'status': status,
         }
 
@@ -551,21 +588,21 @@ class OpsourceNodeDriver(NodeDriver):
         return n
 
     def _to_status(self, element):
-        if element == None:
+        if element is None:
             return OpsourceStatus()
         s = OpsourceStatus(action=findtext(element, 'action', SERVER_NS),
-                          requestTime=findtext(element, 'requestTime',
-                              SERVER_NS),
-                          userName=findtext(element, 'userName',
-                              SERVER_NS),
-                          numberOfSteps=findtext(element, 'numberOfSteps',
-                              SERVER_NS),
-                          step_name=findtext(element, 'step/name',
-                              SERVER_NS),
-                          step_number=findtext(element, 'step_number',
-                              SERVER_NS),
-                          step_percentComplete=findtext(element,
-                              'step/percentComplete', SERVER_NS),
-                          failureReason=findtext(element, 'failureReason',
-                              SERVER_NS))
+                           requestTime=findtext(element, 'requestTime',
+                                                SERVER_NS),
+                           userName=findtext(element, 'userName',
+                                             SERVER_NS),
+                           numberOfSteps=findtext(element, 'numberOfSteps',
+                                                  SERVER_NS),
+                           step_name=findtext(element, 'step/name',
+                                              SERVER_NS),
+                           step_number=findtext(element, 'step_number',
+                                                SERVER_NS),
+                           step_percentComplete=findtext(
+                               element, 'step/percentComplete', SERVER_NS),
+                           failureReason=findtext(element, 'failureReason',
+                                                  SERVER_NS))
         return s
diff --git libcloud/compute/drivers/rackspace.py libcloud/compute/drivers/rackspace.py
index 733da2b..2f8a329 100644
--- libcloud/compute/drivers/rackspace.py
+++ libcloud/compute/drivers/rackspace.py
@@ -17,7 +17,8 @@ Rackspace driver
 """
 from libcloud.compute.types import Provider, LibcloudError
 from libcloud.compute.base import NodeLocation
-from libcloud.compute.drivers.openstack import OpenStack_1_0_Connection, OpenStack_1_0_NodeDriver, OpenStack_1_0_Response
+from libcloud.compute.drivers.openstack import OpenStack_1_0_Connection,\
+    OpenStack_1_0_NodeDriver, OpenStack_1_0_Response
 
 from libcloud.common.rackspace import (
     AUTH_URL_US, AUTH_URL_UK)
@@ -37,7 +38,7 @@ class RackspaceConnection(OpenStack_1_0_Connection):
         ep = {}
         if '2.0' in self._auth_version:
             ep = self.service_catalog.get_endpoint(service_type='compute',
-                                                     name='cloudServers')
+                                                   name='cloudServers')
         elif ('1.1' in self._auth_version) or ('1.0' in self._auth_version):
             ep = self.service_catalog.get_endpoint(name='cloudServers')
 
@@ -59,6 +60,8 @@ class RackspaceNodeDriver(OpenStack_1_0_NodeDriver):
 
         Locations cannot be set or retrieved via the API, but currently
         there are two locations, DFW and ORD.
+
+        @inherits: L{OpenStack_1_0_NodeDriver.list_locations}
         """
         return [NodeLocation(0, "Rackspace DFW1/ORD1", 'US', self)]
 
diff --git libcloud/compute/drivers/rackspacenova.py libcloud/compute/drivers/rackspacenova.py
index f23b625..acebf87 100644
--- libcloud/compute/drivers/rackspacenova.py
+++ libcloud/compute/drivers/rackspacenova.py
@@ -16,7 +16,8 @@
 Rackspace driver
 """
 from libcloud.compute.providers import Provider
-from libcloud.compute.drivers.openstack import OpenStack_1_1_Connection, OpenStack_1_1_NodeDriver
+from libcloud.compute.drivers.openstack import OpenStack_1_1_Connection,\
+    OpenStack_1_1_NodeDriver
 from libcloud.common.types import LibcloudError
 
 
@@ -26,16 +27,18 @@ class RackspaceNovaConnection(OpenStack_1_1_Connection):
     def get_endpoint(self):
 
         if not self.get_endpoint_args:
-            raise LibcloudError('RackspaceNovaConnection must have get_endpoint_args set')
+            raise LibcloudError(
+                'RackspaceNovaConnection must have get_endpoint_args set')
 
         # Only support auth 2.0_*
         if '2.0' in self._auth_version:
             ep = self.service_catalog.get_endpoint(**self.get_endpoint_args)
         else:
-            raise LibcloudError('Auth version "%s" not supported' % (self._auth_version))
+            raise LibcloudError(
+                'Auth version "%s" not supported' % (self._auth_version))
 
-        # It's possible to authenticate but the service catalog not have the correct
-        # endpoint for this driver, so we throw here.
+        # It's possible to authenticate but the service catalog not have
+        # the correct endpoint for this driver, so we throw here.
         if 'publicURL' in ep:
             return ep['publicURL']
         else:
diff --git libcloud/compute/drivers/rimuhosting.py libcloud/compute/drivers/rimuhosting.py
index f9c8e1b..5705267 100644
--- libcloud/compute/drivers/rimuhosting.py
+++ libcloud/compute/drivers/rimuhosting.py
@@ -29,6 +29,7 @@ from libcloud.compute.base import NodeImage, NodeAuthPassword
 API_CONTEXT = '/r'
 API_HOST = 'rimuhosting.com'
 
+
 class RimuHostingException(Exception):
     """
     Exception class for RimuHosting driver
@@ -40,6 +41,7 @@ class RimuHostingException(Exception):
     def __repr__(self):
         return "<RimuHostingException '%s'>" % (self.args[0])
 
+
 class RimuHostingResponse(JsonResponse):
     def __init__(self, response, connection):
         self.body = response.read()
@@ -69,6 +71,7 @@ class RimuHostingResponse(JsonResponse):
             raise RimuHostingException('Could not parse body: %s'
                                        % (self.body))
 
+
 class RimuHostingConnection(ConnectionKey):
     """
     Connection class for the RimuHosting driver
@@ -81,7 +84,7 @@ class RimuHostingConnection(ConnectionKey):
 
     def __init__(self, key, secure=True):
         # override __init__ so that we can set secure of False for testing
-        ConnectionKey.__init__(self,key,secure)
+        ConnectionKey.__init__(self, key, secure)
 
     def add_default_headers(self, headers):
         # We want JSON back from the server. Could be application/xml
@@ -93,7 +96,8 @@ class RimuHostingConnection(ConnectionKey):
         headers['Authorization'] = 'rimuhosting apikey=%s' % (self.key)
         return headers
 
-    def request(self, action, params=None, data='', headers=None, method='GET'):
+    def request(self, action, params=None, data='', headers=None,
+                method='GET'):
         if not headers:
             headers = {}
         if not params:
@@ -102,6 +106,7 @@ class RimuHostingConnection(ConnectionKey):
         return ConnectionKey.request(self, self.api_context + action,
                                      params, data, headers, method)
 
+
 class RimuHostingNodeDriver(NodeDriver):
     """
     RimuHosting node driver
@@ -127,26 +132,28 @@ class RimuHostingNodeDriver(NodeDriver):
         self.connection.driver = self
         self.connection.connect()
 
-    def _order_uri(self, node,resource):
+    def _order_uri(self, node, resource):
         # Returns the order uri with its resourse appended.
-        return "/orders/%s/%s" % (node.id,resource)
+        return "/orders/%s/%s" % (node.id, resource)
 
     # TODO: Get the node state.
     def _to_node(self, order):
         n = Node(id=order['slug'],
-                name=order['domain_name'],
-                state=NodeState.RUNNING,
-                public_ips=(
-                    [order['allocated_ips']['primary_ip']]
-                    + order['allocated_ips']['secondary_ips']
-                ),
-                private_ips=[],
-                driver=self.connection.driver,
-                extra={'order_oid': order['order_oid'],
-                       'monthly_recurring_fee': order.get('billing_info').get('monthly_recurring_fee')})
+                 name=order['domain_name'],
+                 state=NodeState.RUNNING,
+                 public_ips=(
+                     [order['allocated_ips']['primary_ip']]
+                     + order['allocated_ips']['secondary_ips']
+                 ),
+                 private_ips=[],
+                 driver=self.connection.driver,
+                 extra={
+                     'order_oid': order['order_oid'],
+                     'monthly_recurring_fee': order.get(
+                         'billing_info').get('monthly_recurring_fee')})
         return n
 
-    def _to_size(self,plan):
+    def _to_size(self, plan):
         return NodeSize(
             id=plan['pricing_plan_code'],
             name=plan['pricing_plan_description'],
@@ -157,21 +164,22 @@ class RimuHostingNodeDriver(NodeDriver):
             driver=self.connection.driver
         )
 
-    def _to_image(self,image):
+    def _to_image(self, image):
         return NodeImage(id=image['distro_code'],
-            name=image['distro_description'],
-            driver=self.connection.driver)
+                         name=image['distro_description'],
+                         driver=self.connection.driver)
 
     def list_sizes(self, location=None):
         # Returns a list of sizes (aka plans)
         # Get plans. Note this is really just for libcloud.
         # We are happy with any size.
-        if location == None:
+        if location is None:
             location = ''
         else:
             location = ";dc_location=%s" % (location.id)
 
-        res = self.connection.request('/pricing-plans;server-type=VPS%s' % (location)).object
+        res = self.connection.request(
+            '/pricing-plans;server-type=VPS%s' % (location)).object
         return list(map(lambda x: self._to_size(x), res['pricing_plan_infos']))
 
     def list_nodes(self):
@@ -191,53 +199,57 @@ class RimuHostingNodeDriver(NodeDriver):
         # Reboot
         # PUT the state of RESTARTING to restart a VPS.
         # All data is encoded as JSON
-        data = {'reboot_request':{'running_state':'RESTARTING'}}
-        uri = self._order_uri(node,'vps/running-state')
-        self.connection.request(uri,data=json.dumps(data),method='PUT')
+        data = {'reboot_request': {'running_state': 'RESTARTING'}}
+        uri = self._order_uri(node, 'vps/running-state')
+        self.connection.request(uri, data=json.dumps(data), method='PUT')
         # XXX check that the response was actually successful
         return True
 
     def destroy_node(self, node):
         # Shutdown a VPS.
-        uri = self._order_uri(node,'vps')
-        self.connection.request(uri,method='DELETE')
+        uri = self._order_uri(node, 'vps')
+        self.connection.request(uri, method='DELETE')
         # XXX check that the response was actually successful
         return True
 
     def create_node(self, **kwargs):
         """Creates a RimuHosting instance
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
 
         @keyword    name: Must be a FQDN. e.g example.com.
-        @type       name: C{string}
+        @type       name: C{str}
 
-        @keyword    ex_billing_oid: If not set, a billing method is automatically picked.
-        @type       ex_billing_oid: C{string}
+        @keyword    ex_billing_oid: If not set,
+                                    a billing method is automatically picked.
+        @type       ex_billing_oid: C{str}
 
         @keyword    ex_host_server_oid: The host server to set the VPS up on.
-        @type       ex_host_server_oid: C{string}
+        @type       ex_host_server_oid: C{str}
 
-        @keyword    ex_vps_order_oid_to_clone: Clone another VPS to use as the image for the new VPS.
-        @type       ex_vps_order_oid_to_clone: C{string}
+        @keyword    ex_vps_order_oid_to_clone: Clone another VPS to use as
+                                                the image for the new VPS.
+        @type       ex_vps_order_oid_to_clone: C{str}
 
         @keyword    ex_num_ips: Number of IPs to allocate. Defaults to 1.
         @type       ex_num_ips: C{int}
 
         @keyword    ex_extra_ip_reason: Reason for needing the extra IPs.
-        @type       ex_extra_ip_reason: C{string}
+        @type       ex_extra_ip_reason: C{str}
 
         @keyword    ex_memory_mb: Memory to allocate to the VPS.
         @type       ex_memory_mb: C{int}
 
-        @keyword    ex_disk_space_mb: Diskspace to allocate to the VPS. Defaults to 4096 (4GB).
+        @keyword    ex_disk_space_mb: Diskspace to allocate to the VPS.
+            Defaults to 4096 (4GB).
         @type       ex_disk_space_mb: C{int}
 
-        @keyword    ex_disk_space_2_mb: Secondary disk size allocation. Disabled by default.
+        @keyword    ex_disk_space_2_mb: Secondary disk size allocation.
+                                        Disabled by default.
         @type       ex_disk_space_2_mb: C{int}
 
         @keyword    ex_control_panel: Control panel to install on the VPS.
-        @type       ex_control_panel: C{string}
+        @type       ex_control_panel: C{str}
         """
         # Note we don't do much error checking in this because we
         # expect the API to error out if there is a problem.
@@ -246,14 +258,15 @@ class RimuHostingNodeDriver(NodeDriver):
         size = kwargs['size']
 
         data = {
-            'instantiation_options':{
+            'instantiation_options': {
                 'domain_name': name, 'distro': image.id
             },
             'pricing_plan_code': size.id,
         }
 
         if 'ex_control_panel' in kwargs:
-            data['instantiation_options']['control_panel'] = kwargs['ex_control_panel']
+            data['instantiation_options']['control_panel'] = \
+                kwargs['ex_control_panel']
 
         if 'auth' in kwargs:
             auth = kwargs['auth']
@@ -269,16 +282,19 @@ class RimuHostingNodeDriver(NodeDriver):
             data['host_server_oid'] = kwargs['ex_host_server_oid']
 
         if 'ex_vps_order_oid_to_clone' in kwargs:
-            data['vps_order_oid_to_clone'] = kwargs['ex_vps_order_oid_to_clone']
+            data['vps_order_oid_to_clone'] = \
+                kwargs['ex_vps_order_oid_to_clone']
 
         if 'ex_num_ips' in kwargs and int(kwargs['ex_num_ips']) > 1:
             if not 'ex_extra_ip_reason' in kwargs:
-                raise RimuHostingException('Need an reason for having an extra IP')
+                raise RimuHostingException(
+                    'Need an reason for having an extra IP')
             else:
                 if not 'ip_request' in data:
                     data['ip_request'] = {}
                 data['ip_request']['num_ips'] = int(kwargs['ex_num_ips'])
-                data['ip_request']['extra_ip_reason'] = kwargs['ex_extra_ip_reason']
+                data['ip_request']['extra_ip_reason'] = \
+                    kwargs['ex_extra_ip_reason']
 
         if 'ex_memory_mb' in kwargs:
             if not 'vps_parameters' in data:
@@ -288,20 +304,23 @@ class RimuHostingNodeDriver(NodeDriver):
         if 'ex_disk_space_mb' in kwargs:
             if not 'ex_vps_parameters' in data:
                 data['vps_parameters'] = {}
-            data['vps_parameters']['disk_space_mb'] = kwargs['ex_disk_space_mb']
+            data['vps_parameters']['disk_space_mb'] = \
+                kwargs['ex_disk_space_mb']
 
         if 'ex_disk_space_2_mb' in kwargs:
             if not 'vps_parameters' in data:
                 data['vps_parameters'] = {}
-            data['vps_parameters']['disk_space_2_mb'] = kwargs['ex_disk_space_2_mb']
+            data['vps_parameters']['disk_space_2_mb'] =\
+                kwargs['ex_disk_space_2_mb']
 
         res = self.connection.request(
             '/orders/new-vps',
             method='POST',
-            data=json.dumps({"new-vps":data})
+            data=json.dumps({"new-vps": data})
         ).object
         node = self._to_node(res['about_order'])
-        node.extra['password'] = res['new_order_request']['instantiation_options']['password']
+        node.extra['password'] = \
+            res['new_order_request']['instantiation_options']['password']
         return node
 
     def list_locations(self):
diff --git libcloud/compute/drivers/slicehost.py libcloud/compute/drivers/slicehost.py
index cdf8cf5..0a42a20 100644
--- libcloud/compute/drivers/slicehost.py
+++ libcloud/compute/drivers/slicehost.py
@@ -28,6 +28,7 @@ from libcloud.compute.types import NodeState, Provider, InvalidCredsError
 from libcloud.compute.base import NodeSize, NodeDriver, NodeImage, NodeLocation
 from libcloud.compute.base import Node, is_private_subnet
 
+
 class SlicehostResponse(XmlResponse):
     def parse_error(self):
         if self.status == 401:
@@ -35,9 +36,9 @@ class SlicehostResponse(XmlResponse):
 
         body = super(SlicehostResponse, self).parse_body()
         try:
-            return "; ".join([ err.text
-                               for err in
-                               body.findall('error') ])
+            return "; ".join([err.text
+                              for err in
+                              body.findall('error')])
         except ExpatError:
             return self.body
 
@@ -51,9 +52,8 @@ class SlicehostConnection(ConnectionKey):
     responseCls = SlicehostResponse
 
     def add_default_headers(self, headers):
-        headers['Authorization'] = ('Basic %s'
-                              % (base64.b64encode(b('%s:' %
-                                  self.key))).decode('utf-8'))
+        headers['Authorization'] = ('Basic %s' % (base64.b64encode(
+            b('%s:' % self.key))).decode('utf-8'))
         return headers
 
 
@@ -70,11 +70,11 @@ class SlicehostNodeDriver(NodeDriver):
 
     features = {"create_node": ["generates_password"]}
 
-    NODE_STATE_MAP = { 'active': NodeState.RUNNING,
-                       'build': NodeState.PENDING,
-                       'reboot': NodeState.REBOOTING,
-                       'hard_reboot': NodeState.REBOOTING,
-                       'terminated': NodeState.TERMINATED }
+    NODE_STATE_MAP = {'active': NodeState.RUNNING,
+                      'build': NodeState.PENDING,
+                      'reboot': NodeState.REBOOTING,
+                      'hard_reboot': NodeState.REBOOTING,
+                      'terminated': NodeState.TERMINATED}
 
     def list_nodes(self):
         return self._to_nodes(self.connection.request('/slices.xml').object)
@@ -149,14 +149,13 @@ class SlicehostNodeDriver(NodeDriver):
 
     def _to_nodes(self, object):
         if object.tag == 'slice':
-            return [ self._to_node(object) ]
+            return [self._to_node(object)]
         node_elements = object.findall('slice')
-        return [ self._to_node(el) for el in node_elements ]
+        return [self._to_node(el) for el in node_elements]
 
     def _to_node(self, element):
-
-        attrs = [ 'name', 'image-id', 'progress', 'id', 'bw-out', 'bw-in',
-                  'flavor-id', 'status', 'ip-address', 'root-password' ]
+        attrs = ['name', 'image-id', 'progress', 'id', 'bw-out', 'bw-in',
+                 'flavor-id', 'status', 'ip-address', 'root-password']
 
         node_attrs = {}
         for attr in attrs:
@@ -209,9 +208,9 @@ class SlicehostNodeDriver(NodeDriver):
 
     def _to_sizes(self, object):
         if object.tag == 'flavor':
-            return [ self._to_size(object) ]
+            return [self._to_size(object)]
         elements = object.findall('flavor')
-        return [ self._to_size(el) for el in elements ]
+        return [self._to_size(el) for el in elements]
 
     def _to_size(self, element):
         s = NodeSize(id=int(element.findtext('id')),
@@ -219,18 +218,18 @@ class SlicehostNodeDriver(NodeDriver):
                      ram=int(element.findtext('ram')),
                      disk=None,  # XXX: needs hardcode
                      bandwidth=None,  # XXX: needs hardcode
-                     price=float(element.findtext('price'))/(100*24*30),
+                     price=float(element.findtext('price')) / (100 * 24 * 30),
                      driver=self.connection.driver)
         return s
 
     def _to_images(self, object):
         if object.tag == 'image':
-            return [ self._to_image(object) ]
+            return [self._to_image(object)]
         elements = object.findall('image')
-        return [ self._to_image(el) for el in elements ]
+        return [self._to_image(el) for el in elements]
 
     def _to_image(self, element):
         i = NodeImage(id=int(element.findtext('id')),
-                     name=str(element.findtext('name')),
-                     driver=self.connection.driver)
+                      name=str(element.findtext('name')),
+                      driver=self.connection.driver)
         return i
diff --git libcloud/compute/drivers/softlayer.py libcloud/compute/drivers/softlayer.py
index 321d506..24e99eb 100644
--- libcloud/compute/drivers/softlayer.py
+++ libcloud/compute/drivers/softlayer.py
@@ -25,7 +25,8 @@ from libcloud.utils.py3 import xmlrpclib
 
 from libcloud.common.types import InvalidCredsError, LibcloudError
 from libcloud.compute.types import Provider, NodeState
-from libcloud.compute.base import NodeDriver, Node, NodeLocation, NodeSize, NodeImage
+from libcloud.compute.base import NodeDriver, Node, NodeLocation, NodeSize, \
+    NodeImage
 
 DATACENTERS = {
     'sea01': {'country': 'US'},
@@ -46,21 +47,32 @@ SL_IMAGES = [
     {'id': 1685, 'name': 'CentOS 5 - Minimal Install (64 bit)'},
     {'id': 1686, 'name': 'CentOS 5 - LAMP Install (32 bit)'},
     {'id': 1687, 'name': 'CentOS 5 - LAMP Install (64 bit)'},
-    {'id': 1688, 'name': 'Red Hat Enterprise Linux 5 - Minimal Install (32 bit)'},
-    {'id': 1689, 'name': 'Red Hat Enterprise Linux 5 - Minimal Install (64 bit)'},
+    {'id': 1688,
+     'name': 'Red Hat Enterprise Linux 5 - Minimal Install (32 bit)'},
+    {'id': 1689,
+     'name': 'Red Hat Enterprise Linux 5 - Minimal Install (64 bit)'},
     {'id': 1690, 'name': 'Red Hat Enterprise Linux 5 - LAMP Install (32 bit)'},
     {'id': 1691, 'name': 'Red Hat Enterprise Linux 5 - LAMP Install (64 bit)'},
-    {'id': 1692, 'name': 'Ubuntu Linux 8 LTS Hardy Heron - Minimal Install (32 bit)'},
-    {'id': 1693, 'name': 'Ubuntu Linux 8 LTS Hardy Heron - Minimal Install (64 bit)'},
-    {'id': 1694, 'name': 'Ubuntu Linux 8 LTS Hardy Heron - LAMP Install (32 bit)'},
-    {'id': 1695, 'name': 'Ubuntu Linux 8 LTS Hardy Heron - LAMP Install (64 bit)'},
-    {'id': 1696, 'name': 'Debian GNU/Linux 5.0 Lenny/Stable - Minimal Install (32 bit)'},
-    {'id': 1697, 'name': 'Debian GNU/Linux 5.0 Lenny/Stable - Minimal Install (64 bit)'},
-    {'id': 1698, 'name': 'Debian GNU/Linux 5.0 Lenny/Stable - LAMP Install (32 bit)'},
-    {'id': 1699, 'name': 'Debian GNU/Linux 5.0 Lenny/Stable - LAMP Install (64 bit)'},
+    {'id': 1692,
+     'name': 'Ubuntu Linux 8 LTS Hardy Heron - Minimal Install (32 bit)'},
+    {'id': 1693,
+     'name': 'Ubuntu Linux 8 LTS Hardy Heron - Minimal Install (64 bit)'},
+    {'id': 1694,
+     'name': 'Ubuntu Linux 8 LTS Hardy Heron - LAMP Install (32 bit)'},
+    {'id': 1695,
+     'name': 'Ubuntu Linux 8 LTS Hardy Heron - LAMP Install (64 bit)'},
+    {'id': 1696,
+     'name': 'Debian GNU/Linux 5.0 Lenny/Stable - Minimal Install (32 bit)'},
+    {'id': 1697,
+     'name': 'Debian GNU/Linux 5.0 Lenny/Stable - Minimal Install (64 bit)'},
+    {'id': 1698,
+     'name': 'Debian GNU/Linux 5.0 Lenny/Stable - LAMP Install (32 bit)'},
+    {'id': 1699,
+     'name': 'Debian GNU/Linux 5.0 Lenny/Stable - LAMP Install (64 bit)'},
     {'id': 1700, 'name': 'Windows Server 2003 Standard SP2 with R2 (32 bit)'},
     {'id': 1701, 'name': 'Windows Server 2003 Standard SP2 with R2 (64 bit)'},
-    {'id': 1703, 'name': 'Windows Server 2003 Enterprise SP2 with R2 (64 bit)'},
+    {'id': 1703,
+     'name': 'Windows Server 2003 Enterprise SP2 with R2 (64 bit)'},
     {'id': 1705, 'name': 'Windows Server 2008 Standard Edition (64bit)'},
     {'id': 1715, 'name': 'Windows Server 2003 Datacenter SP2 (64 bit)'},
     {'id': 1716, 'name': 'Windows Server 2003 Datacenter SP2 (32 bit)'},
@@ -96,7 +108,7 @@ SL_TEMPLATES = {
             'disk': 100,
             'bandwidth': None
         },
-        'prices':[
+        'prices': [
             {'id': 1644},  # 1 GB
             {'id': 1639},  # 100 GB (SAN)
             {'id': 1963},  # Private 2 x 2.0 GHz Cores
@@ -136,18 +148,22 @@ SL_TEMPLATES = {
     }
 }
 
+
 class SoftLayerException(LibcloudError):
     """
     Exception class for SoftLayer driver
     """
     pass
 
+
 class SoftLayerSafeTransport(xmlrpclib.SafeTransport):
     pass
 
+
 class SoftLayerTransport(xmlrpclib.Transport):
     pass
 
+
 class SoftLayerProxy(xmlrpclib.ServerProxy):
     transportCls = (SoftLayerTransport, SoftLayerSafeTransport)
     API_PREFIX = 'https://api.softlayer.com/xmlrpc/v3/'
@@ -165,6 +181,7 @@ class SoftLayerProxy(xmlrpclib.ServerProxy):
             verbose=verbose
         )
 
+
 class SoftLayerConnection(object):
     """
     Connection class for the SoftLayer driver
@@ -184,7 +201,8 @@ class SoftLayerConnection(object):
         headers = {}
         headers.update(self._get_auth_headers())
         headers.update(self._get_init_params(service, kwargs.get('id')))
-        headers.update(self._get_object_mask(service, kwargs.get('object_mask')))
+        headers.update(
+            self._get_object_mask(service, kwargs.get('object_mask')))
         params = [{'headers': headers}] + list(args)
 
         try:
@@ -196,10 +214,9 @@ class SoftLayerConnection(object):
             raise SoftLayerException(e)
 
     def _user_agent(self):
-        return 'libcloud/%s (%s)%s' % (
-                libcloud.__version__,
-                self.driver.name,
-                "".join([" (%s)" % x for x in self.ua]))
+        return 'libcloud/%s (%s)%s' % (libcloud.__version__,
+                                       self.driver.name,
+                                       "".join([" (%s)" % x for x in self.ua]))
 
     def user_agent_append(self, s):
         self.ua.append(s)
@@ -228,6 +245,7 @@ class SoftLayerConnection(object):
         else:
             return {}
 
+
 class SoftLayerNodeDriver(NodeDriver):
     """
     SoftLayer node driver
@@ -236,7 +254,8 @@ class SoftLayerNodeDriver(NodeDriver):
         - password: root password
         - hourlyRecurringFee: hourly price (if applicable)
         - recurringFee      : flat rate    (if applicable)
-        - recurringMonths   : The number of months in which the recurringFee will be incurred.
+        - recurringMonths   : The number of months in which the recurringFee
+         will be incurred.
     """
     connectionCls = SoftLayerConnection
     name = 'SoftLayer'
@@ -256,11 +275,13 @@ class SoftLayerNodeDriver(NodeDriver):
 
     def _to_node(self, host):
         try:
-            password = host['softwareComponents'][0]['passwords'][0]['password']
+            password = \
+                host['softwareComponents'][0]['passwords'][0]['password']
         except (IndexError, KeyError):
             password = None
 
-        hourlyRecurringFee = host.get('billingItem', {}).get('hourlyRecurringFee', 0)
+        hourlyRecurringFee = host.get('billingItem', {}).get(
+            'hourlyRecurringFee', 0)
         recurringFee = host.get('billingItem', {}).get('recurringFee', 0)
         recurringMonths = host.get('billingItem', {}).get('recurringMonths', 0)
 
@@ -305,16 +326,14 @@ class SoftLayerNodeDriver(NodeDriver):
     def _get_order_information(self, order_id, timeout=1200, check_interval=5):
         mask = {
             'orderTopLevelItems': {
-                'billingItem':  {
+                'billingItem': {
                     'resource': {
-                        'softwareComponents': {
-                            'passwords': ''
-                        },
+                        'softwareComponents': {'passwords': ''},
                         'powerState': '',
                     }
                 },
             }
-         }
+        }
 
         for i in range(0, timeout, check_interval):
             try:
@@ -338,20 +357,21 @@ class SoftLayerNodeDriver(NodeDriver):
     def create_node(self, **kwargs):
         """Create a new SoftLayer node
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
+
         @keyword    ex_domain: e.g. libcloud.org
-        @type       ex_domain: C{string}
+        @type       ex_domain: C{str}
         """
         name = kwargs['name']
         image = kwargs['image']
         size = kwargs['size']
         domain = kwargs.get('ex_domain')
         location = kwargs['location']
-        if domain == None:
+        if domain is None:
             if name.find(".") != -1:
-                domain = name[name.find('.')+1:]
+                domain = name[name.find('.') + 1:]
 
-        if domain == None:
+        if domain is None:
             # TODO: domain is a required argument for the Sofylayer API, but it
             # it shouldn't be.
             domain = "exmaple.com"
@@ -420,16 +440,15 @@ class SoftLayerNodeDriver(NodeDriver):
             "getDatacenters"
         )
 
-        # checking "in DATACENTERS", because some of the locations returned by getDatacenters are not useable.
+        # checking "in DATACENTERS", because some of the locations returned
+        # by getDatacenters are not useable.
         return [self._to_loc(l) for l in res if l['name'] in DATACENTERS]
 
     def list_nodes(self):
         mask = {
             'virtualGuests': {
                 'powerState': '',
-                'softwareComponents': {
-                    'passwords': ''
-                },
+                'softwareComponents': {'passwords': ''},
                 'billingItem': '',
             },
         }
diff --git libcloud/compute/drivers/vcl.py libcloud/compute/drivers/vcl.py
index 3276dfd..b6f0a90 100644
--- libcloud/compute/drivers/vcl.py
+++ libcloud/compute/drivers/vcl.py
@@ -105,8 +105,8 @@ class VCLNodeDriver(NodeDriver):
     """
     VCL node driver
 
-    @keyword:   host: The VCL host to which you make requests(required)
-    @type:      host: C{string}
+    @keyword   host: The VCL host to which you make requests(required)
+    @type      host: C{str}
     """
 
     NODE_STATE_MAP = {
@@ -153,14 +153,18 @@ class VCLNodeDriver(NodeDriver):
 
     def create_node(self, **kwargs):
         """Create a new VCL reservation
+        size and name ignored, image is the id from list_image
+
+        @inherits: L{NodeDriver.create_node}
+
+        @keyword    image: image is the id from list_image
+        @type       image: C{str}
 
-        See L{NodeDriver.create_node} for more keyword args.
-        size and name ignored, image is the id from list_images
         @keyword    start: start time as unix timestamp
-        @type       start: C{string}
+        @type       start: C{str}
 
         @keyword    length: length of time in minutes
-        @type       length: C{string}
+        @type       length: C{str}
         """
 
         image = kwargs["image"]
@@ -188,6 +192,11 @@ class VCLNodeDriver(NodeDriver):
         """
         End VCL reservation for the node passed in.
         Throws error if request fails.
+
+        @param  node: The node to be destroyed
+        @type   node: L{Node}
+
+        @rtype: C{bool}
         """
         try:
             self._vcl_request(
@@ -208,6 +217,8 @@ class VCLNodeDriver(NodeDriver):
     def list_images(self, location=None):
         """
         List images available to the user provided credentials
+
+        @inherits: L{NodeDriver.list_images}
         """
         res = self.connection.request(
             "XMLRPCgetImages"
@@ -218,6 +229,8 @@ class VCLNodeDriver(NodeDriver):
         """
         VCL does not choosing sizes for node creation.
         Size of images are statically set by administrators.
+
+        @inherits: L{NodeDriver.list_sizes}
         """
         return [NodeSize(
             't1.micro',
@@ -268,6 +281,14 @@ class VCLNodeDriver(NodeDriver):
         ) for h in res]
 
     def list_nodes(self, ipaddr):
+        """
+        List nodes
+
+        @param  ipaddr: IP address which should be used
+        @type   ipaddr: C{str}
+
+        @rtype: C{list} of L{Node}
+        """
         res = self._vcl_request(
             "XMLRPCgetRequestIds"
         )
@@ -277,13 +298,14 @@ class VCLNodeDriver(NodeDriver):
         """
         Update the remote ip accessing the node.
 
-        @param: node: the reservation node to update
-        @type:  node: Node object
+        @param node: the reservation node to update
+        @type  node: L{Node}
 
-        @param: ipaddr: the ipaddr used to access the node
-        @type:  ipaddr: C{string}
+        @param ipaddr: the ipaddr used to access the node
+        @type  ipaddr: C{str}
 
         @return: node with updated information
+        @rtype: L{Node}
         """
         return self._to_status(node.id, node.image, ipaddr)
 
@@ -291,13 +313,14 @@ class VCLNodeDriver(NodeDriver):
         """
         Time in minutes to extend the requested node's reservation time
 
-        @param: node: the reservation node to update
-        @type:  node: Node object
+        @param node: the reservation node to update
+        @type  node: L{Node}
 
-        @param: minutes: the number of mintes to update
-        @type:  minutes: C{string}
+        @param minutes: the number of mintes to update
+        @type  minutes: C{str}
 
         @return: true on success, throws error on failure
+        @rtype: C{bool}
         """
         return self._vcl_request(
             "XMLRPCextendRequest",
@@ -309,10 +332,11 @@ class VCLNodeDriver(NodeDriver):
         """
         Get the ending time of the node reservation.
 
-        @param: node: the reservation node to update
-        @type:  node: Node object
+        @param node: the reservation node to update
+        @type  node: L{Node}
 
         @return: unix timestamp
+        @rtype: C{int}
         """
         res = self._vcl_request(
             "XMLRPCgetRequestIds"
diff --git libcloud/compute/drivers/vcloud.py libcloud/compute/drivers/vcloud.py
index 9f358b4..a58ee91 100644
--- libcloud/compute/drivers/vcloud.py
+++ libcloud/compute/drivers/vcloud.py
@@ -73,6 +73,7 @@ def get_url_path(url):
 
 class Vdc:
     """Virtual datacenter (vDC) representation"""
+
     def __init__(self, id, name, driver):
         self.id = id
         self.name = name
@@ -84,7 +85,6 @@ class Vdc:
 
 
 class InstantiateVAppXML(object):
-
     def __init__(self, name, template, net_href, cpus, memory,
                  password=None, row=None, group=None):
         self.name = name
@@ -203,7 +203,8 @@ class InstantiateVAppXML(object):
         elm = ET.SubElement(
             parent,
             'InstanceID',
-            {'xmlns': 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData'}
+            {'xmlns': 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/'
+                      'CIM_ResourceAllocationSettingData'}
         )
         elm.text = id
         return elm
@@ -212,17 +213,19 @@ class InstantiateVAppXML(object):
         elm = ET.SubElement(
             parent,
             'ResourceType',
-            {'xmlns': 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData'}
+            {'xmlns': 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/'
+                      'CIM_ResourceAllocationSettingData'}
         )
         elm.text = type
         return elm
 
     def _add_virtual_quantity(self, parent, amount):
         elm = ET.SubElement(
-             parent,
-             'VirtualQuantity',
-             {'xmlns': 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData'}
-         )
+            parent,
+            'VirtualQuantity',
+            {'xmlns': 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/'
+                      'CIM_ResourceAllocationSettingData'}
+        )
         elm.text = amount
         return elm
 
@@ -235,7 +238,6 @@ class InstantiateVAppXML(object):
 
 
 class VCloudResponse(XmlResponse):
-
     def success(self):
         return self.status in (httplib.OK, httplib.CREATED,
                                httplib.NO_CONTENT, httplib.ACCEPTED)
@@ -261,10 +263,8 @@ class VCloudConnection(ConnectionUserAndKey):
     def _get_auth_headers(self):
         """Some providers need different headers than others"""
         return {
-            'Authorization':
-                "Basic %s"
-                % base64.b64encode(b('%s:%s' % (self.user_id,
-                    self.key))).decode('utf-8'),
+            'Authorization': "Basic %s" % base64.b64encode(
+                b('%s:%s' % (self.user_id, self.key))).decode('utf-8'),
             'Content-Length': 0,
             'Accept': 'application/*+xml'
         }
@@ -330,15 +330,16 @@ class VCloudNodeDriver(NodeDriver):
     def vdcs(self):
         """
         vCloud virtual data centers (vDCs).
-        @return: C{list} of L{Vdc} objects
+
+        @return: list of vDC objects
+        @rtype: C{list} of L{VCloudVDC}
         """
         if not self._vdcs:
             self.connection.check_org()  # make sure the org is set.  # pylint: disable-msg=E1101
             res = self.connection.request(self.org)
             self._vdcs = [
                 Vdc(i.get('href'), i.get('name'), self)
-                for i
-                in res.object.findall(fixxpath(res.object, "Link"))
+                for i in res.object.findall(fixxpath(res.object, "Link"))
                 if i.get('type') == 'application/vnd.vmware.vcloud.vdc+xml'
             ]
         return self._vdcs
@@ -353,7 +354,8 @@ class VCloudNodeDriver(NodeDriver):
                 if v.name == vdc_name:
                     vdc = v
             if vdc is None:
-                raise ValueError('%s virtual data centre could not be found', vdc_name)
+                raise ValueError('%s virtual data centre could not be found',
+                                 vdc_name)
         return vdc
 
     @property
@@ -365,6 +367,7 @@ class VCloudNodeDriver(NodeDriver):
                 [network
                  for network in res.findall(
                      fixxpath(res, 'AvailableNetworks/Network')
+
                  )]
             )
 
@@ -384,12 +387,14 @@ class VCloudNodeDriver(NodeDriver):
 
         # Following code to find private IPs works for Terremark
         connections = elm.findall('%s/%s' % (
-                '{http://schemas.dmtf.org/ovf/envelope/1}NetworkConnectionSection',
-                fixxpath(elm, 'NetworkConnection')
-            )
+            '{http://schemas.dmtf.org/ovf/envelope/1}NetworkConnectionSection',
+            fixxpath(elm, 'NetworkConnection'))
         )
         if not connections:
-            connections = elm.findall(fixxpath(elm, 'Children/Vm/NetworkConnectionSection/NetworkConnection'))
+            connections = elm.findall(
+                fixxpath(
+                    elm,
+                    'Children/Vm/NetworkConnectionSection/NetworkConnection'))
 
         for connection in connections:
             ips = [ip.text
@@ -429,7 +434,7 @@ class VCloudNodeDriver(NodeDriver):
                 # Get error reason from the response body
                 error_elem = res.object.find(fixxpath(res.object, 'Error'))
                 error_msg = "Unknown error"
-                if error_elem != None:
+                if error_elem is not None:
                     error_msg = error_elem.get('message')
                 raise Exception("Error status returned by task %s.: %s"
                                 % (task_href, error_msg))
@@ -529,8 +534,7 @@ class VCloudNodeDriver(NodeDriver):
         res = self.connection.request(
             get_url_path(catalog),
             headers={
-                'Content-Type':
-                    'application/vnd.vmware.vcloud.catalog+xml'
+                'Content-Type': 'application/vnd.vmware.vcloud.catalog+xml'
             }
         ).object
 
@@ -538,7 +542,7 @@ class VCloudNodeDriver(NodeDriver):
         cat_item_hrefs = [i.get('href')
                           for i in cat_items
                           if i.get('type') ==
-                              'application/vnd.vmware.vcloud.catalogItem+xml']
+                             'application/vnd.vmware.vcloud.catalogItem+xml']
 
         return cat_item_hrefs
 
@@ -573,14 +577,15 @@ class VCloudNodeDriver(NodeDriver):
                 res = self._get_catalogitem(cat_item)
                 res_ents = res.findall(fixxpath(res, 'Entity'))
                 images += [
-                    self._to_image(i)
-                    for i in res_ents
-                    if i.get('type') ==
-                        'application/vnd.vmware.vcloud.vAppTemplate+xml'
+                self._to_image(i)
+                for i in res_ents
+                if i.get('type') ==
+                   'application/vnd.vmware.vcloud.vAppTemplate+xml'
                 ]
 
         def idfun(image):
             return image.id
+
         return self._uniquer(images, idfun)
 
     def _uniquer(self, seq, idfun=None):
@@ -601,23 +606,24 @@ class VCloudNodeDriver(NodeDriver):
         """Creates and returns node.
 
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
 
-        Non-standard optional keyword arguments:
-        @keyword    ex_network: link to a "Network" e.g., "https://services.vcloudexpress.terremark.com/api/v0.8/network/7"
-        @type       ex_network: C{string}
+        @keyword    ex_network: link to a "Network" e.g.,
+          "https://services.vcloudexpress.terremark.com/api/v0.8/network/7"
+        @type       ex_network: C{str}
 
-        @keyword    ex_vdc: Name of organisation's virtual data center where vApp VMs will be deployed.
-        @type       ex_vdc: C{string}
+        @keyword    ex_vdc: Name of organisation's virtual data
+            center where vApp VMs will be deployed.
+        @type       ex_vdc: C{str}
 
         @keyword    ex_cpus: number of virtual cpus (limit depends on provider)
         @type       ex_cpus: C{int}
 
-        @keyword    row: ????
-        @type       row: C{????}
+        @keyword    ex_row: ????
+        @type       ex_row: C{str}
 
-        @keyword    group: ????
-        @type       group: C{????}
+        @keyword    ex_group: ????
+        @type       ex_group: C{str}
         """
         name = kwargs['name']
         image = kwargs['image']
@@ -654,10 +660,7 @@ class VCloudNodeDriver(NodeDriver):
             '%s/action/instantiateVAppTemplate' % get_url_path(vdc.id),
             data=instantiate_xml.tostring(),
             method='POST',
-            headers={
-                'Content-Type':
-                    'application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml'
-            }
+            headers={'Content-Type': 'application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml'}
         )
         vapp_path = get_url_path(res.object.get('href'))
 
@@ -689,8 +692,8 @@ class HostingComConnection(VCloudConnection):
     def _get_auth_headers(self):
         """hosting.com doesn't follow the standard vCloud authentication API"""
         return {
-            'Authentication':
-                base64.b64encode(b('%s:%s' % (self.user_id, self.key))),
+            'Authentication': base64.b64encode(b('%s:%s' % (self.user_id,
+                                                            self.key))),
             'Content-Length': 0
         }
 
@@ -722,7 +725,6 @@ class TerremarkDriver(VCloudNodeDriver):
 
 
 class VCloud_1_5_Connection(VCloudConnection):
-
     def _get_auth_token(self):
         if not self.token:
             # Log In
@@ -763,7 +765,8 @@ class VCloud_1_5_Connection(VCloudConnection):
 
 
 class Instantiate_1_5_VAppXML(object):
-    def __init__(self, name, template, network, vm_network=None, vm_fence=None):
+    def __init__(self, name, template, network, vm_network=None,
+                 vm_fence=None):
         self.name = name
         self.template = template
         self.network = network
@@ -780,7 +783,11 @@ class Instantiate_1_5_VAppXML(object):
         if self.network:
             instantionation_params = ET.SubElement(self.root, "InstantiationParams")
             network_config_section = ET.SubElement(instantionation_params, "NetworkConfigSection")
-            ET.SubElement(network_config_section, "Info", {'xmlns': "http://schemas.dmtf.org/ovf/envelope/1"})
+            ET.SubElement(
+                network_config_section,
+                "Info",
+                {'xmlns': "http://schemas.dmtf.org/ovf/envelope/1"}
+            )
             network_config = ET.SubElement(network_config_section, "NetworkConfig")
             self._add_network_association(network_config)
 
@@ -789,19 +796,19 @@ class Instantiate_1_5_VAppXML(object):
     def _make_instantiation_root(self):
         return ET.Element(
             "InstantiateVAppTemplateParams",
-                {'name': self.name,
-                 'deploy': 'false',
-                 'powerOn': 'false',
-                 'xml:lang': 'en',
-                 'xmlns': "http://www.vmware.com/vcloud/v1.5",
-                 'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"}
+            {'name': self.name,
+             'deploy': 'false',
+             'powerOn': 'false',
+             'xml:lang': 'en',
+             'xmlns': "http://www.vmware.com/vcloud/v1.5",
+             'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"}
         )
 
     def _add_vapp_template(self, parent):
         return ET.SubElement(
             parent,
             "Source",
-                {'href': self.template}
+            {'href': self.template}
         )
 
     def _add_network_association(self, parent):
@@ -821,7 +828,6 @@ class Instantiate_1_5_VAppXML(object):
 
 
 class VCloud_1_5_NodeDriver(VCloudNodeDriver):
-
     connectionCls = VCloud_1_5_Connection
 
     # Based on http://pubs.vmware.com/vcloud-api-1-5/api_prog/GUID-843BE3AD-5EF6-4442-B864-BCAE44A51867.html
@@ -847,12 +853,13 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         instance.
 
         @param node_name: The name of the node to search for
-        @type node_name: C{string}
+        @type node_name: C{str}
 
         @param vdcs: None, vDC or a list of vDCs to search in. If None all vDCs will be searched.
-        @type node_name: L{Vdc}
+        @type node_name: L{VCloudVDC}
 
-        @return: C{Node} node instance or None if not found
+        @return: node instance or None if not found
+        @rtype: L{Node} or C{None}
         """
         if not vdcs:
             vdcs = self.vdcs
@@ -893,10 +900,10 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         """
         Deploys existing node. Equal to vApp "start" operation.
 
-        @param node: The node to be deployed
-        @type node: L{Node}
+        @param  node: The node to be deployed
+        @type   node: L{Node}
 
-        @return: C{Node} deployed node
+        @rtype: L{Node}
         """
         deploy_xml = ET.Element('DeployVAppParams', {'powerOn': 'true',
                                                      'xmlns': 'http://www.vmware.com/vcloud/v1.5'})
@@ -914,31 +921,33 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         """
         Undeploys existing node. Equal to vApp "stop" operation.
 
-        @param node: The node to be deployed
-        @type node: L{Node}
+        @param  node: The node to be deployed
+        @type   node: L{Node}
 
-        @return: C{Node} undeployed node instance
+        @rtype: L{Node}
         """
         undeploy_xml = ET.Element('UndeployVAppParams', {'xmlns': 'http://www.vmware.com/vcloud/v1.5'})
         undeploy_power_action_xml = ET.SubElement(undeploy_xml, 'UndeployPowerAction')
         undeploy_power_action_xml.text = 'shutdown'
 
         try:
-            res = self.connection.request('%s/action/undeploy' % get_url_path(node.id),
-                                          data=ET.tostring(undeploy_xml),
-                                          method='POST',
-                                          headers={
-                                              'Content-Type': 'application/vnd.vmware.vcloud.undeployVAppParams+xml'
-                                          })
+            res = self.connection.request(
+                '%s/action/undeploy' % get_url_path(node.id),
+                data=ET.tostring(undeploy_xml),
+                method='POST',
+                headers={
+                    'Content-Type': 'application/vnd.vmware.vcloud.undeployVAppParams+xml'
+                })
             self._wait_for_task_completion(res.object.get('href'))
         except Exception:
             undeploy_power_action_xml.text = 'powerOff'
-            res = self.connection.request('%s/action/undeploy' % get_url_path(node.id),
-                                          data=ET.tostring(undeploy_xml),
-                                          method='POST',
-                                          headers={
-                                              'Content-Type': 'application/vnd.vmware.vcloud.undeployVAppParams+xml'
-                                          })
+            res = self.connection.request(
+                '%s/action/undeploy' % get_url_path(node.id),
+                data=ET.tostring(undeploy_xml),
+                method='POST',
+                headers={
+                    'Content-Type': 'application/vnd.vmware.vcloud.undeployVAppParams+xml'
+                })
             self._wait_for_task_completion(res.object.get('href'))
 
         res = self.connection.request(get_url_path(node.id))
@@ -951,43 +960,42 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
                              resource busy error is raised.
 
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
 
         @keyword    image:  OS Image to boot on node. (required). Can be a NodeImage or existing Node that will be
                             cloned.
         @type       image:  L{NodeImage} or L{Node}
 
-        Non-standard optional keyword arguments:
         @keyword    ex_network: Organisation's network name for attaching vApp VMs to.
-        @type       ex_network: C{string}
+        @type       ex_network: C{str}
 
         @keyword    ex_vdc: Name of organisation's virtual data center where vApp VMs will be deployed.
-        @type       ex_vdc: C{string}
+        @type       ex_vdc: C{str}
 
         @keyword    ex_vm_names: list of names to be used as a VM and computer name. The name must be max. 15 characters
                                  long and follow the host name requirements.
-        @type       ex_vm_names: C{list} of L{string}
+        @type       ex_vm_names: C{list} of C{str}
 
         @keyword    ex_vm_cpu: number of virtual CPUs/cores to allocate for each vApp VM.
-        @type       ex_vm_cpu: C{number}
+        @type       ex_vm_cpu: C{int}
 
         @keyword    ex_vm_memory: amount of memory in MB to allocate for each vApp VM.
-        @type       ex_vm_memory: C{number}
+        @type       ex_vm_memory: C{int}
 
         @keyword    ex_vm_script: full path to file containing guest customisation script for each vApp VM.
                                   Useful for creating users & pushing out public SSH keys etc.
-        @type       ex_vm_script: C{string}
+        @type       ex_vm_script: C{str}
 
         @keyword    ex_vm_network: Override default vApp VM network name. Useful for when you've imported an OVF
                                    originating from outside of the vCloud.
-        @type       ex_vm_network: C{string}
+        @type       ex_vm_network: C{str}
 
         @keyword    ex_vm_fence: Fence mode for connecting the vApp VM network (ex_vm_network) to the parent
                                  organisation network (ex_network).
-        @type       ex_vm_fence: C{string}
+        @type       ex_vm_fence: C{str}
 
         @keyword    ex_vm_ipmode: IP address allocation mode for all vApp VM network connections.
-        @type       ex_vm_ipmode: C{string}
+        @type       ex_vm_ipmode: C{str}
 
         @keyword    ex_deploy: set to False if the node shouldn't be deployed (started) after creation
         @type       ex_deploy: C{bool}
@@ -1015,7 +1023,8 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         # Some providers don't require a network link
         if ex_network:
             network_href = self._get_network_href(ex_network)
-            network_elem = self.connection.request(get_url_path(network_href)).object
+            network_elem = self.connection.request(
+                get_url_path(network_href)).object
         else:
             network_elem = None
 
@@ -1024,8 +1033,10 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         if self._is_node(image):
             vapp_name, vapp_href = self._clone_node(name, image, vdc)
         else:
-            vapp_name, vapp_href = self._instantiate_node(name, image, network_elem,
-                                                          vdc, ex_vm_network, ex_vm_fence)
+            vapp_name, vapp_href = self._instantiate_node(name, image,
+                                                          network_elem,
+                                                          vdc, ex_vm_network,
+                                                          ex_vm_fence)
 
         self._change_vm_names(vapp_href, ex_vm_names)
         self._change_vm_cpu(vapp_href, ex_vm_cpu)
@@ -1039,8 +1050,9 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
             retry = 3
             while True:
                 try:
-                    res = self.connection.request('%s/power/action/powerOn' % get_url_path(vapp_href),
-                                                  method='POST')
+                    res = self.connection.request(
+                        '%s/power/action/powerOn' % get_url_path(vapp_href),
+                        method='POST')
                     self._wait_for_task_completion(res.object.get('href'))
                     break
                 except Exception:
@@ -1053,7 +1065,8 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         node = self._to_node(res.object)
         return node
 
-    def _instantiate_node(self, name, image, network_elem, vdc, vm_network, vm_fence):
+    def _instantiate_node(self, name, image, network_elem, vdc, vm_network,
+                          vm_fence):
         instantiate_xml = Instantiate_1_5_VAppXML(
             name=name,
             template=image.id,
@@ -1067,36 +1080,32 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
             '%s/action/instantiateVAppTemplate' % get_url_path(vdc.id),
             data=instantiate_xml.tostring(),
             method='POST',
-            headers={
-                'Content-Type':
-                    'application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml'
-            }
+            headers={'Content-Type': 'application/vnd.vmware.vcloud.instantiateVAppTemplateParams+xml'}
         )
         vapp_name = res.object.get('name')
         vapp_href = res.object.get('href')
 
-        task_href = res.object.find(fixxpath(res.object, "Tasks/Task")).get('href')
+        task_href = res.object.find(fixxpath(res.object, "Tasks/Task")).get(
+            'href')
         self._wait_for_task_completion(task_href)
         return vapp_name, vapp_href
 
     def _clone_node(self, name, sourceNode, vdc):
-
-        clone_xml = ET.Element("CloneVAppParams",
-                {'name': name, 'deploy': 'false', 'powerOn': 'false',
-                 'xmlns': "http://www.vmware.com/vcloud/v1.5",
-                 'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"}
+        clone_xml = ET.Element(
+            "CloneVAppParams",
+            {'name': name, 'deploy': 'false', 'powerOn': 'false',
+             'xmlns': "http://www.vmware.com/vcloud/v1.5",
+             'xmlns:xsi': "http://www.w3.org/2001/XMLSchema-instance"}
         )
-        ET.SubElement(clone_xml, 'Description').text = 'Clone of ' + sourceNode.name
+        ET.SubElement(clone_xml,
+                      'Description').text = 'Clone of ' + sourceNode.name
         ET.SubElement(clone_xml, 'Source', {'href': sourceNode.id})
 
         res = self.connection.request(
             '%s/action/cloneVApp' % get_url_path(vdc.id),
             data=ET.tostring(clone_xml),
             method='POST',
-            headers={
-                'Content-Type':
-                    'application/vnd.vmware.vcloud.cloneVAppParams+xml'
-            }
+            headers={'Content-Type': 'application/vnd.vmware.vcloud.cloneVAppParams+xml'}
         )
         vapp_name = res.object.get('name')
         vapp_href = res.object.get('href')
@@ -1116,24 +1125,30 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
                 'xmlns': "http://www.vmware.com/vcloud/v1.5",
                 'xmlns:ovf': 'http://schemas.dmtf.org/ovf/envelope/1'})
             ET.SubElement(network_xml, "ovf:Info").text = 'Specifies the available VM network connections'
-            res = self.connection.request('%s/networkConnectionSection' % get_url_path(vm.get('href')),
-                                          data=ET.tostring(network_xml),
-                                          method='PUT',
-                                          headers={'Content-Type': 'application/vnd.vmware.vcloud.networkConnectionSection+xml'}
+            res = self.connection.request(
+                '%s/networkConnectionSection' % get_url_path(vm.get('href')),
+                data=ET.tostring(network_xml),
+                method='PUT',
+                headers={'Content-Type': 'application/vnd.vmware.vcloud.networkConnectionSection+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
             # Re-add network
             network_xml = vm.find(fixxpath(vm, 'NetworkConnectionSection'))
-            network_conn_xml = network_xml.find(fixxpath(network_xml, 'NetworkConnection'))
+            network_conn_xml = network_xml.find(
+                fixxpath(network_xml, 'NetworkConnection'))
             network_conn_xml.set('needsCustomization', 'true')
-            network_conn_xml.remove(network_conn_xml.find(fixxpath(network_xml, 'IpAddress')))
-            network_conn_xml.remove(network_conn_xml.find(fixxpath(network_xml, 'MACAddress')))
-
-            res = self.connection.request('%s/networkConnectionSection' % get_url_path(vm.get('href')),
-                                          data=ET.tostring(network_xml),
-                                          method='PUT',
-                                          headers={'Content-Type': 'application/vnd.vmware.vcloud.networkConnectionSection+xml'}
+            network_conn_xml.remove(
+                network_conn_xml.find(fixxpath(network_xml, 'IpAddress')))
+            network_conn_xml.remove(
+                network_conn_xml.find(fixxpath(network_xml, 'MACAddress')))
+
+            res = self.connection.request(
+                '%s/networkConnectionSection' % get_url_path(vm.get('href')),
+                data=ET.tostring(network_xml),
+                method='PUT',
+                headers={
+                    'Content-Type': 'application/vnd.vmware.vcloud.networkConnectionSection+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
@@ -1149,10 +1164,12 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
 
         @keyword    vapp_or_vm_id: vApp or VM ID that will be modified. If a vApp ID is used here all attached VMs
                                    will be modified
-        @type       vapp_or_vm_id: C{string}
+        @type       vapp_or_vm_id: C{str}
 
         @keyword    vm_cpu: number of virtual CPUs/cores to allocate for specified VMs
-        @type       vm_cpu: C{number}
+        @type       vm_cpu: C{int}
+
+        @rtype: C{None}
         """
         self._validate_vm_cpu(vm_cpu)
         self._change_vm_cpu(vapp_or_vm_id, vm_cpu)
@@ -1168,10 +1185,12 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
 
         @keyword    vapp_or_vm_id: vApp or VM ID that will be modified. If a vApp ID is used here all attached VMs
                                    will be modified
-        @type       vapp_or_vm_id: C{string}
+        @type       vapp_or_vm_id: C{str}
 
         @keyword    vm_memory: virtual memory in MB to allocate for the specified VM or VMs
-        @type       vm_memory: C{number}
+        @type       vm_memory: C{int}
+
+        @rtype: C{None}
         """
         self._validate_vm_memory(vm_memory)
         self._change_vm_memory(vapp_or_vm_id, vm_memory)
@@ -1183,10 +1202,12 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
 
         @keyword    vapp_or_vm_id: vApp or VM ID that will be modified. If a vApp ID is used here all attached VMs
                                    will be modified
-        @type       vapp_or_vm_id: C{string}
+        @type       vapp_or_vm_id: C{str}
 
         @keyword    vm_disk_size: the disk capacity in GB that will be added to the specified VM or VMs
-        @type       vm_disk_size: C{number}
+        @type       vm_disk_size: C{int}
+
+        @rtype: C{None}
         """
         self._validate_vm_disk_size(vm_disk_size)
         self._add_vm_disk(vapp_or_vm_id, vm_disk_size)
@@ -1207,7 +1228,8 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         if vm_memory is None:
             return
         elif vm_memory not in VIRTUAL_MEMORY_VALS_1_5:
-            raise ValueError('%s is not a valid vApp VM memory value' % vm_memory)
+            raise ValueError(
+                '%s is not a valid vApp VM memory value' % vm_memory)
 
     @staticmethod
     def _validate_vm_cpu(vm_cpu):
@@ -1221,7 +1243,8 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         if vm_disk is None:
             return
         elif int(vm_disk) < 0:
-            raise ValueError('%s is not a valid vApp VM disk space value', vm_disk)
+            raise ValueError('%s is not a valid vApp VM disk space value',
+                             vm_disk)
 
     @staticmethod
     def _validate_vm_script(vm_script):
@@ -1232,7 +1255,8 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
             vm_script = os.path.expanduser(vm_script)
             vm_script = os.path.abspath(vm_script)
         if not os.path.isfile(vm_script):
-            raise LibcloudError("%s the VM script file does not exist" % vm_script)
+            raise LibcloudError(
+                "%s the VM script file does not exist" % vm_script)
         try:
             open(vm_script).read()
         except:
@@ -1265,7 +1289,8 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
                 return
 
             # Get GuestCustomizationSection
-            res = self.connection.request('%s/guestCustomizationSection' % get_url_path(vm.get('href')))
+            res = self.connection.request(
+                '%s/guestCustomizationSection' % get_url_path(vm.get('href')))
 
             # Update GuestCustomizationSection
             res.object.find(fixxpath(res.object, 'ComputerName')).text = vm_names[i]
@@ -1273,10 +1298,11 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
             admin_pass = res.object.find(fixxpath(res.object, 'AdminPassword'))
             if admin_pass is not None:
                 res.object.remove(admin_pass)
-            res = self.connection.request('%s/guestCustomizationSection' % get_url_path(vm.get('href')),
-                                          data=ET.tostring(res.object),
-                                          method='PUT',
-                                          headers={'Content-Type': 'application/vnd.vmware.vcloud.guestCustomizationSection+xml'}
+            res = self.connection.request(
+                '%s/guestCustomizationSection' % get_url_path(vm.get('href')),
+                data=ET.tostring(res.object),
+                method='PUT',
+                headers={'Content-Type': 'application/vnd.vmware.vcloud.guestCustomizationSection+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
@@ -1284,10 +1310,11 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
             req_xml = ET.Element("Vm", {
                 'name': vm_names[i],
                 'xmlns': "http://www.vmware.com/vcloud/v1.5"})
-            res = self.connection.request(get_url_path(vm.get('href')),
-                                          data=ET.tostring(req_xml),
-                                          method='PUT',
-                                          headers={'Content-Type': 'application/vnd.vmware.vcloud.vm+xml'}
+            res = self.connection.request(
+                get_url_path(vm.get('href')),
+                data=ET.tostring(req_xml),
+                method='PUT',
+                headers={'Content-Type': 'application/vnd.vmware.vcloud.vm+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
@@ -1298,16 +1325,18 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         vms = self._get_vm_elements(vapp_or_vm_id)
         for vm in vms:
             # Get virtualHardwareSection/cpu section
-            res = self.connection.request('%s/virtualHardwareSection/cpu' % get_url_path(vm.get('href')))
+            res = self.connection.request(
+                '%s/virtualHardwareSection/cpu' % get_url_path(vm.get('href')))
 
             # Update VirtualQuantity field
             res.object.find(
                 '{http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData}VirtualQuantity'
             ).text = str(vm_cpu)
-            res = self.connection.request('%s/virtualHardwareSection/cpu' % get_url_path(vm.get('href')),
-                                          data=ET.tostring(res.object),
-                                          method='PUT',
-                                          headers={'Content-Type': 'application/vnd.vmware.vcloud.rasdItem+xml'}
+            res = self.connection.request(
+                '%s/virtualHardwareSection/cpu' % get_url_path(vm.get('href')),
+                data=ET.tostring(res.object),
+                method='PUT',
+                headers={'Content-Type': 'application/vnd.vmware.vcloud.rasdItem+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
@@ -1324,10 +1353,11 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
             res.object.find(
                 '{http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData}VirtualQuantity'
             ).text = str(vm_memory)
-            res = self.connection.request('%s/virtualHardwareSection/memory' % get_url_path(vm.get('href')),
-                                          data=ET.tostring(res.object),
-                                          method='PUT',
-                                          headers={'Content-Type': 'application/vnd.vmware.vcloud.rasdItem+xml'}
+            res = self.connection.request(
+                '%s/virtualHardwareSection/memory' % get_url_path(vm.get('href')),
+                data=ET.tostring(res.object),
+                method='PUT',
+                headers={'Content-Type': 'application/vnd.vmware.vcloud.rasdItem+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
@@ -1361,10 +1391,11 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
             new_disk.find('%sHostResource' % rasd_ns).set(fixxpath(new_disk, 'capacity'), str(int(vm_disk) * 1024))
             res.object.append(new_disk)
 
-            res = self.connection.request('%s/virtualHardwareSection/disks' % get_url_path(vm.get('href')),
-                                          data=ET.tostring(res.object),
-                                          method='PUT',
-                                          headers={'Content-Type': 'application/vnd.vmware.vcloud.rasditemslist+xml'}
+            res = self.connection.request(
+                '%s/virtualHardwareSection/disks' % get_url_path(vm.get('href')),
+                data=ET.tostring(res.object),
+                method='PUT',
+                headers={'Content-Type': 'application/vnd.vmware.vcloud.rasditemslist+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
@@ -1382,17 +1413,20 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         # http://www.vmware.com/support/vcd/doc/rest-api-doc-1.5-html/types/GuestCustomizationSectionType.html
         for vm in vms:
             # Get GuestCustomizationSection
-            res = self.connection.request('%s/guestCustomizationSection' % get_url_path(vm.get('href')))
+            res = self.connection.request(
+                '%s/guestCustomizationSection' % get_url_path(vm.get('href')))
 
             # Attempt to update any existing CustomizationScript element
             try:
-                res.object.find(fixxpath(res.object, 'CustomizationScript')).text = script
+                res.object.find(
+                    fixxpath(res.object, 'CustomizationScript')).text = script
             except:
                 # CustomizationScript section does not exist, insert it just before ComputerName
                 for i, e in enumerate(res.object):
                     if e.tag == '{http://www.vmware.com/vcloud/v1.5}ComputerName':
                         break
-                e = ET.Element('{http://www.vmware.com/vcloud/v1.5}CustomizationScript')
+                e = ET.Element(
+                    '{http://www.vmware.com/vcloud/v1.5}CustomizationScript')
                 e.text = script
                 res.object.insert(i, e)
 
@@ -1402,12 +1436,11 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
                 res.object.remove(admin_pass)
 
             # Update VM's GuestCustomizationSection
-            res = self.connection.request('%s/guestCustomizationSection' % get_url_path(vm.get('href')),
-                                          data=ET.tostring(res.object),
-                                          method='PUT',
-                                          headers={'Content-Type':
-                                                   'application/vnd.vmware.vcloud.guestCustomizationSection+xml'
-                                          }
+            res = self.connection.request(
+                '%s/guestCustomizationSection' % get_url_path(vm.get('href')),
+                data=ET.tostring(res.object),
+                method='PUT',
+                headers={'Content-Type': 'application/vnd.vmware.vcloud.guestCustomizationSection+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
@@ -1418,16 +1451,18 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         vms = self._get_vm_elements(vapp_or_vm_id)
 
         for vm in vms:
-            res = self.connection.request('%s/networkConnectionSection' % get_url_path(vm.get('href')))
-            net_conns = res.object.findall(fixxpath(res.object, 'NetworkConnection'))
+            res = self.connection.request(
+                '%s/networkConnectionSection' % get_url_path(vm.get('href')))
+            net_conns = res.object.findall(
+                fixxpath(res.object, 'NetworkConnection'))
             for c in net_conns:
                 c.find(fixxpath(c, 'IpAddressAllocationMode')).text = vm_ipmode
 
-            res = self.connection.request('%s/networkConnectionSection' % get_url_path(vm.get('href')),
-                                          data=ET.tostring(res.object),
-                                          method='PUT',
-                                          headers={'Content-Type':
-                                                   'application/vnd.vmware.vcloud.networkConnectionSection+xml'}
+            res = self.connection.request(
+                '%s/networkConnectionSection' % get_url_path(vm.get('href')),
+                data=ET.tostring(res.object),
+                method='PUT',
+                headers={'Content-Type': 'application/vnd.vmware.vcloud.networkConnectionSection+xml'}
             )
             self._wait_for_task_completion(res.object.get('href'))
 
@@ -1443,7 +1478,8 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
                 network_href = l.attrib['href']
 
         if network_href is None:
-            raise ValueError('%s is not a valid organisation network name' % network_name)
+            raise ValueError(
+                '%s is not a valid organisation network name' % network_name)
         else:
             return network_href
 
@@ -1454,14 +1490,14 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
         elif res.object.tag.endswith('Vm'):
             vms = [res.object]
         else:
-            raise ValueError('Specified ID value is not a valid VApp or Vm identifier.')
+            raise ValueError(
+                'Specified ID value is not a valid VApp or Vm identifier.')
         return vms
 
     def _is_node(self, node_or_image):
         return isinstance(node_or_image, Node)
 
     def _to_node(self, node_elm):
-
         # Parse VMs as extra field
         vms = []
         for vm_elem in node_elm.findall(fixxpath(node_elm, 'Children/Vm')):
@@ -1471,7 +1507,8 @@ class VCloud_1_5_NodeDriver(VCloudNodeDriver):
                 ip = connection.find(fixxpath(connection, "IpAddress"))
                 if ip is not None:
                     private_ips.append(ip.text)
-                external_ip = connection.find(fixxpath(connection, "ExternalIpAddress"))
+                external_ip = connection.find(
+                    fixxpath(connection, "ExternalIpAddress"))
                 if external_ip is not None:
                     public_ips.append(external_ip.text)
                 elif ip is not None:
diff --git libcloud/compute/drivers/voxel.py libcloud/compute/drivers/voxel.py
index 249941b..39fc91b 100644
--- libcloud/compute/drivers/voxel.py
+++ libcloud/compute/drivers/voxel.py
@@ -30,8 +30,8 @@ from libcloud.compute.base import NodeSize, NodeImage, NodeLocation
 
 VOXEL_API_HOST = "api.voxel.net"
 
-class VoxelResponse(XmlResponse):
 
+class VoxelResponse(XmlResponse):
     def __init__(self, response, connection):
         self.parsed = None
         super(VoxelResponse, self).__init__(response=response,
@@ -70,6 +70,7 @@ class VoxelResponse(XmlResponse):
             return False
         return True
 
+
 class VoxelConnection(ConnectionUserAndKey):
     """
     Connection class for the Voxel driver
@@ -82,7 +83,7 @@ class VoxelConnection(ConnectionUserAndKey):
         params = dict([(k, v) for k, v in list(params.items())
                        if v is not None])
         params["key"] = self.user_id
-        params["timestamp"] = datetime.datetime.utcnow().isoformat()+"+0000"
+        params["timestamp"] = datetime.datetime.utcnow().isoformat() + "+0000"
 
         keys = list(params.keys())
         keys.sort()
@@ -92,7 +93,7 @@ class VoxelConnection(ConnectionUserAndKey):
         for key in keys:
             if params[key]:
                 if not params[key] is None:
-                    md5.update(b("%s%s"% (key, params[key])))
+                    md5.update(b("%s%s" % (key, params[key])))
                 else:
                     md5.update(b(key))
         params['api_sig'] = md5.hexdigest()
@@ -110,6 +111,7 @@ NODE_STATE_MAP = {
     'unknown': NodeState.UNKNOWN,
 }
 
+
 class VoxelNodeDriver(NodeDriver):
     """
     Voxel VoxCLOUD node driver
@@ -121,7 +123,7 @@ class VoxelNodeDriver(NodeDriver):
     website = 'http://www.voxel.net/'
 
     def _initialize_instance_types():
-        for cpus in range(1,14):
+        for cpus in range(1, 14):
             if cpus == 1:
                 name = "Single CPU"
             else:
@@ -129,16 +131,16 @@ class VoxelNodeDriver(NodeDriver):
             id = "%dcpu" % cpus
             ram = cpus * RAM_PER_CPU
 
-            VOXEL_INSTANCE_TYPES[id]= {
-                         'id': id,
-                         'name': name,
-                         'ram': ram,
-                         'disk': None,
-                         'bandwidth': None,
-                         'price': None}
+            VOXEL_INSTANCE_TYPES[id] = {
+                'id': id,
+                'name': name,
+                'ram': ram,
+                'disk': None,
+                'bandwidth': None,
+                'price': None}
 
     features = {"create_node": [],
-                "list_sizes":  ["variable_disk"]}
+                "list_sizes": ["variable_disk"]}
 
     _initialize_instance_types()
 
@@ -148,8 +150,8 @@ class VoxelNodeDriver(NodeDriver):
         return self._to_nodes(result)
 
     def list_sizes(self, location=None):
-        return [ NodeSize(driver=self.connection.driver, **i)
-                 for i in list(VOXEL_INSTANCE_TYPES.values()) ]
+        return [NodeSize(driver=self.connection.driver, **i)
+                for i in list(VOXEL_INSTANCE_TYPES.values())]
 
     def list_images(self, location=None):
         params = {"method": "voxel.images.list"}
@@ -198,6 +200,8 @@ class VoxelNodeDriver(NodeDriver):
         @keyword ex_voxel_access: Allow access Voxel administrative access.
                                   Defaults to False.
         @type    ex_voxel_access: C{bool}
+
+        @rtype: L{Node} or C{None}
         """
 
         # assert that disk > 0
@@ -210,51 +214,47 @@ class VoxelNodeDriver(NodeDriver):
             voxel_access = "true" if voxel_access else "false"
 
         params = {
-            'method':           'voxel.voxcloud.create',
-            'hostname':         kwargs["name"],
-            'disk_size':        int(kwargs["size"].disk),
-            'facility':         kwargs["location"].id,
-            'image_id':         kwargs["image"].id,
+            'method': 'voxel.voxcloud.create',
+            'hostname': kwargs["name"],
+            'disk_size': int(kwargs["size"].disk),
+            'facility': kwargs["location"].id,
+            'image_id': kwargs["image"].id,
             'processing_cores': kwargs["size"].ram / RAM_PER_CPU,
-            'backend_ip':       kwargs.get("ex_privateip", None),
-            'frontend_ip':      kwargs.get("ex_publicip", None),
-            'admin_password':   kwargs.get("ex_rootpass", None),
+            'backend_ip': kwargs.get("ex_privateip", None),
+            'frontend_ip': kwargs.get("ex_publicip", None),
+            'admin_password': kwargs.get("ex_rootpass", None),
             'console_password': kwargs.get("ex_consolepass", None),
-            'ssh_username':     kwargs.get("ex_sshuser", None),
-            'ssh_password':     kwargs.get("ex_sshpass", None),
-            'voxel_access':     voxel_access,
+            'ssh_username': kwargs.get("ex_sshuser", None),
+            'ssh_password': kwargs.get("ex_sshpass", None),
+            'voxel_access': voxel_access,
         }
 
         object = self.connection.request('/', params=params).object
 
         if self._getstatus(object):
             return Node(
-                id = object.findtext("device/id"),
-                name = kwargs["name"],
-                state = NODE_STATE_MAP[object.findtext("device/status")],
-                public_ips = kwargs.get("publicip", None),
-                private_ips = kwargs.get("privateip", None),
-                driver = self.connection.driver
+                id=object.findtext("device/id"),
+                name=kwargs["name"],
+                state=NODE_STATE_MAP[object.findtext("device/status")],
+                public_ips=kwargs.get("publicip", None),
+                private_ips=kwargs.get("privateip", None),
+                driver=self.connection.driver
             )
         else:
             return None
 
     def reboot_node(self, node):
-        """
-        Reboot the node by passing in the node object
-        """
         params = {'method': 'voxel.devices.power',
                   'device_id': node.id,
                   'power_action': 'reboot'}
-        return self._getstatus(self.connection.request('/', params=params).object)
+        return self._getstatus(
+            self.connection.request('/', params=params).object)
 
     def destroy_node(self, node):
-        """
-        Destroy node by passing in the node object
-        """
         params = {'method': 'voxel.voxcloud.delete',
                   'device_id': node.id}
-        return self._getstatus(self.connection.request('/', params=params).object)
+        return self._getstatus(
+            self.connection.request('/', params=params).object)
 
     def list_locations(self):
         params = {"method": "voxel.voxcloud.facilities.list"}
@@ -285,23 +285,23 @@ class VoxelNodeDriver(NodeDriver):
                 public_ip = private_ip = None
                 ipassignments = element.findall("ipassignments/ipassignment")
                 for ip in ipassignments:
-                    if ip.attrib["type"] =="frontend":
+                    if ip.attrib["type"] == "frontend":
                         public_ip = ip.text
                     elif ip.attrib["type"] == "backend":
                         private_ip = ip.text
 
-                nodes.append(Node(id= element.attrib['id'],
-                                 name=element.attrib['label'],
-                                 state=state,
-                                 public_ips= public_ip,
-                                 private_ips= private_ip,
-                                 driver=self.connection.driver))
+                nodes.append(Node(id=element.attrib['id'],
+                                  name=element.attrib['label'],
+                                  state=state,
+                                  public_ips=public_ip,
+                                  private_ips=private_ip,
+                                  driver=self.connection.driver))
         return nodes
 
     def _to_images(self, object):
         images = []
         for element in object.findall("images/image"):
-            images.append(NodeImage(id = element.attrib["id"],
-                                    name = element.attrib["summary"],
-                                    driver = self.connection.driver))
+            images.append(NodeImage(id=element.attrib["id"],
+                                    name=element.attrib["summary"],
+                                    driver=self.connection.driver))
         return images
diff --git libcloud/compute/drivers/vpsnet.py libcloud/compute/drivers/vpsnet.py
index 3b726ea..fb044ae 100644
--- libcloud/compute/drivers/vpsnet.py
+++ libcloud/compute/drivers/vpsnet.py
@@ -40,7 +40,6 @@ BANDWIDTH_PER_NODE = 250
 
 
 class VPSNetResponse(JsonResponse):
-
     def parse_body(self):
         try:
             return super(VPSNetResponse, self).parse_body()
@@ -61,6 +60,7 @@ class VPSNetResponse(JsonResponse):
         else:
             return "\n".join(errors)
 
+
 class VPSNetConnection(ConnectionUserAndKey):
     """
     Connection class for the VPS.net driver
@@ -74,6 +74,7 @@ class VPSNetConnection(ConnectionUserAndKey):
         headers['Authorization'] = 'Basic %s' % (user_b64.decode('utf-8'))
         return headers
 
+
 class VPSNetNodeDriver(NodeDriver):
     """
     VPS.net node driver
@@ -96,7 +97,8 @@ class VPSNetNodeDriver(NodeDriver):
                  state=state,
                  public_ips=[vm.get('primary_ip_address', None)],
                  private_ips=[],
-                 extra={'slices_count':vm['slices_count']}, # Number of nodes consumed by VM
+                 extra={'slices_count': vm['slices_count']},
+                 # Number of nodes consumed by VM
                  driver=self.connection.driver)
         return n
 
@@ -124,39 +126,43 @@ class VPSNetNodeDriver(NodeDriver):
     def create_node(self, name, image, size, **kwargs):
         """Create a new VPS.net node
 
-        See L{NodeDriver.create_node} for more keyword args.
+        @inherits: L{NodeDriver.create_node}
+
         @keyword    ex_backups_enabled: Enable automatic backups
         @type       ex_backups_enabled: C{bool}
 
         @keyword    ex_fqdn:   Fully Qualified domain of the node
-        @type       ex_fqdn:   C{string}
+        @type       ex_fqdn:   C{str}
         """
         headers = {'Content-Type': 'application/json'}
         request = {'virtual_machine':
                         {'label': name,
                          'fqdn': kwargs.get('ex_fqdn', ''),
                          'system_template_id': image.id,
-                         'backups_enabled': kwargs.get('ex_backups_enabled', 0),
+                         'backups_enabled': kwargs.get('ex_backups_enabled',
+                                                       0),
                          'slices_required': size.id}}
 
         res = self.connection.request('/virtual_machines.%s' % (API_VERSION,),
-                                    data=json.dumps(request),
-                                    headers=headers,
-                                    method='POST')
+                                      data=json.dumps(request),
+                                      headers=headers,
+                                      method='POST')
         node = self._to_node(res.object['virtual_machine'])
         return node
 
     def reboot_node(self, node):
-        res = self.connection.request('/virtual_machines/%s/%s.%s' %
-                                        (node.id, 'reboot', API_VERSION),
-                                        method="POST")
+        res = self.connection.request(
+            '/virtual_machines/%s/%s.%s' % (node.id,
+                                            'reboot',
+                                            API_VERSION),
+            method="POST")
         node = self._to_node(res.object['virtual_machine'])
         return True
 
     def list_sizes(self, location=None):
         res = self.connection.request('/nodes.%s' % (API_VERSION,))
         available_nodes = len([size for size in res.object
-                            if size['slice']['virtual_machine_id']])
+                               if size['slice']['virtual_machine_id']])
         sizes = [self._to_size(i) for i in range(1, available_nodes + 1)]
         return sizes
 
