Index: branches/release-35/lib/MT/CMS/Tools.pm
===================================================================
--- branches/release-35/lib/MT/CMS/Tools.pm (revision 1902)
+++ branches/release-35/lib/MT/CMS/Tools.pm (revision 1904)
@@ -780,4 +780,28 @@
             $param->{tmp_dir} = $dir;
         }
+        elsif ( defined $asset_ids ) {
+            my %asset_ids = @$asset_ids;
+            my %error_assets;
+            _restore_non_blog_asset( $app, $dir, $asset_ids, \%error_assets );
+            if (%error_assets) {
+                my $data;
+                while ( my ( $key, $value ) = each %error_assets ) {
+                    $data .=
+                      $app->translate( 'MT::Asset#[_1]: ', $key ) . $value . "\n";
+                }
+                my $message = $app->translate(
+                    'Some of the actual files for assets could not be restored.');
+                $app->log(
+                    {
+                        message  => $message,
+                        level    => MT::Log::WARNING(),
+                        class    => 'system',
+                        category => 'restore',
+                        metadata => $data,
+                    }
+                );
+                $error .= $message;
+            }
+        }
     }
     else {
@@ -846,4 +870,28 @@
                 $param->{tmp_dir} = $tmp;
             }
+            elsif ( defined $asset_ids ) {
+                my %asset_ids = @$asset_ids;
+                my %error_assets;
+                _restore_non_blog_asset( $app, $tmp, \%asset_ids, \%error_assets );
+                if (%error_assets) {
+                    my $data;
+                    while ( my ( $key, $value ) = each %error_assets ) {
+                        $data .=
+                          $app->translate( 'MT::Asset#[_1]: ', $key ) . $value . "\n";
+                    }
+                    my $message = $app->translate(
+                        'Some of the actual files for assets could not be restored.');
+                    $app->log(
+                        {
+                            message  => $message,
+                            level    => MT::Log::WARNING(),
+                            class    => 'system',
+                            category => 'restore',
+                            metadata => $data,
+                        }
+                    );
+                    $error .= $message;
+                }
+            }
         }
     }
@@ -915,4 +963,19 @@
 }
 
+sub _restore_non_blog_asset {
+    my ( $app, $tmp_dir, $asset_ids, $error_assets ) = @_;
+    require MT::FileMgr;
+    my $fmgr = MT::FileMgr->new('Local');
+    foreach my $new_id ( keys %$asset_ids ) {
+        my $asset = $app->model('asset')->load($new_id);
+        next unless $asset;
+        my $old_id = $asset_ids->{$new_id};
+        my $filename = $old_id . '-' . $asset->file_name;
+        my $file    = File::Spec->catfile( $tmp_dir, $filename );
+        MT::BackupRestore->restore_asset( $file, $asset, $old_id, $fmgr,
+            $error_assets, sub { $app->print(@_); } );
+    }
+}
+
 sub adjust_sitepath {
     my $app  = shift;
@@ -935,4 +998,5 @@
     $app->print( $app->build_page( 'dialog/restore_start.tmpl', {} ) );
 
+    my $asset_class = $app->model('asset');
     my %error_assets;
     my %blogs_meta;
@@ -1011,5 +1075,5 @@
 
         my @assets =
-          $app->model('asset')->load( { blog_id => $id, class => '*' } );
+          $asset_class->load( { blog_id => $id, class => '*' } );
         foreach my $asset (@assets) {
             my $path = $asset->column('file_path');
@@ -1041,5 +1105,5 @@
             $app->print( $app->translate("ok") . "\n" );
             unless ( $q->param('redirect') ) {
-                my $old_id   = $asset_ids{ $asset->id };
+                my $old_id   = delete $asset_ids{ $asset->id };
                 my $filename = "$old_id-" . $asset->file_name;
                 my $file     = File::Spec->catfile( $tmp_dir, $filename );
@@ -1048,4 +1112,7 @@
             }
         }
+    }
+    unless ( $q->param('redirect') ) {
+        _restore_non_blog_asset( $app, $tmp_dir, \%asset_ids, \%error_assets );
     }
     if (%error_assets) {
