diff --git a/Lib/lib2to3/fixer_util.py b/Lib/lib2to3/fixer_util.py
index 0d93278..3b13669 100644
--- a/Lib/lib2to3/fixer_util.py
+++ b/Lib/lib2to3/fixer_util.py
@@ -291,8 +291,6 @@
     if does_tree_import(package, name, root):
         return
 
-    add_newline_before = False
-
     # figure out where to insert the new import.  First try to find
     # the first import and then skip to the last one.
     insert_pos = offset = 0
@@ -312,7 +310,6 @@
             if node.type == syms.simple_stmt and node.children and \
                node.children[0].type == token.STRING:
                 insert_pos = idx + 1
-                add_newline_before
                 break
 
     if package is None:
@@ -324,8 +321,6 @@
         import_ = FromImport(package, [Leaf(token.NAME, name, prefix=u' ')])
 
     children = [import_, Newline()]
-    if add_newline_before:
-        children.insert(0, Newline())
     root.insert_child(insert_pos, Node(syms.simple_stmt, children))
 
 
diff --git a/Lib/lib2to3/fixes/fix_callable.py b/Lib/lib2to3/fixes/fix_callable.py
index 03c8923..ca5d20b 100644
--- a/Lib/lib2to3/fixes/fix_callable.py
+++ b/Lib/lib2to3/fixes/fix_callable.py
@@ -3,12 +3,12 @@
 
 """Fixer for callable().
 
-This converts callable(obj) into hasattr(obj, '__call__')."""
+This converts callable(obj) into isinstance(obj, collections.Callable), adding a
+collections import if needed."""
 
 # Local imports
-from .. import pytree
-from .. import fixer_base
-from ..fixer_util import Call, Name, String
+from lib2to3 import fixer_base
+from lib2to3.fixer_util import Call, Name, String, Attr, touch_import
 
 class FixCallable(fixer_base.BaseFix):
 
@@ -25,7 +25,10 @@
     """
 
     def transform(self, node, results):
-        func = results["func"]
+        func = results['func']
 
-        args = [func.clone(), String(u', '), String(u"'__call__'")]
-        return Call(Name(u"hasattr"), args, prefix=node.prefix)
+        touch_import(None, u'collections', node=node)
+
+        args = [func.clone(), String(u', ')]
+        args.extend(Attr(Name(u'collections'), Name(u'Callable')))
+        return Call(Name(u'isinstance'), args, prefix=node.prefix)
diff --git a/Lib/lib2to3/main.py b/Lib/lib2to3/main.py
index 736d5a6..caf54dd 100644
--- a/Lib/lib2to3/main.py
+++ b/Lib/lib2to3/main.py
@@ -60,8 +60,14 @@
         else:
             self.log_message("Refactored %s", filename)
             if self.show_diffs:
-                for line in diff_texts(old, new, filename):
-                    print line
+                diff_lines = diff_texts(old, new, filename)
+                try:
+                    for line in diff_lines:
+                        print line
+                except UnicodeEncodeError:
+                    warn("couldn't encode %s's diff for your terminal" %
+                         (filename,))
+                    return
 
 
 def warn(msg):
diff --git a/Lib/lib2to3/tests/test_all_fixers.py b/Lib/lib2to3/tests/test_all_fixers.py
index 3cd7ce6..f64b3d9 100644
--- a/Lib/lib2to3/tests/test_all_fixers.py
+++ b/Lib/lib2to3/tests/test_all_fixers.py
@@ -9,11 +9,12 @@
 import unittest
 
 # Local imports
-from .. import pytree
-from .. import refactor
+from lib2to3 import refactor
 from . import support
 
+
 class Test_all(support.TestCase):
+
     def setUp(self):
         self.refactor = support.get_refactorer()
 
diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py
index eb0b4b4..cf4ebc3 100755
--- a/Lib/lib2to3/tests/test_fixers.py
+++ b/Lib/lib2to3/tests/test_fixers.py
@@ -2725,16 +2725,79 @@
 
     def test_prefix_preservation(self):
         b = """callable(    x)"""
