diff --git a/languages/perl6/src/classes/Range.pir b/languages/perl6/src/classes/Range.pir
index ecd24ca..9797795 100644
--- a/languages/perl6/src/classes/Range.pir
+++ b/languages/perl6/src/classes/Range.pir
@@ -53,11 +53,12 @@ we need to not do that.
 =cut
 
 .sub 'list' :method
-    .local pmc res, cur_val
+    .local pmc res, cur_val, it
+    it = clone self
     res = new 'List'
   it_loop:
-    unless self goto it_loop_end
-    cur_val = shift self
+    unless it goto it_loop_end
+    cur_val = shift it
     push res, cur_val
     goto it_loop
   it_loop_end:
@@ -122,6 +123,21 @@ Just returns this Range itself, since a Range is an iterator.
     .return (self)
 .end
 
+=item clone (vtable)
+
+Clone it self
+
+=cut
+
+.sub 'clone' :method :vtable
+    .local pmc from, to, retv
+    $P0 = self.'from'()
+    from = clone $P0
+    $P0 = self.'to'()
+    to = clone $P0
+    retv = 'infix:..'(from, to)
+    .return (retv)
+.end
 
 =item shift_pmc (vtable)
 
