diff --git a/Lib/lib2to3/fixes/fix_import.py b/Lib/lib2to3/fixes/fix_import.py
index cc744f2..c065f70 100644
--- a/Lib/lib2to3/fixes/fix_import.py
+++ b/Lib/lib2to3/fixes/fix_import.py
@@ -13,7 +13,7 @@
 # Local imports
 from .. import fixer_base
 from os.path import dirname, join, exists, pathsep
-from ..fixer_util import FromImport
+from ..fixer_util import FromImport, syms
 
 class FixImport(fixer_base.BaseFix):
 
@@ -26,11 +26,14 @@
     def transform(self, node, results):
         imp = results['imp']
 
+        mod_name = str(imp.children[0] if imp.type == syms.dotted_as_name \
+                               else imp)
+
         if str(imp).startswith('.'):
             # Already a new-style import
             return
 
-        if not probably_a_local_import(str(imp), self.filename):
+        if not probably_a_local_import(str(mod_name), self.filename):
             # I guess this is a global import -- skip it!
             return
 
diff --git a/Lib/lib2to3/fixes/fix_metaclass.py b/Lib/lib2to3/fixes/fix_metaclass.py
index c2f4b7f..b508f5f 100644
--- a/Lib/lib2to3/fixes/fix_metaclass.py
+++ b/Lib/lib2to3/fixes/fix_metaclass.py
@@ -110,8 +110,11 @@
         if simple_node.type == syms.simple_stmt and simple_node.children:
             expr_node = simple_node.children[0]
             if expr_node.type == syms.expr_stmt and expr_node.children:
-                leaf_node = expr_node.children[0]
-                if leaf_node.value == '__metaclass__':
+                # Check if the expr_node is a simple assignment.
+                left_node = expr_node.children[0]
+                if isinstance(left_node, Leaf) and \
+                        left_node.value == '__metaclass__':
+                    # We found a assignment to __metaclass__.
                     fixup_simple_stmt(node, i, simple_node)
                     remove_trailing_newline(simple_node)
                     yield (node, i, simple_node)
diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py
index 739e494..51c019f 100755
--- a/Lib/lib2to3/tests/test_fixers.py
+++ b/Lib/lib2to3/tests/test_fixers.py
@@ -2622,7 +2622,7 @@
 
     def check(self, b, a):
         self.unchanged("from future_builtins import map; " + b, a)
-        FixerTestCase.check(self, b, a)
+        super(Test_map, self).check(b, a)
 
     def test_prefix_preservation(self):
         b = """x =    map(   f,    'abc'   )"""
@@ -2729,7 +2729,7 @@
 
     def check(self, b, a):
         self.unchanged("from future_builtins import zip; " + b, a)
-        FixerTestCase.check(self, b, a)
+        super(Test_zip, self).check(b, a)
 
     def test_zip_basic(self):
         b = """x = zip(a, b, c)"""
@@ -3274,7 +3274,7 @@
     fixer = "import"
 
     def setUp(self):
-        FixerTestCase.setUp(self)
+        super(Test_import, self).setUp()
         # Need to replace fix_import's exists method
         # so we can check that it's doing the right thing
         self.files_checked = []
@@ -3293,9 +3293,9 @@
 
     def check_both(self, b, a):
         self.always_exists = True
-        FixerTestCase.check(self, b, a)
+        super(Test_import, self).check(b, a)
         self.always_exists = False
-        FixerTestCase.unchanged(self, b)
+        super(Test_import, self).unchanged(b)
 
     def test_files_checked(self):
         def p(path):
@@ -3372,6 +3372,11 @@
         a = "from . import foo, bar"
         self.check_both(b, a)
 
+    def test_import_as(self):
+        b = "import foo as x"
+        a = "from . import foo as x"
+        self.check_both(b, a)
+
     def test_dotted_import(self):
         b = "import foo.bar"
         a = "from . import foo.bar"
@@ -3766,6 +3771,17 @@
         """
         self.check(b, a)
 
+        b = """
+        class X:
+            __metaclass__ = Meta
+            save.py = 23
+        """
+        a = """
+        class X(metaclass=Meta):
+            save.py = 23
+        """
+        self.check(b, a)
+
 
 class Test_getcwdu(FixerTestCase):
 
