diff --git a/src/common/proxy65_manager.py b/src/common/proxy65_manager.py
index 4e8bf8edd..fe24d8764 100644
--- a/src/common/proxy65_manager.py
+++ b/src/common/proxy65_manager.py
@@ -304,14 +304,14 @@ class HostTester(Socks5, IdleObject):
             self.idlequeue.set_read_timeout(self.fd, CONNECT_TIMEOUT)
             # begin negotiation. on success 'address' != 0
             buff = self.receive()
-            if buff == '':
+            if buff == b'':
                 # end connection
                 self.pollend()
                 return
             # read auth response
             if buff is None or len(buff) != 2:
                 return None
-            version, method = struct.unpack('!BB', buff[:2].encode('utf-8'))
+            version, method = struct.unpack('!BB', buff[:2])
             if version != 0x05 or method == 0xff:
                 self.pollend()
                 return
@@ -349,7 +349,7 @@ class HostTester(Socks5, IdleObject):
             self._sock.setblocking(False)
             self._send = self._sock.send
             self._recv = self._sock.recv
-        self.buff = ''
+        self.buff = b''
         self.state = 1 # connected
         log.debug('Host connected to %s:%s' % (self.host, self.port))
         self.idlequeue.plug_idle(self, True, False)
@@ -424,7 +424,7 @@ class ReceiverTester(Socks5, IdleObject):
             self.idlequeue.set_read_timeout(self.fd, CONNECT_TIMEOUT)
             # begin negotiation. on success 'address' != 0
             buff = self.receive()
-            if buff == '':
+            if buff == b'':
                 # end connection
                 self.pollend()
                 return
@@ -432,7 +432,7 @@ class ReceiverTester(Socks5, IdleObject):
             # read auth response
             if buff is None or len(buff) != 2:
                 return None
-            version, method = struct.unpack('!BB', buff[:2].encode('utf-8'))
+            version, method = struct.unpack('!BB', buff[:2])
             if version != 0x05 or method == 0xff:
                 self.pollend()
                 return
@@ -444,7 +444,7 @@ class ReceiverTester(Socks5, IdleObject):
             # read connect response
             if buff is None or len(buff) < 2:
                 return None
-            version, reply = struct.unpack('!BB', buff[:2].encode('utf-8'))
+            version, reply = struct.unpack('!BB', buff[:2])
             if version != 0x05 or reply != 0x00:
                 self.pollend()
                 return
diff --git a/src/common/socks5.py b/src/common/socks5.py
index eaf306218..754089bac 100644
--- a/src/common/socks5.py
+++ b/src/common/socks5.py
@@ -149,8 +149,8 @@ class SocksQueue:
                 socks5obj = Socks5SenderClient(self.idlequeue, idx,
                     self, _sock=None,host=str(streamhost['host']),
                     port=int(streamhost['port']),fingerprint=fp,
-                    connected=False, file_props=file_props, 
-                    initiator=streamhost['initiator'], 
+                    connected=False, file_props=file_props,
+                    initiator=streamhost['initiator'],
                     target=streamhost['target'])
                 socks5obj.streamhost = streamhost
                 self.add_sockobj(account, socks5obj)
@@ -395,7 +395,7 @@ class SocksQueue:
         connections with 1
         """
         if idx != -1:
-            for key in self.readers.keys():
+            for key in list(self.readers.keys()):
                 if idx in key:
                     self.remove_receiver_by_key(key,
                         do_disconnect=do_disconnect)
@@ -452,7 +452,7 @@ class Socks5(object):
         self.state = 0 # not connected
         self.pauses = 0
         self.size = 0
-        self.remaining_buff = ''
+        self.remaining_buff = b''
         self.file = None
         self.connected = False
         self.mode = ''
@@ -618,15 +618,15 @@ class Socks5(object):
         Read small chunks of data. Call owner's disconnected() method if
         appropriate
         """
-        received = ''
+        received = b''
         try:
-            add = self._recv(64).decode('utf-8')
+            add = self._recv(64)
         except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
         OpenSSL.SSL.WantX509LookupError) as e:
             log.info('SSL rehandshake request : ' + repr(e))
             raise e
         except Exception:
-            add = ''
+            add = b''
         received += add
         if len(add) == 0:
             self.disconnect()
@@ -647,9 +647,9 @@ class Socks5(object):
         return len(raw_data)
 
     def write_next(self):
-        if self.remaining_buff != '':
+        if self.remaining_buff != b'':
             buff = self.remaining_buff
-            self.remaining_buff = ''
+            self.remaining_buff = b''
         else:
             try:
                 self.open_file_for_reading()
@@ -688,7 +688,7 @@ class Socks5(object):
             if lenn != len(buff):
                 self.remaining_buff = buff[lenn:]
             else:
-                self.remaining_buff = ''
+                self.remaining_buff = b''
             self.state = 7 # continue to write in the socket
             if lenn == 0:
                 return None
@@ -707,7 +707,7 @@ class Socks5(object):
             self.file_props.error = -2
             return None
         fd = None
-        if self.remaining_buff != '':
+        if self.remaining_buff != b'':
             try:
                 fd = self.get_fd()
             except IOError:
@@ -721,7 +721,7 @@ class Socks5(object):
                 self.file_props.last_time
             self.file_props.last_time = current_time
             self.file_props.received_len += lenn
-            self.remaining_buff = ''
+            self.remaining_buff = b''
             if self.file_props.received_len == self.file_props.size:
                 self.rem_fd(fd)
                 self.disconnect()
