diff --git a/lbrynet/core/RateLimiter.py b/lbrynet/core/RateLimiter.py
index b2d2f8698..9f8e4ed23 100644
--- a/lbrynet/core/RateLimiter.py
+++ b/lbrynet/core/RateLimiter.py
@@ -49,7 +49,7 @@ class DummyRateLimiter(object):
 class RateLimiter(object):
     """This class ensures that upload and download rates don't exceed specified maximums"""
 
-    implements(IRateLimiter)
+    #implements(IRateLimiter)
 
     #called by main application
 
diff --git a/lbrynet/core/client/BlobRequester.py b/lbrynet/core/client/BlobRequester.py
index 172e1929e..558ddd6ed 100644
--- a/lbrynet/core/client/BlobRequester.py
+++ b/lbrynet/core/client/BlobRequester.py
@@ -40,7 +40,7 @@ def cache(fn):
 
 
 class BlobRequester(object):
-    implements(IRequestCreator)
+    #implements(IRequestCreator)
 
     def __init__(self, blob_manager, peer_finder, payment_rate_manager, wallet, download_manager):
         self.blob_manager = blob_manager
diff --git a/lbrynet/core/client/ClientProtocol.py b/lbrynet/core/client/ClientProtocol.py
index fca7cb38d..5e200b946 100644
--- a/lbrynet/core/client/ClientProtocol.py
+++ b/lbrynet/core/client/ClientProtocol.py
@@ -24,7 +24,7 @@ def encode_decimal(obj):
 
 
 class ClientProtocol(Protocol, TimeoutMixin):
-    implements(IRequestSender, IRateLimited)
+    #implements(IRequestSender, IRateLimited)
     ######### Protocol #########
     PROTOCOL_TIMEOUT = 30
 
diff --git a/lbrynet/core/client/ConnectionManager.py b/lbrynet/core/client/ConnectionManager.py
index b781628fb..c7a9e5826 100644
--- a/lbrynet/core/client/ConnectionManager.py
+++ b/lbrynet/core/client/ConnectionManager.py
@@ -19,7 +19,7 @@ class PeerConnectionHandler(object):
 
 
 class ConnectionManager(object):
-    implements(interfaces.IConnectionManager)
+    #implements(interfaces.IConnectionManager)
     MANAGE_CALL_INTERVAL_SEC = 5
     TCP_CONNECT_TIMEOUT = 15
 
diff --git a/lbrynet/core/client/DownloadManager.py b/lbrynet/core/client/DownloadManager.py
index 4c8fd565a..4834e03b8 100644
--- a/lbrynet/core/client/DownloadManager.py
+++ b/lbrynet/core/client/DownloadManager.py
@@ -8,7 +8,7 @@ log = logging.getLogger(__name__)
 
 
 class DownloadManager(object):
-    implements(interfaces.IDownloadManager)
+    #implements(interfaces.IDownloadManager)
 
     def __init__(self, blob_manager):
         self.blob_manager = blob_manager
diff --git a/lbrynet/core/client/StandaloneBlobDownloader.py b/lbrynet/core/client/StandaloneBlobDownloader.py
index 10509fd27..47e3d99b6 100644
--- a/lbrynet/core/client/StandaloneBlobDownloader.py
+++ b/lbrynet/core/client/StandaloneBlobDownloader.py
@@ -15,7 +15,7 @@ log = logging.getLogger(__name__)
 
 
 class SingleBlobMetadataHandler(object):
-    implements(interfaces.IMetadataHandler)
+    #implements(interfaces.IMetadataHandler)
 
     def __init__(self, blob_hash, download_manager):
         self.blob_hash = blob_hash
diff --git a/lbrynet/core/client/StreamProgressManager.py b/lbrynet/core/client/StreamProgressManager.py
index 9bfee80b5..4113c9dbc 100644
--- a/lbrynet/core/client/StreamProgressManager.py
+++ b/lbrynet/core/client/StreamProgressManager.py
@@ -8,7 +8,7 @@ log = logging.getLogger(__name__)
 
 
 class StreamProgressManager(object):
