diff --git a/src/libcore/iter/mod.rs b/src/libcore/iter/mod.rs
index 06c29b47bf921..6b55c4dc5e2f1 100644
--- a/src/libcore/iter/mod.rs
+++ b/src/libcore/iter/mod.rs
@@ -645,6 +645,20 @@ impl<I> Iterator for Cycle<I> where I: Clone + Iterator {
     }
 }
 
+#[stable(feature = "rust1", since = "1.0.0")]
+impl<I> Iterator for Cycle<I>
+where I: Clone + ExactSizeIterator, I::Item : Copy {
+    fn nth(&mut self, n: usize) -> Option<<I as Iterator>::Item> {
+        let cur_len = self.iter.len();
+        if n < cur_len {
+            self.iter.nth(n)
+        } else {
+            self.iter = self.orig.clone();
+            self.iter.nth((n - cur_len) % self.orig.len())
+        }
+    }
+}
+
 #[unstable(feature = "fused", issue = "35602")]
 impl<I> FusedIterator for Cycle<I> where I: Clone + Iterator {}