diff --git a/ffdc/lib/telnet_utility.py b/ffdc/lib/telnet_utility.py
index 03f7983..08e4071 100644
--- a/ffdc/lib/telnet_utility.py
+++ b/ffdc/lib/telnet_utility.py
@@ -1,21 +1,21 @@
 #!/usr/bin/env python3
 
 
-import logging
-import socket
-import telnetlib
 import time
+import socket
+import logging
+import telnetlib
 from collections import deque
 
 
 class TelnetRemoteclient:
+
     r"""
     Class to create telnet connection to remote host for command execution.
     """
 
-    def __init__(
-        self, hostname, username, password, port=23, read_timeout=None
-    ):
+    def __init__(self, hostname, username, password, port=23, read_timeout=None):
+
         r"""
         Description of argument(s):
 
@@ -33,35 +33,23 @@
         self.read_timeout = read_timeout
 
     def tn_remoteclient_login(self):
+
         is_telnet = True
         try:
-            self.tnclient = telnetlib.Telnet(
-                self.hostname, self.port, timeout=15
-            )
-            if b"login:" in self.tnclient.read_until(
-                b"login:", timeout=self.read_timeout
-            ):
-                self.tnclient.write(self.username.encode("utf-8") + b"\n")
+            self.tnclient = telnetlib.Telnet(self.hostname, self.port, timeout=15)
+            if b'login:' in self.tnclient.read_until(b'login:', timeout=self.read_timeout):
+                self.tnclient.write(self.username.encode('utf-8') + b"\n")
 
-                if b"Password:" in self.tnclient.read_until(
-                    b"Password:", timeout=self.read_timeout
-                ):
-                    self.tnclient.write(self.password.encode("utf-8") + b"\n")
+                if b'Password:' in self.tnclient.read_until(b'Password:', timeout=self.read_timeout):
+                    self.tnclient.write(self.password.encode('utf-8') + b"\n")
 
-                    n, match, pre_match = self.tnclient.expect(
-                        [
-                            b"Login incorrect",
-                            b"invalid login name or password.",
-                            rb"\#",
-                            rb"\$",
-                        ],
-                        timeout=self.read_timeout,
-                    )
+                    n, match, pre_match = \
+                        self.tnclient.expect(
+                            [b'Login incorrect', b'invalid login name or password.', br'\#', br'\$'],
+                            timeout=self.read_timeout)
                     if n == 0 or n == 1:
                         logging.error(
-                            "\n\tERROR: Telnet Authentication Failed.  Check"
-                            " userid and password.\n\n"
-                        )
+                            "\n\tERROR: Telnet Authentication Failed.  Check userid and password.\n\n")
                         is_telnet = False
                     else:
                         # login successful
@@ -88,15 +76,17 @@
             # the telnet object might not exist yet, so ignore this one
             pass
 
-    def execute_command(self, cmd, i_timeout=120):
-        r"""
-        Executes commands on the remote host
+    def execute_command(self, cmd,
+                        i_timeout=120):
 
-        Description of argument(s):
-        cmd             Command to run on remote host
-        i_timeout       Timeout for command output
-                        default is 120 seconds
-        """
+        r'''
+            Executes commands on the remote host
+
+            Description of argument(s):
+            cmd             Command to run on remote host
+            i_timeout       Timeout for command output
+                            default is 120 seconds
+        '''
 
         # Wait time for command execution before reading the output.
         # Use user input wait time for command execution if one exists.
@@ -107,22 +97,23 @@
             execution_time = 120
 
         # Execute the command and read the command output.
-        return_buffer = b""
+        return_buffer = b''
         try:
+
             # Do at least one non-blocking read.
             #  to flush whatever data is in the read buffer.
             while self.tnclient.read_very_eager():
                 continue
 
             # Execute the command
-            self.tnclient.write(cmd.encode("utf-8") + b"\n")
+            self.tnclient.write(cmd.encode('utf-8') + b'\n')
             time.sleep(execution_time)
 
-            local_buffer = b""
+            local_buffer = b''
             # Read the command output one block at a time.
             return_buffer = self.tnclient.read_very_eager()
             while return_buffer:
-                local_buffer = b"".join([local_buffer, return_buffer])
+                local_buffer = b''.join([local_buffer, return_buffer])
                 time.sleep(3)  # let the buffer fill up a bit
                 return_buffer = self.tnclient.read_very_eager()
         except (socket.error, EOFError) as e:
@@ -138,4 +129,4 @@
             logging.error("\t\t ERROR %s " % msg)
 
         # Return ASCII string data with ending PROMPT stripped
-        return local_buffer.decode("ascii", "ignore").replace("$ ", "\n")
+        return local_buffer.decode('ascii', 'ignore').replace('$ ', '\n')
