diff --git a/Lib/lib2to3/fixes/fix_import.py b/Lib/lib2to3/fixes/fix_import.py
index 52e8408..c188fce 100644
--- a/Lib/lib2to3/fixes/fix_import.py
+++ b/Lib/lib2to3/fixes/fix_import.py
@@ -7,19 +7,20 @@
 And this import:
     import spam
 Becomes:
-    import .spam
+    from . import spam
 """
 
 # Local imports
 from . import basefix
 from os.path import dirname, join, exists, pathsep
+from .util import FromImport
 
 class FixImport(basefix.BaseFix):
 
     PATTERN = """
-    import_from< 'from' imp=any 'import' any >
+    import_from< type='from' imp=any 'import' any >
     |
-    import_name< 'import' imp=any >
+    import_name< type='import' imp=any >
     """
 
     def transform(self, node, results):
@@ -33,15 +34,19 @@
             # I guess this is a global import -- skip it!
             return
 
-        # Some imps are top-level (eg: 'import ham')
-        # some are first level (eg: 'import ham.eggs')
-        # some are third level (eg: 'import ham.eggs as spam')
-        # Hence, the loop
-        while not hasattr(imp, 'value'):
-            imp = imp.children[0]
-
-        imp.value = "." + imp.value
-        node.changed()
+        if results['type'].value == 'from':
+            # Some imps are top-level (eg: 'import ham')
+            # some are first level (eg: 'import ham.eggs')
+            # some are third level (eg: 'import ham.eggs as spam')
+            # Hence, the loop
+            while not hasattr(imp, 'value'):
+                imp = imp.children[0]
+            imp.value = "." + imp.value
+            node.changed()
+        else:
+            new = FromImport('.', getattr(imp, 'content', None) or [imp])
+            new.prefix = node.get_prefix()
+            node = new
         return node
 
 def probably_a_local_import(imp_name, file_path):
diff --git a/Lib/lib2to3/fixes/fix_itertools_imports.py b/Lib/lib2to3/fixes/fix_itertools_imports.py
index 7adf643..e60ec20 100644
--- a/Lib/lib2to3/fixes/fix_itertools_imports.py
+++ b/Lib/lib2to3/fixes/fix_itertools_imports.py
@@ -17,6 +17,9 @@
                 # Handle 'import ... as ...'
                 continue
             if child.value in ('imap', 'izip', 'ifilter'):
+                # The value must be set to none in case child == import,
+                # so that the test for empty imports will work out
+                child.value = None
                 child.remove()
             elif child.value == 'ifilterfalse':
                 node.changed()
@@ -34,10 +37,9 @@
         if str(children[-1]) == ',':
             children[-1].remove()
 
-        # If there is nothing left, return a blank line
+        # If there are no imports left, just get rid of the entire statement
         if not (imports.children or getattr(imports, 'value', None)):
-            new = BlankLine()
-            new.prefix = node.get_prefix()
-        else:
-            new = node
-        return new
+            p = node.get_prefix()
+            node = BlankLine()
+            node.prefix = p
+        return node
diff --git a/Lib/lib2to3/fixes/util.py b/Lib/lib2to3/fixes/util.py
index 806bf28..b48aeb3 100644
--- a/Lib/lib2to3/fixes/util.py
+++ b/Lib/lib2to3/fixes/util.py
@@ -108,6 +108,26 @@
                         inner,
                         Leaf(token.RBRACE, "]")])
 
+def FromImport(package_name, name_leafs):
+    """ Return an import statement in the form:
+        from package import name_leafs"""
+    # XXX: May not handle dotted imports properly (eg, package_name='foo.bar')
+    assert package_name == '.' or '.' not in package.name, "FromImport has "\
+           "not been tested with dotted package names -- use at your own "\
+           "peril!"
+
+    for leaf in name_leafs:
+        # Pull the leaves out of their old tree
+        leaf.remove()
+
+    children = [Leaf(token.NAME, 'from'),
+                Leaf(token.NAME, package_name, prefix=" "),
+                Leaf(token.NAME, 'import', prefix=" "),
+                Node(syms.import_as_names, name_leafs)]
+    imp = Node(syms.import_from, children)
+    return imp
+
+
 ###########################################################
 ### Determine whether a node represents a given literal
 ###########################################################
diff --git a/Lib/lib2to3/tests/benchmark.py b/Lib/lib2to3/tests/benchmark.py
index 1c4b8fc..e1b293f 100644
--- a/Lib/lib2to3/tests/benchmark.py
+++ b/Lib/lib2to3/tests/benchmark.py
@@ -13,7 +13,7 @@
 from time import time
 
 # Test imports
-from support import adjust_path
+from .support import adjust_path
 adjust_path()
 
 # Local imports
diff --git a/Lib/lib2to3/tests/pytree_idempotency.py b/Lib/lib2to3/tests/pytree_idempotency.py
index ca5441a..3f3ab92 100755
--- a/Lib/lib2to3/tests/pytree_idempotency.py
+++ b/Lib/lib2to3/tests/pytree_idempotency.py
@@ -7,7 +7,7 @@
 __author__ = "Guido van Rossum <guido@python.org>"
 
 # Support imports (need to be imported first)
-import support
+from . import support
 
 # Python imports
 import os
diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py
index 056e95b..34ea3e5 100755
--- a/Lib/lib2to3/tests/test_fixers.py
+++ b/Lib/lib2to3/tests/test_fixers.py
@@ -3036,6 +3036,10 @@
         a = ""
         self.check(b, a)
 
+        b = "from itertools import izip"
+        a = ""
+        self.check(b, a)
+
     def test_import_as(self):
         b = "from itertools import izip, bar as bang, imap"
         a = "from itertools import bar as bang"
@@ -3105,6 +3109,10 @@
             self.failUnlessEqual(set(self.files_checked), expected_checks)
 
     def test_from(self):
+        b = "from foo import bar, baz"
+        a = "from .foo import bar, baz"
+        self.check_both(b, a)
+
         b = "from foo import bar"
         a = "from .foo import bar"
         self.check_both(b, a)
@@ -3121,17 +3129,21 @@
 
     def test_import(self):
         b = "import foo"
-        a = "import .foo"
+        a = "from . import foo"
+        self.check_both(b, a)
+
+        b = "import foo, bar"
+        a = "from . import foo, bar"
         self.check_both(b, a)
 
     def test_dotted_import(self):
         b = "import foo.bar"
-        a = "import .foo.bar"
+        a = "from . import foo.bar"
         self.check_both(b, a)
 
     def test_dotted_import_as(self):
         b = "import foo.bar as bang"
-        a = "import .foo.bar as bang"
+        a = "from . import foo.bar as bang"
         self.check_both(b, a)
 
 
