diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
index e8e06fd..14cba46 100644
--- a/src/com/android/contacts/vcard/ImportProcessor.java
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -62,8 +62,27 @@
 public class ImportProcessor {
     private static final String LOG_TAG = ImportProcessor.class.getSimpleName();
 
-    private class CustomConnection implements ServiceConnection {
+    private class ImportProcessorConnection implements ServiceConnection {
         private Messenger mMessenger;
+        private boolean mBound;
+
+        public synchronized void tryBind() {
+            if (!mContext.bindService(new Intent(mContext, VCardService.class),
+                    mConnection, Context.BIND_AUTO_CREATE)) {
+                throw new RuntimeException("Failed to bind to VCardService.");
+            }
+            mBound = true;
+        }
+
+        public synchronized void tryUnbind() {
+            if (mBound) {
+                mContext.unbindService(mConnection);
+            } else {
+                // TODO: Not graceful.
+                Log.w(LOG_TAG, "unbind() is tried while ServiceConnection is not bound yet");
+            }
+            mBound = false;
+        }
 
         public void sendFinisheNotification() {
             try {
@@ -87,7 +106,7 @@
 
     private final Context mContext;
 
-    private final CustomConnection mConnection = new CustomConnection();
+    private final ImportProcessorConnection mConnection = new ImportProcessorConnection();
 
     private ContentResolver mResolver;
     private NotificationManager mNotificationManager;
@@ -139,10 +158,7 @@
     public ImportProcessor(final Context context) {
         mContext = context;
 
-        if (!mContext.bindService(new Intent(mContext, VCardService.class),
-                mConnection, Context.BIND_AUTO_CREATE)) {
-            throw new RuntimeException("Failed to bind to VCardService.");
-        }
+        mConnection.tryBind();
     }
 
     /**
@@ -194,7 +210,7 @@
      */
     private void process() {
         if (!mReadyForRequest) {
-            mContext.unbindService(mConnection);
+            mConnection.tryUnbind();
             throw new RuntimeException(
                     "process() is called before request being pushed "
                     + "or after this object's finishing its processing.");
@@ -222,7 +238,7 @@
             // TODO: verify this works fine.
             mReadyForRequest = false;  // Just in case.
             mNotifier.resetTotalCount();
-            mContext.unbindService(mConnection);
+            mConnection.tryUnbind();
         }
     }
 
diff --git a/src/com/android/contacts/vcard/ImportVCardActivity.java b/src/com/android/contacts/vcard/ImportVCardActivity.java
index 1140ff8..3c3bb78 100644
--- a/src/com/android/contacts/vcard/ImportVCardActivity.java
+++ b/src/com/android/contacts/vcard/ImportVCardActivity.java
@@ -151,11 +151,12 @@
                         // onServiceConnected() is already finished and we need to
                         // "manually" call unbindService() here.
                         unbindService(this);
+                        mConnected = false;
                         mDisconnectAndFinishDone = true;
                         finish();
                     } else {
                         // If not connected, finish() must be called when connected, as
-                        // We cann not call finish() now.
+                        // We cannot call finish() now.
                     }
                 }
             }
