Index: Dev/github/GitHubBackup.pm
===================================================================
--- Dev/github/GitHubBackup.pm	(revision 682d2d96820ebfdfb0bd63e6f3cbd57a2134e50d)
+++ Dev/github/GitHubBackup.pm	(revision 6473c3b009e250b88e905f8a8042a6dce5c4832c)
@@ -162,8 +162,9 @@
 }
 
-sub clone_git {
-    my $self = shift;
-    
-    my $dir = $self->directory . '.git';
+sub sync {
+    my $self = shift;
+    my $url = shift;
+    my $dir = shift;
+    
     if (-d "$dir") {
         local $CWD = $dir;
@@ -175,5 +176,17 @@
     print "clone ", $dir, "\n";
     mkpath $dir;
-    Git::Repository->run(clone => '--mirror' => $self->{clone_url} => $dir);
+    Git::Repository->run(clone => '--mirror' => $url => $dir);
+    
+    return $self;
+}
+
+sub clone_git {
+    my $self = shift;
+    
+    my $dir = $self->directory . '.git';
+    my $url = $self->{clone_url};
+    
+    $self->sync($url => $dir);
+    
     return $self;
 }
@@ -207,4 +220,5 @@
     
     my $remotes = Git::Repository->run(branch => '--remotes');
+    my @fetch;
     foreach my $fork (@{$self->{forks}}) {
         if ($remotes =~ /$fork->{full_name}/) {
@@ -214,8 +228,11 @@
         print "add ", $fork->{full_name}, "\n";
         Git::Repository->run(remote => add => $fork->{full_name} => $fork->{clone_url});
-    }
-    
-    print "fetch ", $dir, "\n";
-    Git::Repository->run(fetch => '--all');
+        push @fetch, $fork->{full_name};
+    }
+    
+    foreach my $fork (@fetch) {
+        print "fetch ", $fork, "\n";
+        Git::Repository->run(fetch => $fork);
+    }
     
     return $self;
@@ -224,4 +241,11 @@
 sub clone_wiki {
     my $self = shift;
+    
+    my $dir = $self->directory . '.wiki.git';
+    my $url = 'https://github.com/' . $self->{full_name} . '.wiki.git';
+    
+    $self->sync($url => $dir);
+    
+    return $self;
 }
 