-    implements(IProgressManager)
+    #implements(IProgressManager)
 
     def __init__(self, finished_callback, blob_manager,
                  download_manager, delete_blob_after_finished=False):
diff --git a/lbrynet/core/server/BlobRequestHandler.py b/lbrynet/core/server/BlobRequestHandler.py
index 9537c7259..08920aabf 100644
--- a/lbrynet/core/server/BlobRequestHandler.py
+++ b/lbrynet/core/server/BlobRequestHandler.py
@@ -13,7 +13,7 @@ log = logging.getLogger(__name__)
 
 
 class BlobRequestHandlerFactory(object):
-    implements(IQueryHandlerFactory)
+    #implements(IQueryHandlerFactory)
 
     def __init__(self, blob_manager, wallet, payment_rate_manager, analytics_manager):
         self.blob_manager = blob_manager
@@ -36,7 +36,7 @@ class BlobRequestHandlerFactory(object):
 
 
 class BlobRequestHandler(object):
-    implements(IQueryHandler, IBlobSender)
+    #implements(IQueryHandler, IBlobSender)
     PAYMENT_RATE_QUERY = 'blob_data_payment_rate'
     BLOB_QUERY = 'requested_blob'
     AVAILABILITY_QUERY = 'requested_blobs'
diff --git a/lbrynet/core/server/ServerProtocol.py b/lbrynet/core/server/ServerProtocol.py
index 5ad9b2039..9c0afa4ef 100644
--- a/lbrynet/core/server/ServerProtocol.py
+++ b/lbrynet/core/server/ServerProtocol.py
@@ -24,7 +24,7 @@ class ServerProtocol(Protocol):
     10) Pause/resume production when told by the rate limiter
     """
 
-    implements(interfaces.IConsumer)
+    #implements(interfaces.IConsumer)
 
     #Protocol stuff
 
diff --git a/lbrynet/core/server/ServerRequestHandler.py b/lbrynet/core/server/ServerRequestHandler.py
index 813771647..750956117 100644
--- a/lbrynet/core/server/ServerRequestHandler.py
+++ b/lbrynet/core/server/ServerRequestHandler.py
@@ -13,7 +13,7 @@ class ServerRequestHandler(object):
     return request for information about more blobs that are
     associated with streams.
     """
-    implements(interfaces.IPushProducer, interfaces.IConsumer, IRequestHandler)
+    #implements(interfaces.IPushProducer, interfaces.IConsumer, IRequestHandler)
 
     def __init__(self, consumer):
         self.consumer = consumer
diff --git a/lbrynet/core/system_info.py b/lbrynet/core/system_info.py
index 25b363af7..e8a6fcb98 100644
--- a/lbrynet/core/system_info.py
+++ b/lbrynet/core/system_info.py
@@ -3,7 +3,8 @@ import json
 import subprocess
 import os
 
-from urllib2 import urlopen, URLError
+from six.moves.urllib.request import urlopen
+from six.moves.urllib.error import URLError
 from lbryschema import __version__ as lbryschema_version
 from lbrynet import build_type, __version__ as lbrynet_version
 from lbrynet.conf import ROOT_DIR
@@ -19,7 +20,7 @@ def get_lbrynet_version():
                     stderr=devnull
                 ).strip().lstrip('v')
         except (subprocess.CalledProcessError, OSError):
-            print "failed to get version from git"
+            print("failed to get version from git")
     return lbrynet_version
 
 
diff --git a/lbrynet/cryptstream/CryptStreamCreator.py b/lbrynet/cryptstream/CryptStreamCreator.py
index a3042ac61..a8fb83f33 100644
--- a/lbrynet/cryptstream/CryptStreamCreator.py
+++ b/lbrynet/cryptstream/CryptStreamCreator.py
@@ -22,7 +22,7 @@ class CryptStreamCreator(object):
     the blob is associated with the stream.
     """
 
-    implements(interfaces.IConsumer)
+    #implements(interfaces.IConsumer)
 
     def __init__(self, blob_manager, name=None, key=None, iv_generator=None):
         """@param blob_manager: Object that stores and provides access to blobs.
