diff --git a/build/gen_parrot.pl b/build/gen_parrot.pl
index 63173a3..57b1daf 100644
--- a/build/gen_parrot.pl
+++ b/build/gen_parrot.pl
@@ -43,20 +43,26 @@ close $REQ;
     }
 }
 
-print "Checking out Parrot r$reqsvn via svn...\n";
-system_or_die(qw(svn checkout -r),  $reqsvn , qw(https://svn.parrot.org/parrot/trunk parrot));
-
-chdir('parrot') || die "Can't chdir to 'parrot': $!";
-
+if (-e 'parrot' && -d _) {
+    chdir('parrot') || die "Can't chdir to 'parrot': $!";
 
 ##  If we have a Makefile from a previous build, do a 'make realclean'
-if (-f 'Makefile') {
-    my %config = read_parrot_config();
-    my $make = $config{'make'};
-    if ($make) {
-        print "\nPerforming '$make realclean' ...\n";
-        system_or_die($make, "realclean");
+    if (-f 'Makefile') {
+        my %config = read_parrot_config();
+        my $make = $config{'make'};
+        if ($make) {
+            print "\nPerforming '$make realclean' ...\n";
+            system_or_die($make, "realclean");
+        }
     }
+
+    print "Update Parrot r$reqsvn via svn...\n";
+    system_or_die(qw(svn update -r),  $reqsvn);
+} else {
+    print "Checking out Parrot r$reqsvn via svn...\n";
+    system_or_die(qw(svn checkout -r),  $reqsvn , qw(https://svn.parrot.org/parrot/trunk parrot));
+
+    chdir('parrot') || die "Can't chdir to 'parrot': $!";
 }
 
 print "\nConfiguring Parrot ...\n";
