diff --git a/stress/config.py b/stress/config.py
index 64091cd..ca86ce5 100755
--- a/stress/config.py
+++ b/stress/config.py
@@ -39,15 +39,15 @@
 
     @property
     def nova_logdir(self):
-        """Directory containing log files on the compute nodes"""
+        """Directory containing log files on the compute nodes."""
         return self.get("nova_logdir", None)
 
     @property
     def controller(self):
-        """Controller host"""
+        """Controller host."""
         return self.get("controller", None)
 
     @property
     def max_instances(self):
-        """Maximum number of instances to create during test"""
+        """Maximum number of instances to create during test."""
         return self.get("max_instances", 16)
diff --git a/stress/pending_action.py b/stress/pending_action.py
index 635d2cc..abfa74d 100644
--- a/stress/pending_action.py
+++ b/stress/pending_action.py
@@ -46,7 +46,7 @@
         return False
 
     def check_timeout(self):
-        """Check for timeouts of TestCase actions"""
+        """Check for timeouts of TestCase actions."""
         time_diff = time.time() - self._start_time
         if time_diff > self._timeout:
             self._logger.error('%s exceeded timeout of %d' %
@@ -76,7 +76,7 @@
         self._target = target_server
 
     def _check_for_status(self, state_string):
-        """Check to see if the machine has transitioned states"""
+        """Check to see if the machine has transitioned states."""
         t = time.time()  # for debugging
         target = self._target
         _resp, body = self._manager.servers_client.get_server(target['id'])
diff --git a/stress/test_case.py b/stress/test_case.py
index fe510d5..d04ace0 100644
--- a/stress/test_case.py
+++ b/stress/test_case.py
@@ -25,5 +25,5 @@
         self._logger = logging.getLogger(self.__class__.__name__)
 
     def run(self, nova_manager, state_obj, *pargs, **kargs):
-        """Nova API methods to call that would modify state of the cluster"""
+        """Nova API methods to call that would modify state of the cluster."""
         return
diff --git a/stress/test_floating_ips.py b/stress/test_floating_ips.py
index 9d89510..97e4382 100755
--- a/stress/test_floating_ips.py
+++ b/stress/test_floating_ips.py
@@ -61,7 +61,7 @@
 
 
 class VerifyChangeFloatingIp(pending_action.PendingAction):
-    """Verify that floating ip was changed"""
+    """Verify that floating ip was changed."""
     def __init__(self, manager, floating_ip, timeout, add=None):
         super(VerifyChangeFloatingIp, self).__init__(manager, timeout=timeout)
         self.floating_ip = floating_ip
diff --git a/stress/test_server_actions.py b/stress/test_server_actions.py
index 3b4e71c..a2032f0 100644
--- a/stress/test_server_actions.py
+++ b/stress/test_server_actions.py
@@ -27,7 +27,7 @@
 
 
 class TestRebootVM(test_case.StressTestCase):
-    """Reboot a server"""
+    """Reboot a server."""
 
     def run(self, manager, state, *pargs, **kwargs):
         """
@@ -132,7 +132,7 @@
 
 # This code needs to be tested against a cluster that supports resize.
 #class TestResizeVM(test_case.StressTestCase):
-#    """Resize a server (change flavors)"""
+#    """Resize a server (change flavors)."""
 #
 #    def run(self, manager, state, *pargs, **kwargs):
 #        """
@@ -193,7 +193,7 @@
 #                              timeout=_timeout)
 #
 #class VerifyResizeVM(pending_action.PendingServerAction):
-#    """Verify that resizing of a VM was successful"""
+#    """Verify that resizing of a VM was successful."""
 #    States = enum('VERIFY_RESIZE_CHECK', 'ACTIVE_CHECK')
 #
 #    def __init__(self, manager, state, created_server,
diff --git a/stress/test_servers.py b/stress/test_servers.py
index 9957cdb..e1cb4d1 100644
--- a/stress/test_servers.py
+++ b/stress/test_servers.py
@@ -96,7 +96,7 @@
 
 
 class VerifyCreateVM(pending_action.PendingServerAction):
-    """Verify that VM was built and is running"""
+    """Verify that VM was built and is running."""
     def __init__(self, manager,
                  state,
                  created_server,
@@ -175,7 +175,7 @@
 
 
 class VerifyKillActiveVM(pending_action.PendingServerAction):
-    """Verify that server was destroyed"""
+    """Verify that server was destroyed."""
 
     def retry(self):
         """
@@ -238,7 +238,7 @@
 
 
 class TestUpdateVMName(test_case.StressTestCase):
-    """Class to change the name of the active server"""
+    """Class to change the name of the active server."""
     def run(self, manager, state, *pargs, **kwargs):
         """
         Issue HTTP POST request to change the name of active server.
@@ -288,7 +288,7 @@
 
 
 class VerifyUpdateVMName(pending_action.PendingServerAction):
-    """Check that VM has new name"""
+    """Check that VM has new name."""
     def retry(self):
         """
         Check that VM has new name. Update local view of `state` to RUNNING.
diff --git a/stress/tests/floating_ips.py b/stress/tests/floating_ips.py
index d62e892..6a4452c 100755
--- a/stress/tests/floating_ips.py
+++ b/stress/tests/floating_ips.py
@@ -11,7 +11,7 @@
 #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #    See the License for the specific language governing permissions and
 #    limitations under the License.
-"""Stress test that associates/disasssociates floating ips"""
+"""Stress test that associates/disasssociates floating ips."""
 
 from stress.basher import BasherAction
 from stress.driver import *
diff --git a/stress/tests/hard_reboots.py b/stress/tests/hard_reboots.py
index f35c6de..fe57be1 100644
--- a/stress/tests/hard_reboots.py
+++ b/stress/tests/hard_reboots.py
@@ -11,7 +11,7 @@
 #    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 #    See the License for the specific language governing permissions and
 #    limitations under the License.
-"""Test that reboots random instances in a Nova cluster"""
+"""Test that reboots random instances in a Nova cluster."""
 
 
 from stress.test_servers import *
diff --git a/stress/utils/util.py b/stress/utils/util.py
index f90796d..ec63b99 100644
--- a/stress/utils/util.py
+++ b/stress/utils/util.py
@@ -50,6 +50,6 @@
 
 
 def enum(*sequential, **named):
-    """Create auto-incremented enumerated types"""
+    """Create auto-incremented enumerated types."""
     enums = dict(zip(sequential, range(len(sequential))), **named)
     return type('Enum', (), enums)