diff --git a/lbrynet/cryptstream/client/CryptBlobHandler.py b/lbrynet/cryptstream/client/CryptBlobHandler.py
index 3df94f5bd..7c9578ce4 100644
--- a/lbrynet/cryptstream/client/CryptBlobHandler.py
+++ b/lbrynet/cryptstream/client/CryptBlobHandler.py
@@ -6,7 +6,7 @@ from lbrynet.interfaces import IBlobHandler
 
 
 class CryptBlobHandler(object):
-    implements(IBlobHandler)
+    #implements(IBlobHandler)
 
     def __init__(self, key, write_func):
         self.key = key
diff --git a/lbrynet/cryptstream/client/CryptStreamDownloader.py b/lbrynet/cryptstream/client/CryptStreamDownloader.py
index 706c12903..801f8f71e 100644
--- a/lbrynet/cryptstream/client/CryptStreamDownloader.py
+++ b/lbrynet/cryptstream/client/CryptStreamDownloader.py
@@ -36,7 +36,7 @@ class CurrentlyStartingError(Exception):
 
 class CryptStreamDownloader(object):
 
-    implements(IStreamDownloader)
+    #implements(IStreamDownloader)
 
     def __init__(self, peer_finder, rate_limiter, blob_manager, payment_rate_manager, wallet,
                  key, stream_name):
diff --git a/lbrynet/dht/datastore.py b/lbrynet/dht/datastore.py
index 234eb3209..035c3b503 100644
--- a/lbrynet/dht/datastore.py
+++ b/lbrynet/dht/datastore.py
@@ -1,12 +1,10 @@
-import UserDict
-import constants
-from interface import IDataStore
-from zope.interface import implements
+from collections import UserDict
+from . import constants
 
 
-class DictDataStore(UserDict.DictMixin):
+class DictDataStore(UserDict):
     """ A datastore using an in-memory Python dictionary """
-    implements(IDataStore)
+    #implements(IDataStore)
 
     def __init__(self, getTime=None):
         # Dictionary format:
diff --git a/lbrynet/dht/encoding.py b/lbrynet/dht/encoding.py
index 9862ca0d2..85430f068 100644
--- a/lbrynet/dht/encoding.py
+++ b/lbrynet/dht/encoding.py
@@ -1,4 +1,4 @@
-from error import DecodeError
+from .error import DecodeError
 
 
 class Encoding(object):
@@ -68,7 +68,7 @@ class Bencode(Encoding):
                 encodedDictItems += self.encode(data[key])
             return 'd%se' % encodedDictItems
         else:
-            print data
+            print(data)
             raise TypeError("Cannot bencode '%s' object" % type(data))
 
     def decode(self, data):
@@ -126,8 +126,8 @@ class Bencode(Encoding):
             splitPos = data[startIndex:].find(':') + startIndex
             try:
                 length = int(data[startIndex:splitPos])
-            except ValueError, e:
-                raise DecodeError, e
+            except ValueError:
+                raise DecodeError()
             startIndex = splitPos + 1
             endPos = startIndex + length
             bytes = data[startIndex:endPos]
diff --git a/lbrynet/dht/error.py b/lbrynet/dht/error.py
index 89cf89fab..7816a836d 100644
--- a/lbrynet/dht/error.py
+++ b/lbrynet/dht/error.py
@@ -1,10 +1,10 @@
 import binascii
-import exceptions
+#import exceptions
 
 # this is a dict of {"exceptions.<exception class name>": exception class} items used to raise
 # remote built-in exceptions locally
 BUILTIN_EXCEPTIONS = {
-    "exceptions.%s" % e: getattr(exceptions, e) for e in dir(exceptions) if not e.startswith("_")
+#    "exceptions.%s" % e: getattr(exceptions, e) for e in dir(exceptions) if not e.startswith("_")
 }
 
 
