diff --git a/src/com/android/managedprovisioning/task/InstallPackageTask.java b/src/com/android/managedprovisioning/task/InstallPackageTask.java
index 1411430..909951b 100644
--- a/src/com/android/managedprovisioning/task/InstallPackageTask.java
+++ b/src/com/android/managedprovisioning/task/InstallPackageTask.java
@@ -27,7 +27,6 @@
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.managedprovisioning.common.ProvisionLogger;
 import com.android.managedprovisioning.R;
-import com.android.managedprovisioning.common.SettingsFacade;
 import com.android.managedprovisioning.model.ProvisioningParams;
 
 import java.io.File;
@@ -40,11 +39,9 @@
     public static final int ERROR_PACKAGE_INVALID = 0;
     public static final int ERROR_INSTALLATION_FAILED = 1;
 
-    private final SettingsFacade mSettingsFacade;
     private final DownloadPackageTask mDownloadPackageTask;
 
     private PackageManager mPm;
-    private boolean mInitialPackageVerifierEnabled;
 
     /**
      * Create an InstallPackageTask. When run, this will attempt to install the device admin package
@@ -57,20 +54,9 @@
             Context context,
             ProvisioningParams params,
             Callback callback) {
-        this(new SettingsFacade(), downloadPackageTask, context, params, callback);
-    }
-
-    @VisibleForTesting
-    InstallPackageTask(
-            SettingsFacade settingsFacade,
-            DownloadPackageTask downloadPackageTask,
-            Context context,
-            ProvisioningParams params,
-            Callback callback) {
         super(context, params, callback);
 
         mPm = context.getPackageManager();
-        mSettingsFacade = checkNotNull(settingsFacade);
         mDownloadPackageTask = checkNotNull(downloadPackageTask);
     }
 
@@ -94,16 +80,12 @@
         String packageName = mProvisioningParams.inferDeviceAdminPackageName();
 
         ProvisionLogger.logi("Installing package");
-        mInitialPackageVerifierEnabled = mSettingsFacade.isPackageVerifierEnabled(mContext);
         if (TextUtils.isEmpty(packageLocation)) {
             // Do not log time if not installing any package, as that isn't useful.
             success();
             return;
         }
 
-        // Temporarily turn off package verification.
-        mSettingsFacade.setPackageVerifierEnabled(mContext, false);
-
         // Allow for replacing an existing package.
         // Needed in case this task is performed multiple times.
         mPm.installPackage(Uri.parse("file://" + packageLocation),
@@ -128,7 +110,6 @@
 
         @Override
         public void packageInstalled(String packageName, int returnCode) {
-            mSettingsFacade.setPackageVerifierEnabled(mContext, mInitialPackageVerifierEnabled);
             if (packageName != null && !packageName.equals(mPackageName))  {
                 ProvisionLogger.loge("Package doesn't have expected package name.");
                 error(ERROR_PACKAGE_INVALID);
diff --git a/tests/instrumentation/src/com/android/managedprovisioning/task/InstallPackageTaskTest.java b/tests/instrumentation/src/com/android/managedprovisioning/task/InstallPackageTaskTest.java
index f2bc4d9..8b76e2b 100644
--- a/tests/instrumentation/src/com/android/managedprovisioning/task/InstallPackageTaskTest.java
+++ b/tests/instrumentation/src/com/android/managedprovisioning/task/InstallPackageTaskTest.java
@@ -35,7 +35,6 @@
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.managedprovisioning.common.SettingsFacade;
 import com.android.managedprovisioning.model.ProvisioningParams;
 
 import org.mockito.ArgumentCaptor;
@@ -57,7 +56,6 @@
     @Mock private AbstractProvisioningTask.Callback mCallback;
     @Mock private DownloadPackageTask mDownloadPackageTask;
     private InstallPackageTask mTask;
-    private final SettingsFacade mSettingsFacade = new SettingsFacadeStub();
 
     @Override
     protected void setUp() throws Exception {
@@ -69,8 +67,7 @@
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mContext.getPackageName()).thenReturn(getContext().getPackageName());
 
-        mTask = new InstallPackageTask(mSettingsFacade, mDownloadPackageTask, mContext, TEST_PARAMS,
-                mCallback);
+        mTask = new InstallPackageTask(mDownloadPackageTask, mContext, TEST_PARAMS, mCallback);
     }
 
     @SmallTest
@@ -88,7 +85,6 @@
                 anyString());
         verify(mCallback).onSuccess(mTask);
         verifyNoMoreInteractions(mCallback);
-        assertTrue(mSettingsFacade.isPackageVerifierEnabled(mContext));
     }
 
     @SmallTest
@@ -108,7 +104,6 @@
         // THEN we receive a success callback
         verify(mCallback).onSuccess(mTask);
         verifyNoMoreInteractions(mCallback);
-        assertTrue(mSettingsFacade.isPackageVerifierEnabled(mContext));
     }
 
     @SmallTest
@@ -128,7 +123,6 @@
         // THEN we get a success callback, because an existing version of the DPC is present
         verify(mCallback).onSuccess(mTask);
         verifyNoMoreInteractions(mCallback);
-        assertTrue(mSettingsFacade.isPackageVerifierEnabled(mContext));
     }
 
     @SmallTest
@@ -148,7 +142,6 @@
         // THEN we get a success callback, because an existing version of the DPC is present
         verify(mCallback).onError(mTask, ERROR_INSTALLATION_FAILED);
         verifyNoMoreInteractions(mCallback);
-        assertTrue(mSettingsFacade.isPackageVerifierEnabled(mContext));
     }
 
     @SmallTest
@@ -168,7 +161,6 @@
         // THEN we get a success callback, because an existing version of the DPC is present
         verify(mCallback).onError(mTask, ERROR_PACKAGE_INVALID);
         verifyNoMoreInteractions(mCallback);
-        assertTrue(mSettingsFacade.isPackageVerifierEnabled(mContext));
     }
 
     private IPackageInstallObserver verifyPackageInstalled() {
@@ -185,18 +177,4 @@
         assertTrue(0 != (flagsCaptor.getValue() & PackageManager.INSTALL_REPLACE_EXISTING));
         return observerCaptor.getValue();
     }
-
-    private static class SettingsFacadeStub extends SettingsFacade {
-        private boolean mPackageVerifierEnabled = true;
-
-        @Override
-        public boolean isPackageVerifierEnabled(Context c) {
-            return mPackageVerifierEnabled;
-        }
-
-        @Override
-        public void setPackageVerifierEnabled(Context c, boolean packageVerifierEnabled) {
-            mPackageVerifierEnabled = packageVerifierEnabled;
-        }
-    }
 }
