diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java
index 603f691f..4fc3edc 100644
--- a/core/java/com/android/internal/backup/LocalTransport.java
+++ b/core/java/com/android/internal/backup/LocalTransport.java
@@ -47,25 +47,26 @@
     }
 
 
-    public String transportDirName() throws RemoteException {
+    public String transportDirName() {
         return TRANSPORT_DIR_NAME;
     }
 
-    public long requestBackupTime() throws RemoteException {
+    public long requestBackupTime() {
         // any time is a good time for local backup
         return 0;
     }
 
-    public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data,
-            boolean wipeAllFirst) throws RemoteException {
+    public int initializeDevice() {
+        if (DEBUG) Log.v(TAG, "wiping all data");
+        deleteContents(mDataDir);
+        return BackupConstants.TRANSPORT_OK;
+    }
+
+    public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data) {
         if (DEBUG) Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName);
 
         File packageDir = new File(mDataDir, packageInfo.packageName);
         packageDir.mkdirs();
-        if (wipeAllFirst) {
-            if (DEBUG) Log.v(TAG, "wiping all data first");
-            deleteContents(mDataDir);
-        }
 
         // Each 'record' in the restore set is kept in its own file, named by
         // the record key.  Wind through the data file, extracting individual
@@ -130,7 +131,7 @@
         }
     }
 
-    public boolean clearBackupData(PackageInfo packageInfo) {
+    public int clearBackupData(PackageInfo packageInfo) {
         if (DEBUG) Log.v(TAG, "clearBackupData() pkg=" + packageInfo.packageName);
 
         File packageDir = new File(mDataDir, packageInfo.packageName);
@@ -138,12 +139,12 @@
             f.delete();
         }
         packageDir.delete();
-        return true;
+        return BackupConstants.TRANSPORT_OK;
     }
 
-    public boolean finishBackup() throws RemoteException {
+    public int finishBackup() {
         if (DEBUG) Log.v(TAG, "finishBackup()");
-        return true;
+        return BackupConstants.TRANSPORT_OK;
     }
 
     // Restore handling
@@ -154,11 +155,11 @@
         return array;
     }
 
-    public boolean startRestore(long token, PackageInfo[] packages) {
+    public int startRestore(long token, PackageInfo[] packages) {
         if (DEBUG) Log.v(TAG, "start restore " + token);
         mRestorePackages = packages;
         mRestorePackage = -1;
-        return true;
+        return BackupConstants.TRANSPORT_OK;
     }
 
     public String nextRestorePackage() {
@@ -175,7 +176,7 @@
         return "";
     }
 
-    public boolean getRestoreData(ParcelFileDescriptor outFd) {
+    public int getRestoreData(ParcelFileDescriptor outFd) {
         if (mRestorePackages == null) throw new IllegalStateException("startRestore not called");
         if (mRestorePackage < 0) throw new IllegalStateException("nextRestorePackage not called");
         File packageDir = new File(mDataDir, mRestorePackages[mRestorePackage].packageName);
@@ -183,9 +184,9 @@
         // The restore set is the concatenation of the individual record blobs,
         // each of which is a file in the package's directory
         File[] blobs = packageDir.listFiles();
-        if (blobs == null) {
+        if (blobs == null) {  // nextRestorePackage() ensures the dir exists, so this is an error
             Log.e(TAG, "Error listing directory: " + packageDir);
-            return false;  // nextRestorePackage() ensures the dir exists, so this is an error
+            return BackupConstants.TRANSPORT_ERROR;
         }
 
         // We expect at least some data if the directory exists in the first place
@@ -206,10 +207,10 @@
                     in.close();
                 }
             }
-            return true;
+            return BackupConstants.TRANSPORT_OK;
         } catch (IOException e) {
             Log.e(TAG, "Unable to read backup records", e);
-            return false;
+            return BackupConstants.TRANSPORT_ERROR;
         }
     }
 