diff --git a/lbrynet/dht/iterativefind.py b/lbrynet/dht/iterativefind.py
index d951aef84..eb901df22 100644
--- a/lbrynet/dht/iterativefind.py
+++ b/lbrynet/dht/iterativefind.py
@@ -1,9 +1,9 @@
 import logging
-from twisted.internet import defer
-from distance import Distance
-from error import TimeoutError
-import constants
 import struct
+from twisted.internet import defer
+from .distance import Distance
+from .error import TimeoutError
+from . import constants
 
 log = logging.getLogger(__name__)
 
diff --git a/lbrynet/dht/kbucket.py b/lbrynet/dht/kbucket.py
index dfd3f5ae8..2e601ed1b 100644
--- a/lbrynet/dht/kbucket.py
+++ b/lbrynet/dht/kbucket.py
@@ -1,7 +1,7 @@
 import logging
-import constants
-from distance import Distance
-from error import BucketFull
+from . import constants
+from .distance import Distance
+from .error import BucketFull
 
 log = logging.getLogger(__name__)
 
diff --git a/lbrynet/dht/msgformat.py b/lbrynet/dht/msgformat.py
index 2cc79f29c..3ab1c91d3 100644
--- a/lbrynet/dht/msgformat.py
+++ b/lbrynet/dht/msgformat.py
@@ -7,7 +7,7 @@
 # The docstrings in this module contain epytext markup; API documentation
 # may be created by processing this file with epydoc: http://epydoc.sf.net
 
-import msgtypes
+from . import msgtypes
 
 
 class MessageTranslator(object):
diff --git a/lbrynet/dht/msgtypes.py b/lbrynet/dht/msgtypes.py
index 6eb2d3e74..46b535772 100644
--- a/lbrynet/dht/msgtypes.py
+++ b/lbrynet/dht/msgtypes.py
@@ -8,7 +8,7 @@
 # may be created by processing this file with epydoc: http://epydoc.sf.net
 
 from lbrynet.core.utils import generate_id
-import constants
+from . import constants
 
 
 class Message(object):
diff --git a/lbrynet/dht/node.py b/lbrynet/dht/node.py
index efa3de4cf..f8e28836b 100644
--- a/lbrynet/dht/node.py
+++ b/lbrynet/dht/node.py
@@ -15,14 +15,14 @@ from twisted.internet import defer, error, task
 from lbrynet.core.utils import generate_id, DeferredDict
 from lbrynet.core.call_later_manager import CallLaterManager
 from lbrynet.core.PeerManager import PeerManager
-from error import TimeoutError
-import constants
-import routingtable
-import datastore
-import protocol
-from peerfinder import DHTPeerFinder
-from contact import ContactManager
-from iterativefind import iterativeFind
+from .error import TimeoutError
+from . import constants
+from . import routingtable
+from . import datastore
+from . import protocol
+from .peerfinder import DHTPeerFinder
+from .contact import ContactManager
+from .iterativefind import iterativeFind
 
 
 log = logging.getLogger(__name__)
diff --git a/lbrynet/dht/peerfinder.py b/lbrynet/dht/peerfinder.py
index 52d8b4375..a3282fbc0 100644
--- a/lbrynet/dht/peerfinder.py
+++ b/lbrynet/dht/peerfinder.py
@@ -19,7 +19,7 @@ class DummyPeerFinder(object):
 
 class DHTPeerFinder(DummyPeerFinder):
     """This class finds peers which have announced to the DHT that they have certain blobs"""
