diff --git a/Lib/fractions.py b/Lib/fractions.py
index 5242f8f..fcebb4f 100755
--- a/Lib/fractions.py
+++ b/Lib/fractions.py
@@ -54,7 +54,7 @@
     __slots__ = ('_numerator', '_denominator')
 
     # We're immutable, so use __new__ not __init__
-    def __new__(cls, numerator=0, denominator=1):
+    def __new__(cls, numerator=0, denominator=None):
         """Constructs a Rational.
 
         Takes a string like '3/2' or '1.5', another Rational, or a
@@ -63,8 +63,13 @@
         """
         self = super(Fraction, cls).__new__(cls)
 
-        if not isinstance(numerator, int) and denominator == 1:
-            if isinstance(numerator, str):
+        if denominator is None:
+            if isinstance(numerator, numbers.Rational):
+                self._numerator = numerator.numerator
+                self._denominator = numerator.denominator
+                return self
+
+            elif isinstance(numerator, str):
                 # Handle construction from strings.
                 m = _RATIONAL_FORMAT.match(numerator)
                 if m is None:
@@ -91,18 +96,22 @@
                 if m.group('sign') == '-':
                     numerator = -numerator
 
-            elif isinstance(numerator, numbers.Rational):
-                # Handle copies from other rationals. Integrals get
-                # caught here too, but it doesn't matter because
-                # denominator is already 1.
-                other_rational = numerator
-                numerator = other_rational.numerator
-                denominator = other_rational.denominator
+            else:
+                raise TypeError("argument should be a string "
+                                "or a Rational instance")
+
+        elif (isinstance(numerator, numbers.Rational) and
+            isinstance(denominator, numbers.Rational)):
+            numerator, denominator = (
+                numerator.numerator * denominator.denominator,
+                denominator.numerator * numerator.denominator
+                )
+        else:
+            raise TypeError("both arguments should be "
+                            "Rational instances")
 
         if denominator == 0:
             raise ZeroDivisionError('Fraction(%s, 0)' % numerator)
-        numerator = operator.index(numerator)
-        denominator = operator.index(denominator)
         g = gcd(numerator, denominator)
         self._numerator = numerator // g
         self._denominator = denominator // g
diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py
index 448e32d..e321914 100644
--- a/Lib/test/test_fractions.py
+++ b/Lib/test/test_fractions.py
@@ -60,13 +60,19 @@
         self.assertEquals((7, 15), _components(F(7, 15)))
         self.assertEquals((10**23, 1), _components(F(10**23)))
 
+        self.assertEquals((3, 77), _components(F(F(3, 7), 11)))
+        self.assertEquals((-9, 5), _components(F(2, F(-10, 9))))
+        self.assertEquals((2486, 2485), _components(F(F(22, 7), F(355, 113))))
+
         self.assertRaisesMessage(ZeroDivisionError, "Fraction(12, 0)",
                                  F, 12, 0)
         self.assertRaises(TypeError, F, 1.5)
         self.assertRaises(TypeError, F, 1.5 + 3j)
 
-        self.assertRaises(TypeError, F, F(1, 2), 3)
         self.assertRaises(TypeError, F, "3/2", 3)
+        self.assertRaises(TypeError, F, 3, 0j)
+        self.assertRaises(TypeError, F, 3, 1j)
+
 
     def testFromString(self):
         self.assertEquals((5, 1), _components(F("5")))
