--- a/chirp/drivers/baofeng_common.py
+++ b/chirp/drivers/baofeng_common.py
@@ -165,7 +165,7 @@ def _ident_radio(radio):
             data = _do_ident(radio, magic)
             return data
         except errors.RadioError, e:
-            print e
+            print(e)
             error = e
             time.sleep(2)
     if error:
--- a/chirp/drivers/ft8100.py
+++ b/chirp/drivers/ft8100.py
@@ -175,7 +175,7 @@ class FT8100Radio(yaesu_clone.YaesuClone
 
         if _mem.duplex == DUPLEX.index("split"):
             tx_freq = int(_mem.offset) * 1000
-            print self.VARIANT, number, tx_freq, mem.freq
+            print(self.VARIANT, number, tx_freq, mem.freq)
             mem.offset = tx_freq - mem.freq
         else:
             mem.offset = int(_mem.offset) * 1000
@@ -189,7 +189,7 @@ class FT8100Radio(yaesu_clone.YaesuClone
         if not self._memobj.enables[byte] & bit and number != 1:
             mem.empty = True
 
-        print 'R', self.VARIANT, number, _mem.baud9600
+        print('R', self.VARIANT, number, _mem.baud9600)
 
         return mem
 
@@ -291,7 +291,7 @@ def __clone_out(radio):
     pos = 0
     for block in radio._block_lengths:
         if os.getenv("CHIRP_DEBUG"):
-            print "\nSending %i-%i" % (pos, pos + block)
+            print("\nSending %i-%i" % (pos, pos + block))
         out = radio.get_mmap()[pos:pos + block]
 
         # need to chew byte-by-byte here or else we lose the ACK...not sure why
@@ -309,6 +309,6 @@ def __clone_out(radio):
 
         pos += block
 
-    print "Clone completed in %i seconds" % (time.time() - start)
+    print("Clone completed in %i seconds" % (time.time() - start))
 
     return True
--- a/chirp/drivers/kyd_IP620.py
+++ b/chirp/drivers/kyd_IP620.py
@@ -206,7 +206,7 @@ class IP620Radio(chirp_common.CloneModeR
         except Exception, e:
             raise errors.RadioError("Error communicating with radio: %s" % e)
         if not _ident.startswith("\x06\x4B\x47\x36\x37\x01\x56\xF8"):
-            print util.hexprint(_ident)
+            print(util.hexprint(_ident))
             raise errors.RadioError("Radio returned unknown identification string")
         try:
             self.pipe.write(CMD_ACK)
--- a/chirp/drivers/rh5r_v2.py
+++ b/chirp/drivers/rh5r_v2.py
@@ -167,7 +167,7 @@ class TYTTHUVF8_V2(chirp_common.CloneMod
                 filedata[0x840:0x848] == cls._FILEID)
 
     def process_mmap(self):
-        print MEM_FORMAT
+        print(MEM_FORMAT)
         self._memobj = bitwise.parse(MEM_FORMAT, self._mmap)
 
     def get_raw_memory(self, number):
--- a/chirp/drivers/tdxone_tdq8a.py
+++ b/chirp/drivers/tdxone_tdq8a.py
@@ -302,7 +302,7 @@ def _ident_radio(radio):
             data = _do_ident(radio, magic)
             return data
         except errors.RadioError, e:
-            print e
+            print(e)
             error = e
             time.sleep(2)
     if error:
@@ -426,7 +426,7 @@ def model_match(cls, data):
 
     if len(data) == 0x2008:
         rid = data[0x2000:0x2008]
-        print rid
+        print(rid)
         return rid.startswith(cls.MODEL)
     else:
         return False
--- a/chirp/drivers/thd72.py
+++ b/chirp/drivers/thd72.py
@@ -738,9 +738,9 @@ if __name__ == "__main__":
         return r
 
     def usage():
-        print "Usage: %s <-i input.img>|<-o output.img> -p port " \
+        print("Usage: %s <-i input.img>|<-o output.img> -p port " \
             "[[-f first-addr] [-l last-addr] | [-b list,of,blocks]]" % \
-            sys.argv[0]
+            sys.argv[0])
         sys.exit(1)
 
     opts, args = getopt.getopt(sys.argv[1:], "i:o:p:f:l:b:")
@@ -793,4 +793,4 @@ if __name__ == "__main__":
     else:
         r._mmap = file(fname, "rb").read(r._memsize)
         r.upload(blocks)
-    print "\nDone"
+    print("\nDone")
--- a/chirp/drivers/ts2000.py
+++ b/chirp/drivers/ts2000.py
@@ -217,7 +217,7 @@ class TS2000Radio(KenwoodLiveRadio):
             duplex = 0
             offset = 0
         else:
-            print "Bug: unsupported duplex `%s'" % mem.duplex
+            print("Bug: unsupported duplex `%s'" % mem.duplex)
         if mem.mode in ["AM", "FM"]:
             step = TS2000_FM_STEPS.index(mem.tuning_step)
         else:
@@ -259,7 +259,7 @@ class TS2000Radio(KenwoodLiveRadio):
         elif mem.duplex == "split":
             duplex = 0
         else:
-            print "Bug: unsupported duplex `%s'" % mem.duplex
+            print("Bug: unsupported duplex `%s'" % mem.duplex)
         if mem.mode in ["AM", "FM"]:
             step = TS2000_FM_STEPS.index(mem.tuning_step)
         else:
--- a/chirp/elib_intl.py
+++ b/chirp/elib_intl.py
@@ -485,7 +485,7 @@ def install(domain, localedir):
 
         import elib.intl
         elib.intl.install('myapplication', '/path/to/usr/share/locale')
-        print _('This string will be translated.')
+        print(_('This string will be translated.'))
 
     Note that this is only one way, albeit the most convenient way,
     to make the _() function available to your application. Because it affects
@@ -511,7 +511,7 @@ def install_module(domain, localedir):
 
         import elib.intl
         _ = elib.intl.install_module('mymodule', '/path/to/usr/share/locale')
-        print _('This string will be translated.')
+        print(_('This string will be translated.'))
 
     When writing packages, you can usually do this in the package's __init__.py
     file and import the _() function from the package namespace as needed.
--- a/chirp/ui/mainapp.py
+++ b/chirp/ui/mainapp.py
@@ -1137,7 +1137,7 @@ of file.
 
         query = "http://chirp.danplanet.com/query/rb/1.0/app_direct" \
                 "?loc=%s&band=%s&dist=%s" % (loc, band, dist)
-        print query
+        print(query)
 
         # Do this in case the import process is going to take a while
         # to make sure we process events leading up to this