-    implements(IPeerFinder)
+    #implements(IPeerFinder)
 
     def __init__(self, dht_node, peer_manager):
         """
diff --git a/lbrynet/dht/protocol.py b/lbrynet/dht/protocol.py
index 197761026..231485531 100644
--- a/lbrynet/dht/protocol.py
+++ b/lbrynet/dht/protocol.py
@@ -4,12 +4,12 @@ import errno
 from collections import deque
 
 from twisted.internet import protocol, defer
-from error import BUILTIN_EXCEPTIONS, UnknownRemoteException, TimeoutError, TransportNotConnected
+from .error import BUILTIN_EXCEPTIONS, UnknownRemoteException, TimeoutError, TransportNotConnected
 
-import constants
-import encoding
-import msgtypes
-import msgformat
+from . import constants
+from . import encoding
+from . import msgtypes
+from . import msgformat
 
 log = logging.getLogger(__name__)
 
@@ -436,7 +436,7 @@ class KademliaProtocol(protocol.DatagramProtocol):
                     result = func(senderContact, *a)
                 else:
                     result = func()
-            except Exception, e:
+            except Exception as e:
                 log.exception("error handling request for %s:%i %s", senderContact.address, senderContact.port, method)
                 df.errback(e)
             else:
diff --git a/lbrynet/dht/routingtable.py b/lbrynet/dht/routingtable.py
index 89d1a5e13..93457ec5c 100644
--- a/lbrynet/dht/routingtable.py
+++ b/lbrynet/dht/routingtable.py
@@ -8,11 +8,11 @@
 import random
 from zope.interface import implements
 from twisted.internet import defer
-import constants
-import kbucket
-from error import TimeoutError
-from distance import Distance
-from interface import IRoutingTable
+from . import constants
+from . import kbucket
+from .error import TimeoutError
+from .distance import Distance
+from .interface import IRoutingTable
 import logging
 
 log = logging.getLogger(__name__)
@@ -33,7 +33,7 @@ class TreeRoutingTable(object):
     C{PING} RPC-based k-bucket eviction algorithm described in section 2.2 of
     that paper.
     """
-    implements(IRoutingTable)
+    #implements(IRoutingTable)
 
     def __init__(self, parentNodeID, getTime=None):
         """
diff --git a/lbrynet/file_manager/EncryptedFileDownloader.py b/lbrynet/file_manager/EncryptedFileDownloader.py
index 71897dcd5..977ab6022 100644
--- a/lbrynet/file_manager/EncryptedFileDownloader.py
+++ b/lbrynet/file_manager/EncryptedFileDownloader.py
@@ -163,7 +163,7 @@ class ManagedEncryptedFileDownloader(EncryptedFileSaver):
 
 
 class ManagedEncryptedFileDownloaderFactory(object):
-    implements(IStreamDownloaderFactory)
+    #implements(IStreamDownloaderFactory)
 
     def __init__(self, lbry_file_manager, blob_manager):
         self.lbry_file_manager = lbry_file_manager
diff --git a/lbrynet/lbry_file/client/EncryptedFileDownloader.py b/lbrynet/lbry_file/client/EncryptedFileDownloader.py
index 2c230ec7f..028be8336 100644
--- a/lbrynet/lbry_file/client/EncryptedFileDownloader.py
+++ b/lbrynet/lbry_file/client/EncryptedFileDownloader.py
@@ -91,7 +91,7 @@ class EncryptedFileDownloader(CryptStreamDownloader):
 
 
 class EncryptedFileDownloaderFactory(object):
-    implements(IStreamDownloaderFactory)
+    #implements(IStreamDownloaderFactory)
 
     def __init__(self, peer_finder, rate_limiter, blob_manager, storage, wallet):
         self.peer_finder = peer_finder
diff --git a/lbrynet/lbry_file/client/EncryptedFileMetadataHandler.py b/lbrynet/lbry_file/client/EncryptedFileMetadataHandler.py
index 51105c12b..aa36a213c 100644
--- a/lbrynet/lbry_file/client/EncryptedFileMetadataHandler.py
+++ b/lbrynet/lbry_file/client/EncryptedFileMetadataHandler.py
@@ -8,7 +8,7 @@ log = logging.getLogger(__name__)
 
 
 class EncryptedFileMetadataHandler(object):
-    implements(IMetadataHandler)
+    #implements(IMetadataHandler)
 
     def __init__(self, stream_hash, storage, download_manager):
         self.stream_hash = stream_hash