-        a = """hasattr(    x, '__call__')"""
+        a = """import collections\nisinstance(    x, collections.Callable)"""
         self.check(b, a)
 
         b = """if     callable(x): pass"""
-        a = """if     hasattr(x, '__call__'): pass"""
+        a = """import collections
+if     isinstance(x, collections.Callable): pass"""
         self.check(b, a)
 
     def test_callable_call(self):
         b = """callable(x)"""
-        a = """hasattr(x, '__call__')"""
+        a = """import collections\nisinstance(x, collections.Callable)"""
+        self.check(b, a)
+
+    def test_global_import(self):
+        b = """
+def spam(foo):
+    callable(foo)"""[1:]
+        a = """
+import collections
+def spam(foo):
+    isinstance(foo, collections.Callable)"""[1:]
+        self.check(b, a)
+
+        b = """
+import collections
+def spam(foo):
+    callable(foo)"""[1:]
+        # same output if it was already imported
+        self.check(b, a)
+
+        b = """
+from collections import *
+def spam(foo):
+    callable(foo)"""[1:]
+        a = """
+from collections import *
+import collections
+def spam(foo):
+    isinstance(foo, collections.Callable)"""[1:]
+        self.check(b, a)
+
+        b = """
+do_stuff()
+do_some_other_stuff()
+assert callable(do_stuff)"""[1:]
+        a = """
+import collections
+do_stuff()
+do_some_other_stuff()
+assert isinstance(do_stuff, collections.Callable)"""[1:]
+        self.check(b, a)
+
+        b = """
+if isinstance(do_stuff, Callable):
+    assert callable(do_stuff)
+    do_stuff(do_stuff)
+    if not callable(do_stuff):
+        exit(1)
+    else:
+        assert callable(do_stuff)
+else:
+    assert not callable(do_stuff)"""[1:]
+        a = """
+import collections
+if isinstance(do_stuff, Callable):
+    assert isinstance(do_stuff, collections.Callable)
+    do_stuff(do_stuff)
+    if not isinstance(do_stuff, collections.Callable):
+        exit(1)
+    else:
+        assert isinstance(do_stuff, collections.Callable)
+else:
+    assert not isinstance(do_stuff, collections.Callable)"""[1:]
         self.check(b, a)
 
     def test_callable_should_not_change(self):
diff --git a/Lib/lib2to3/tests/test_main.py b/Lib/lib2to3/tests/test_main.py
new file mode 100644
index 0000000..0291931
--- /dev/null
+++ b/Lib/lib2to3/tests/test_main.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+import sys
+import codecs
+import StringIO
+import unittest
+
+from lib2to3 import main
+
+
+class TestMain(unittest.TestCase):
+
+    def run_2to3_capture(self, args, in_capture, out_capture, err_capture):
+        save_stdin = sys.stdin
+        save_stdout = sys.stdout
+        save_stderr = sys.stderr
+        sys.stdin = in_capture
+        sys.stdout = out_capture
+        sys.stderr = err_capture
+        try:
+            return main.main("lib2to3.fixes", args)
+        finally:
+            sys.stdin = save_stdin
+            sys.stdout = save_stdout
+            sys.stderr = save_stderr
+
+    def test_unencodable_diff(self):
+        input_stream = StringIO.StringIO(u"print 'nothing'\nprint u'über'\n")
+        out = StringIO.StringIO()
+        out_enc = codecs.getwriter("ascii")(out)
+        err = StringIO.StringIO()
+        ret = self.run_2to3_capture(["-"], input_stream, out_enc, err)
+        self.assertEqual(ret, 0)
+        output = out.getvalue()
+        self.assertTrue("-print 'nothing'" in output)
+        self.assertTrue("WARNING: couldn't encode <stdin>'s diff for "
+                        "your terminal" in err.getvalue())
