diff --git a/Lib/lib2to3/fixer_util.py b/Lib/lib2to3/fixer_util.py
index 5c0a088..e6f7cdf 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=' ')])
 
     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 831b913..ed1cb37 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(', '), String("'__call__'")]
-        return Call(Name("hasattr"), args, prefix=node.prefix)
+        touch_import(None, 'collections', node=node)
+
+        args = [func.clone(), String(', ')]
+        args.extend(Attr(Name('collections'), Name('Callable')))
+        return Call(Name('isinstance'), args, prefix=node.prefix)
diff --git a/Lib/lib2to3/main.py b/Lib/lib2to3/main.py
index 6e09693..6c57e67 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):
     print("WARNING: %s" % (msg,), file=sys.stderr)
diff --git a/Lib/lib2to3/tests/test_all_fixers.py b/Lib/lib2to3/tests/test_all_fixers.py
index 61bcc54..f64b3d9 100644
--- a/Lib/lib2to3/tests/test_all_fixers.py
+++ b/Lib/lib2to3/tests/test_all_fixers.py
@@ -9,12 +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 ea361de..2e0092f 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..23d1b56
--- /dev/null
+++ b/Lib/lib2to3/tests/test_main.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+import sys
+import codecs
+import io
+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 = io.StringIO("print 'nothing'\nprint u'über'\n")
+        out = io.StringIO()
+        out_enc = codecs.getwriter("ascii")(out)
+        err = io.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())
