diff --git a/src/setup.py b/src/setup.py
index 729fae5..396c971 100755
--- a/src/setup.py
+++ b/src/setup.py
@@ -1,10 +1,17 @@
 #!/usr/bin/env python
+from __future__ import print_function
 import os
 import sys
 import subprocess
 from os import listdir, path
 from distutils.core import setup
 
+# Python2/3 compliance
+try:
+	raw_input
+except:
+	raw_input = input
+
 # This is super hacky.
 if "--yes" in sys.argv:
 	sys.argv.pop(sys.argv.index("--yes"))
@@ -20,10 +27,10 @@ def warning(lines, terminate=True, prompt=False):
 	WIDTH = 115
 
 	if not IGNORE_WARNINGS:
-		print "\n", "*" * WIDTH
+		print("\n" + "*" * WIDTH)
 		for line in lines:
-			print line
-		print "*" * WIDTH, "\n"
+			print(line)
+		print("*" * WIDTH, "\n")
 
 		if prompt:
 			if raw_input('Continue installation anyway (Y/n)? ').lower().startswith('n'):
@@ -34,20 +41,19 @@ def warning(lines, terminate=True, prompt=False):
 		if terminate:
 			sys.exit(1)
 		
-# Check for pre-requisite modules only if --no-prereq-checks was not specified
-print "checking pre-requisites"
+print("checking pre-requisites")
 try:
 	import magic
 	try:
 		magic.MAGIC_NO_CHECK_TEXT
-	except Exception, e:
-		msg = ["Pre-requisite failure:", str(e),
+	except Exception as e:
+		msg = ["Pre-requisite failure: " + str(e),
 			"It looks like you have an old or incompatible magic module installed.",
 			"Please install the official python-magic module, or download and install it from source: ftp://ftp.astron.com/pub/file/"
 		]
 		
 		warning(msg)
-except Exception, e:
+except Exception as e:
 	msg = ["Pre-requisite failure:", str(e),
 		"Please install the python-magic module, or download and install it from source: ftp://ftp.astron.com/pub/file/",
 	]
@@ -59,8 +65,8 @@ try:
 	matplotlib.use('Agg')
 	import matplotlib.pyplot
 	import numpy
-except Exception, e:
-	msg = ["Pre-requisite check warning:", str(e),
+except Exception as e:
+	msg = ["Pre-requisite check warning: " + str(e),
 		"To take advantage of this tool's entropy plotting capabilities, please install the python-matplotlib module.",
 	]
 	
@@ -80,7 +86,7 @@ if not os.path.exists(c_lib_makefile):
 status |= os.system("make")
 
 if status != 0:
-	msg = ["Failed to build compression libraries.",
+	msg = ["Build warning: failed to build compression libraries.",
 		"Some plugins will not work without these libraries."
 	]
 	
@@ -88,7 +94,7 @@ if status != 0:
 else:
 	if "install" in sys.argv:
 		if os.system("make install") != 0:
-			msg = ["Failed to install compression libraries.",
+			msg = ["Install warning: failed to install compression libraries.",
 				"Some plugins will not work without these libraries."
 			]
 
@@ -97,14 +103,18 @@ else:
 os.chdir(working_directory)
 
 # Generate a new magic file from the files in the magic directory
-print "generating binwalk magic file"
+print("generating binwalk magic file")
 magic_files = listdir("magic")
 magic_files.sort()
 fd = open("binwalk/magic/binwalk", "wb")
 for magic in magic_files:
 	fpath = path.join("magic", magic)
 	if path.isfile(fpath):
-		fd.write(open(fpath).read())
+		data = open(fpath).read()
+		try:
+			fd.write(data)
+		except TypeError:
+			fd.write(bytes(data, 'UTF-8'))
 fd.close()
 
 # The data files to install along with the binwalk module
@@ -115,7 +125,7 @@ setup(	name = "binwalk",
 	version = "1.2.3",
 	description = "Firmware analysis tool",
 	author = "Craig Heffner",
-	url = "http://binwalk.googlecode.com",
+	url = "https://github.com/devttys0/binwalk",
 
 	requires = ["magic", "matplotlib.pyplot"],	
 	packages = ["binwalk"],
@@ -137,8 +147,14 @@ if python2_path and binwalk_path:
 	for line in open(binwalk_path, 'rb').readlines():
 		if i == 0:
 			line = "#!/usr/bin/env python2\n"
-		data += line
+		data += str(line)
 		i += 1
 
-	open(binwalk_path, 'wb').write(data)
+	fd = open(binwalk_path, 'wb')
+	try:
+		fd.write(data)
+	except TypeError:
+		fd.write(bytes(data, 'UTF-8'))
+	fd.close()
+