@@ -736,13 +736,13 @@ class Socks5(object):
                 self.file_props.error = -6 # file system error
                 return 0
             try:
-                buff = self._recv(MAX_BUFF_LEN).decode('utf-8')
+                buff = self._recv(MAX_BUFF_LEN)
             except (OpenSSL.SSL.WantReadError, OpenSSL.SSL.WantWriteError,
             OpenSSL.SSL.WantX509LookupError) as e:
                 log.info('SSL rehandshake request :' + repr(e))
                 raise e
             except Exception:
-                buff = ''
+                buff = b''
             current_time = self.idlequeue.current_time()
             self.file_props.elapsed_time += current_time - \
                 self.file_props.last_time
@@ -819,9 +819,9 @@ class Socks5(object):
         """
         auth_mechanisms = []
         try:
-            num_auth = struct.unpack('!xB', buff[:2].encode('utf-8'))[0]
+            num_auth = struct.unpack('!xB', buff[:2])[0]
             for i in list(range(num_auth)):
-                mechanism, = struct.unpack('!B', buff[1 + i].encode('utf-8'))
+                mechanism, = struct.unpack('!B', buff[1 + i])
                 auth_mechanisms.append(mechanism)
         except Exception:
             return None
@@ -855,25 +855,22 @@ class Socks5(object):
 
     def _parse_request_buff(self, buff):
         try: # don't trust on what comes from the outside
-            req_type, host_type, = struct.unpack('!xBxB', buff[:4].encode(
-                'utf-8'))
+            req_type, host_type, = struct.unpack('!xBxB', buff[:4])
             if host_type == 0x01:
-                host_arr = struct.unpack('!iiii', buff[4:8].encode('utf-8'))
+                host_arr = struct.unpack('!iiii', buff[4:8])
                 host, = '.'.join(str(s) for s in host_arr)
                 host_len = len(host)
             elif host_type == 0x03:
-                host_len,  = struct.unpack('!B', buff[4].encode('utf-8'))
-                host, = struct.unpack('!%ds' % host_len, buff[5:5 + host_len].\
-                    encode('utf-8'))
+                host_len,  = struct.unpack('!B', buff[4])
+                host, = struct.unpack('!%ds' % host_len, buff[5:5 + host_len])
             portlen = len(buff[host_len + 5:])
             if portlen == 1:
-                port, = struct.unpack('!B', buff[host_len + 5].encode('utf-8'))
+                port, = struct.unpack('!B', buff[host_len + 5])
             elif portlen == 2:
-                port, = struct.unpack('!H', buff[host_len + 5:].encode('utf-8'))
+                port, = struct.unpack('!H', buff[host_len + 5:])
             # file data, comes with auth message (Gaim bug)
             else:
-                port, = struct.unpack('!H', buff[host_len + 5: host_len + 7].\
-                    encode('utf-8'))
+                port, = struct.unpack('!H', buff[host_len + 5: host_len + 7])
                 self.remaining_buff = buff[host_len + 7:]
         except Exception:
             return (None, None, None)
@@ -890,7 +887,7 @@ class Socks5(object):
             log.info("SSL rehandshake request : " + repr(e))
             raise e
         try:
-            version, method = struct.unpack('!BB', buff.encode('utf-8'))
+            version, method = struct.unpack('!BB', buff)
         except Exception:
             version, method = None, None
         if version != 0x05 or method == 0xff:
@@ -1197,7 +1194,7 @@ class Socks5Client(Socks5):
         if self.state == 2: # read auth response
             if buff is None or len(buff) != 2:
                 return None
-            version, method = struct.unpack('!BB', buff[:2].encode('utf-8'))
+            version, method = struct.unpack('!BB', buff[:2])
             if version != 0x05 or method == 0xff:
                 self.disconnect()
         elif self.state == 4: # get approve of our request
@@ -1206,23 +1203,18 @@ class Socks5Client(Socks5):
             sub_buff = buff[:4]
             if len(sub_buff) < 4:
                 return None
-            version, address_type = struct.unpack('!BxxB', buff[:4].encode(
-                'utf-8'))
+            version, address_type = struct.unpack('!BxxB', buff[:4])
             addrlen = 0
             if address_type == 0x03:
-                addrlen = ord(buff[4])
-                address = struct.unpack('!%ds' % addrlen, buff[5:addrlen + 5].\
-                    encode('utf-8'))
+                addrlen = buff[4]
+                address = struct.unpack('!%ds' % addrlen, buff[5:addrlen + 5])
                 portlen = len(buff[addrlen + 5:])
                 if portlen == 1:
-                    port, = struct.unpack('!B', buff[addrlen + 5].encode(
-                        'utf-8'))
+                    port, = struct.unpack('!B', buff[addrlen + 5])
                 elif portlen == 2:
-                    port, = struct.unpack('!H', buff[addrlen + 5:].encode(
-                        'utf-8'))
+                    port, = struct.unpack('!H', buff[addrlen + 5:])
                 else: # Gaim bug :)
-                    port, = struct.unpack('!H', buff[addrlen + 5:addrlen + 7].\
-                        encode('utf-8'))
+                    port, = struct.unpack('!H', buff[addrlen + 5:addrlen + 7])
                     self.remaining_buff = buff[addrlen + 7:]
             self.state = 5 # for senders: init file_props and send '\n'
             if self.queue.on_success: