diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2ed8f59..18675a7 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -33,9 +33,5 @@
                     android:name="android.intent.action.BOOT_COMPLETED"/>
             </intent-filter>
         </receiver>
-
-        <service
-            android:name=".OneTimeInitializerService">
-        </service>
     </application>
 </manifest>
diff --git a/src/com/android/onetimeinitializer/OneTimeInitializerService.java b/src/com/android/onetimeinitializer/OneTimeInitializer.java
similarity index 88%
rename from src/com/android/onetimeinitializer/OneTimeInitializerService.java
rename to src/com/android/onetimeinitializer/OneTimeInitializer.java
index cf72eae..aa37036 100644
--- a/src/com/android/onetimeinitializer/OneTimeInitializerService.java
+++ b/src/com/android/onetimeinitializer/OneTimeInitializer.java
@@ -16,7 +16,6 @@
 
 package com.android.onetimeinitializer;
 
-import android.app.IntentService;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.ContentValues;
@@ -37,11 +36,8 @@
  * BOOT_COMPLETED broadcast intent instead.  This means, when the app is upgraded, the
  * initialization code here won't run until the device reboots.
  */
-public class OneTimeInitializerService extends IntentService {
-
-    // class name is too long
-    private static final String TAG = OneTimeInitializerService.class.getSimpleName()
-            .substring(0, 22);
+public class OneTimeInitializer {
+    private static final String TAG = OneTimeInitializer.class.getSimpleName();
 
     // Name of the shared preferences file.
     private static final String SHARED_PREFS_FILE = "oti";
@@ -58,21 +54,16 @@
     private static final String LAUNCHER_INTENT_COLUMN = "intent";
 
     private SharedPreferences mPreferences;
+    private Context mContext;
 
-    public OneTimeInitializerService() {
-        super("OneTimeInitializer Service");
+    OneTimeInitializer(Context context) {
+        mContext = context;
+        mPreferences = mContext.getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
     }
 
-    @Override
-    public void onCreate() {
-        super.onCreate();
-        mPreferences = getSharedPreferences(SHARED_PREFS_FILE, Context.MODE_PRIVATE);
-    }
-
-    @Override
-    protected void onHandleIntent(Intent intent) {
+    void initialize() {
         if (Log.isLoggable(TAG, Log.VERBOSE)) {
-            Log.v(TAG, "OneTimeInitializerService.onHandleIntent");
+            Log.v(TAG, "OneTimeInitializer.initialize");
         }
 
         final int currentVersion = getMappingVersion();
@@ -100,7 +91,7 @@
     }
 
     private void updateDialtactsLauncher() {
-        ContentResolver cr = getContentResolver();
+        ContentResolver cr = mContext.getContentResolver();
         Cursor c = cr.query(LAUNCHER_CONTENT_URI,
                 new String[]{LAUNCHER_ID_COLUMN, LAUNCHER_INTENT_COLUMN}, null, null, null);
         if (c == null) {
diff --git a/src/com/android/onetimeinitializer/OneTimeInitializerReceiver.java b/src/com/android/onetimeinitializer/OneTimeInitializerReceiver.java
index 0f99a2b..07e6501 100644
--- a/src/com/android/onetimeinitializer/OneTimeInitializerReceiver.java
+++ b/src/com/android/onetimeinitializer/OneTimeInitializerReceiver.java
@@ -22,17 +22,21 @@
 import android.util.Log;
 
 /**
- * BroadcastReceiver that starts the service to performs one time initialization
- * at bootup time.
+ * BroadcastReceiver that performs one time initialization at bootup time.
  */
 public class OneTimeInitializerReceiver extends BroadcastReceiver {
-
-    private static final String TAG = OneTimeInitializerReceiver.class.getSimpleName()
-            .substring(0, 22);
+    private static final String TAG = "OneTimeInitializerReceiver";
 
     @Override
-    public void onReceive(Context context, Intent intent) {
+    public void onReceive(final Context context, Intent intent) {
         Log.v(TAG, "OneTimeInitializerReceiver.onReceive");
-        context.startService(new Intent(context, OneTimeInitializerService.class));
+        final PendingResult result = goAsync();
+        new Thread(() -> {
+            try {
+                new OneTimeInitializer(context).initialize();
+            } finally {
+                result.finish();
+            }
+        }).start();
     }
 }
