diff --git a/.gitignore b/.gitignore
index 6cdf75d..476d0bb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@
 *.so
 *.o
 *.a
+__pycache__
 
 # Intermediate language files
 /apps/lang/*.update
@@ -126,7 +127,7 @@
 /tools/database/database
 
 # /tools/rbspeex/
-/tools/rbspeex/build
+/tools/rbspeex/build*
 /tools/rbspeex/libspeex.a
 /tools/rbspeex/librbspeex.a
 /tools/rbspeex/dep-speex
diff --git a/tools/talkclips.py b/tools/talkclips.py
index 425c1b1..7f34608 100755
--- a/tools/talkclips.py
+++ b/tools/talkclips.py
@@ -23,40 +23,40 @@
 # The following lines provide variables which you can modify to adjust
 # settings... See comments next to each line.
 # Start opts:
-espeak = '/usr/bin/espeak' # location of easpeak binary 
+espeak = '/usr/bin/espeak' # location of easpeak binary
 rbspeexenc = './rbspeexenc' # path to rbspeexenc binary (default currentdir)
-VOPTS=espeak+" -s 320 -z" # Your espeak opts 
-ROPTS=rbspeexenc+" -q 4 -c 10" # rbspeex opts 
+VOPTS=espeak+" -s 320 -z" # Your espeak opts
+ROPTS=rbspeexenc+" -q 4 -c 10" # rbspeex opts
 logfile="/tmp/talkclips.log" # a file where output should be logged
-# End opts 
-# Don't touch the below settings. Unless you know what your doing. 
-log=open(logfile, 'w') # logging leave this var alone. 
-USAGE="Usage: %s <directory>" % (sys.argv[0]) # usage prompt don't touch 
+# End opts
+# Don't touch the below settings. Unless you know what your doing.
+log=open(logfile, 'w') # logging leave this var alone.
+USAGE="Usage: %s <directory>" % (sys.argv[0]) # usage prompt don't touch
 if not os.path.exists(rbspeexenc):
-  print "%s not found, please change your rbspeexenc path appropriately,\n"\
+  print ("%s not found, please change your rbspeexenc path appropriately,\n"\
       "or place the binary in %s\n"\
-      % (rbspeexenc, os.path.realpath(rbspeexenc))
-  print USAGE
-  exit (-1) # Rbspeexenc not found 
+      % (rbspeexenc, os.path.realpath(rbspeexenc)))
+  print (USAGE)
+  exit (-1) # Rbspeexenc not found
 if not os.path.exists(espeak):
-  print "Espeak not found, please install espeak, or adjust the path of\n"\
-      'the "espeak" variable appropriately.\n'
-  print USAGE
-  exit (-1) # espeak not found 
+  print ("Espeak not found, please install espeak, or adjust the path of\n"\
+      'the "espeak" variable appropriately.\n')
+  print (USAGE)
+  exit (-1) # espeak not found
 
 if len(sys.argv) != 2:
-  print USAGE
+  print (USAGE)
   exit (-1) # user failed to supply enough arguments
 
 RBDIR=sys.argv[1] # grab user input on the command line (don't touch)
 if not os.path.exists(sys.argv[1]):
-  print "The path %s doesn't exist, please try again.\n\n%s"\
-      % (sys.argv[1], USAGE)
+  print ("The path %s doesn't exist, please try again.\n\n%s"\
+      % (sys.argv[1], USAGE))
   exit(-1) # path doesn't exist
 else: # check if it's a dir
   if not os.path.isdir(sys.argv[1]): # a file
-    print "This script only currently works for directories.\n\n%s" % (USAGE)
-    exit (-1) # not a dir 
+    print ("This script only currently works for directories.\n\n%s" % (USAGE))
+    exit (-1) # not a dir
 
 def gentalkclip(clipname, fullpath, isdir):
   """Generate an individual talk clip.
@@ -65,23 +65,23 @@
   synth, and encoder, and save accordingly."""
 
   if isdir: # directory
-    output=os.path.join(fullpath, "_dirname.talk") # dir clip name 
+    output=os.path.join(fullpath, "_dirname.talk") # dir clip name
     if os.path.exists(output):
       return True # no need to create again
     try: # Don't let the script stop if bash raises filename errors
       os.system('%s "%s" -w "%s"' % (VOPTS, clipname, output+".tmp"))
       os.system('%s "%s" "%s"' % (ROPTS, output+".tmp", output))
-      os.remove(output+".tmp") # delete the old wav file 
+      os.remove(output+".tmp") # delete the old wav file
     except OSError:
-      log.write('Failed to create clip for directory: "%s"\n' % (clipname)) 
-      return False 
+      log.write('Failed to create clip for directory: "%s"\n' % (clipname))
+      return False
     log.write( 'Created clip for directory: "%s"\n' % (clipname)) # log
-    return True 
+    return True
   else: # file
     output=fullpath+".talk"
     if os.path.exists(output):
       return True # no need to create again
-    try: 
+    try:
       os.system('%s "%s" -w "%s"' % (VOPTS, clipname, output+".tmp"))
       os.system('%s "%s" "%s"' % (ROPTS, output+".tmp", output))
       os.remove (output+".tmp")
@@ -89,7 +89,7 @@
       log.write('Failed to create clip for file: "%s"\n' % (clipname))
       return False # something failed, so continue with next file
     log.write('Created clip for file: "%s"\n' % (clipname)) # logging
-  return True # clips created 
+  return True # clips created
 
 def istalkclip(file):
   """Is file a talkclip?
@@ -110,12 +110,12 @@
   for item in os.listdir(directory): # get subdirs and files
     if os.path.isdir(os.path.join(directory, item)):
       gentalkclip (item, os.path.join(directory, item), True) # its a dir
-      walker(os.path.join(directory, item)) # go down into this sub dir 
+      walker(os.path.join(directory, item)) # go down into this sub dir
       continue
     else: # a file
       if istalkclip (item):
         continue # is a talk clip
-      else: # create clip 
+      else: # create clip
         gentalkclip(item, os.path.join(directory, item), False) # a file
         continue
 
diff --git a/utils/analysis/objdiff.py b/utils/analysis/objdiff.py
index dc51441..29f703e 100755
--- a/utils/analysis/objdiff.py
+++ b/utils/analysis/objdiff.py
@@ -3,10 +3,10 @@
 from subprocess import Popen, PIPE
 
 if len(sys.argv) != 3:
-    print """%s usage:
+    print ("""%s usage:
     %s obj1 obj2
     Calculate per-symbol and total size differences between obj1 and obj2,
-    which may be any files that nm can read""" % ((sys.argv[0],)*2)
+    which may be any files that nm can read""" % ((sys.argv[0],)*2))
     sys.exit(2)
 
 obj1 = sys.argv[1]
@@ -16,8 +16,8 @@
     proc = Popen(args=['nm', '-S', '-t', 'd', obj], stdout=PIPE, stderr=PIPE)
     out, err = proc.communicate()
     if err:
-        print "nm reported an error:\n"
-        print err
+        print ("nm reported an error:\n")
+        print (err)
         sys.exit(1)
     d = {}
     for l in out.splitlines():
@@ -32,23 +32,23 @@
 d2 = getsyms(obj2)
 l = [(k,v) for k,v in sorted(d1.items()) if k not in d2]
 if l:
-    print "only in %s" % obj1
-    print ''.join("  %6d %s\n" % (v,k) for k,v in l)
+    print ("only in %s" % obj1)
+    print (''.join("  %6d %s\n" % (v,k)) for k,v in l)
     diff -= sum(v for k,v in l)
 
 l = [(k,v) for k,v in sorted(d2.items()) if k not in d1]
 if l:
-    print "only in %s" % obj2
-    print ''.join("%6d %s\n" % (v,k) for k,v in l)
+    print ("only in %s" % obj2)
+    print (''.join("%6d %s\n" % (v,k)) for k,v in l)
     diff += sum(v for k,v in l)
 
 l = [(k,v,d2[k]) for k,v in sorted(d1.items()) if k in d2 and d2[k] != v]
 if l:
-    print "different sizes in %s and %s:" %(obj1, obj2)
-    print ''.join("  %6d %6d %s\n" % (v1,v2,k) for k,v1,v2 in l)
+    print ("different sizes in %s and %s:" %(obj1, obj2))
+    print (''.join("  %6d %6d %s\n" % (v1,v2,k)) for k,v1,v2 in l)
     diff += sum(v2-v1 for k,v1,v2 in l)
 
 if diff:
-    print "total size difference: %+d" % diff
+    print ("total size difference: %+d" % diff)
 else:
-    print "total size difference:  0"
+    print ("total size difference:  0")
diff --git a/utils/common/gitscraper.py b/utils/common/gitscraper.py
index 496d32b..c7a2c3a 100755
--- a/utils/common/gitscraper.py
+++ b/utils/common/gitscraper.py
@@ -212,7 +212,7 @@
         temp_remove = False
     workfolder = scrape_files(
         repo, treehash, filelist, os.path.join(tmpfolder, basename))[0]
-    if basename is "":
+    if basename == "":
         return ""
     print("Archiving files from repository")
     if archive == "7z":
