Index: branches/release-35/lib/MT/BackupRestore.pm
===================================================================
--- branches/release-35/lib/MT/BackupRestore.pm (revision 1902)
+++ branches/release-35/lib/MT/BackupRestore.pm (revision 1948)
@@ -178,4 +178,10 @@
             $progress->("$err\n", 'Error');
             next;
+        }
+        my @metacolumns;
+        if ( exists( $class->properties->{meta} )
+          && $class->properties->{meta} ) {
+            require MT::Meta;
+            @metacolumns = MT::Meta->metadata_by_class( $class );
         }
         my $records = 0;
@@ -215,5 +221,5 @@
                     next;
                 }
-                $bytes += $printer->($object->to_xml(undef, $args) . "\n");
+                $bytes += $printer->($object->to_xml(undef, \@metacolumns) . "\n");
                 $records++;
                 if ($size && ($bytes >= $size)) {
@@ -669,5 +675,5 @@
 sub to_xml {
     my $obj = shift;
-    my ($namespace, $args) = @_;
+    my ($namespace, $metacolumns) = @_;
 
     my $coldefs = $obj->column_defs;
@@ -696,4 +702,21 @@
         }
     }
+    my ( @meta_elements, @meta_blobs );
+    if ( defined( $metacolumns ) && @$metacolumns ) {
+        foreach my $metacolumn ( @$metacolumns ) {
+            my $name = $metacolumn->{name};
+            if ($obj->$name || (defined($obj->$name) && ('0' eq $obj->$name))) {
+                if ( 'vclob' eq $metacolumn->{type} ) {
+                    push @meta_elements, $name;
+                }
+                elsif ( 'vblob' eq $metacolumn->{type} ) {
+                    push @meta_blobs, $name;
+                }
+                else {
+                    $xml .= " $name='" . MT::Util::encode_xml($obj->$name, 1) . "'";
+                }
+            }
+        }
+    }
     $xml .= '>';
     $xml .= "<$_>" . MT::Util::encode_xml($obj->column($_), 1) . "</$_>" foreach @elements;
@@ -706,4 +729,6 @@
                 "</$meta_col>";
     }
+    $xml .= "<$_>" . MT::Util::encode_xml($obj->$_, 1) . "</$_>" foreach @meta_elements;
+    $xml .= "<$_>" . MIME::Base64::encode_base64($obj->$_, '') . "</$_>" foreach @meta_blobs;
     $xml .= '</' . $elem . '>';
     $xml;
Index: branches/release-35/lib/MT/BackupRestore/BackupFileHandler.pm
===================================================================
--- branches/release-35/lib/MT/BackupRestore/BackupFileHandler.pm (revision 1905)
+++ branches/release-35/lib/MT/BackupRestore/BackupFileHandler.pm (revision 1948)
@@ -9,4 +9,5 @@
 use strict;
 use XML::SAX::Base;
+use MIME::Base64;
 
 @MT::BackupRestore::BackupFileHandler::ISA = qw(XML::SAX::Base);
@@ -91,5 +92,6 @@
                     $obj = $class->load({ name => $column_data{name} });
                     if ($obj) {
-                        if ( $obj->id == MT->instance->user->id ) {
+                        if ( UNIVERSAL::isa('MT::App', MT->instance)
+                          && ( $obj->id == MT->instance->user->id ) ) {
                             MT->log({ message => MT->translate(
                                 "User with the same name as the name of the currently logged in ([_1]) found.  Skipped the record.", $obj->name),
@@ -153,5 +155,17 @@
                     my $success = $obj->restore_parent_ids(\%column_data, $objects);
                     if ($success) {
-                        $obj->set_values(\%column_data);
+                        require MT::Meta;
+                        my @metacolumns = MT::Meta->metadata_by_class( ref($obj) );
+                        my %metacolumns = map { $_->{name} => $_->{type} } @metacolumns;
+                        $self->{metacolumns}{ref($obj)} = \%metacolumns;
+                        my %realcolumn_data = map { $_ => $column_data{$_} }
+                            grep { !exists($metacolumns{$_}) }
+                                keys %column_data;
+                        $obj->set_values(\%realcolumn_data);
+                        foreach my $metacol ( keys %metacolumns ) {
+                            next if ( 'vclob' eq $metacolumns{$metacol} )
+                                 || ( 'vblob' eq $metacolumns{$metacol} );
+                            $obj->$metacol( $column_data{$metacol} );
+                        }
                         $self->{current} = $obj;
                     } else {
@@ -202,10 +216,25 @@
             
             my $defs = $obj->column_defs;
-            if ('blob' eq $defs->{$column_name}->{type}) {
-                require MIME::Base64;
-                $obj->column($column_name, MIME::Base64::decode_base64($text));
-            } else {
-                $text = MT::I18N::encode_text($text, 'utf-8');
-                $obj->column($column_name, $text);
+            if ( exists( $defs->{$column_name} ) ) {
+                if ('blob' eq $defs->{$column_name}->{type}) {
+                    $obj->column($column_name, MIME::Base64::decode_base64($text));
+                } else {
+                    $text = MT::I18N::encode_text($text, 'utf-8');
+                    $obj->column($column_name, $text);
+                }
+            }
+            elsif ( my $metacolumns = $self->{metacolumns}{ref($obj)} ) {
+                if ( my $type = $metacolumns->{$column_name} ) {
+                    if ( 'vblob' eq $type ) {
+                        $self->{callback}->($text);
+                        $text = MIME::Base64::decode_base64($text);
+                        $self->{callback}->($text);
+                        $obj->$column_name( $text );
+                    }
+                    else {
+                        $text = MT::I18N::encode_text($text, 'utf-8');
+                        $obj->$column_name( $text );
+                    }
+                }
             }
         } else {
