diff --git a/src/com/android/contacts/vcard/ExportProcessor.java b/src/com/android/contacts/vcard/ExportProcessor.java
index 15f6fd8..6a3dd86 100644
--- a/src/com/android/contacts/vcard/ExportProcessor.java
+++ b/src/com/android/contacts/vcard/ExportProcessor.java
@@ -224,31 +224,35 @@
         final Notification notification = new Notification();
         notification.icon = android.R.drawable.stat_sys_upload;
         notification.flags |= Notification.FLAG_ONGOING_EVENT;
-        
+        notification.tickerText = title;
+
         final RemoteViews remoteView = new RemoteViews(mService.getPackageName(),
                 R.layout.status_bar_ongoing_event_progress_bar);
         remoteView.setTextViewText(R.id.description, message);
         remoteView.setProgressBar(R.id.progress_bar, total, current, (total == -1));
+
         final String percentage = mService.getString(R.string.percentage,
                 String.valueOf((current * 100)/total));
         remoteView.setTextViewText(R.id.progress_text, percentage);
         remoteView.setImageViewResource(R.id.appIcon, android.R.drawable.stat_sys_download);
         notification.contentView = remoteView;
 
+        notification.setLatestEventInfo(mService, title, message, null);
         final Intent intent = new Intent(mService, ContactsListActivity.class);
         notification.contentIntent =
                 PendingIntent.getActivity(mService, 0, intent, 0);
-
+        PendingIntent.getActivity(mService, 0, intent, 0);
         mNotificationManager.notify(VCardService.EXPORT_NOTIFICATION_ID, notification);
     }
 
     private void doFinishNotification(final String title, final String message) {
         final Notification notification = new Notification();
         notification.icon = android.R.drawable.stat_sys_upload_done;
+        notification.flags |= Notification.FLAG_AUTO_CANCEL;
         notification.setLatestEventInfo(mService, title, message, null);
         final Intent intent = new Intent(mService, ContactsListActivity.class);
         notification.contentIntent =
                 PendingIntent.getActivity(mService, 0, intent, 0);
-        mNotificationManager.notify(VCardService.IMPORT_NOTIFICATION_ID, notification);
+        mNotificationManager.notify(VCardService.EXPORT_NOTIFICATION_ID, notification);
     }
 }
\ No newline at end of file
diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
index be7d2ea..73d5dff 100644
--- a/src/com/android/contacts/vcard/ImportProcessor.java
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -166,7 +166,7 @@
             // Currenty we don't have an appropriate way to let users see all entries
             // imported in this procedure. Instead, we show them entries only when
             // there's just one created uri.
-            doFinishNotification(mCreatedUris.size() == 1 ? mCreatedUris.get(0) : null);
+            doFinishNotification(mCreatedUris.size() > 0 ? mCreatedUris.get(0) : null);
         } finally {
             // TODO: verify this works fine.
             mReadyForRequest = false;  // Just in case.
@@ -233,6 +233,7 @@
     private void doErrorNotification(int id) {
         final Notification notification = new Notification();
         notification.icon = android.R.drawable.stat_sys_download_done;
+        notification.flags |= Notification.FLAG_AUTO_CANCEL;
         final String title = mService.getString(R.string.reading_vcard_failed_title);
         final PendingIntent intent =
                 PendingIntent.getActivity(mService, 0, new Intent(), 0);
@@ -244,6 +245,8 @@
     private void doFinishNotification(Uri createdUri) {
         final Notification notification = new Notification();
         notification.icon = android.R.drawable.stat_sys_download_done;
+        notification.flags |= Notification.FLAG_AUTO_CANCEL;
+
         final String title = mService.getString(R.string.importing_vcard_finished_title);
 
         final Intent intent;
diff --git a/src/com/android/contacts/vcard/ImportProgressNotifier.java b/src/com/android/contacts/vcard/ImportProgressNotifier.java
index db70218..e16980f 100644
--- a/src/com/android/contacts/vcard/ImportProgressNotifier.java
+++ b/src/com/android/contacts/vcard/ImportProgressNotifier.java
@@ -20,6 +20,7 @@
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
+import android.util.Log;
 import android.widget.RemoteViews;
 
 import com.android.contacts.ContactsListActivity;
@@ -56,9 +57,9 @@
         // - We cannot know name there but here.
         // - There's high probability where name comes soon after the beginning of entry, so
         //   we don't need to hurry to show something.
-        final String packageName = "com.android.contacts.vcard";
-        // TODO: should not create this everytime?
-        final RemoteViews remoteViews = new RemoteViews(packageName,
+
+        // TODO: should not create this every time?
+        final RemoteViews remoteViews = new RemoteViews(mContext.getPackageName(),
                 R.layout.status_bar_ongoing_event_progress_bar);
         final String title = mContext.getString(R.string.reading_vcard_title);
         String totalCountString;
@@ -70,19 +71,21 @@
                 totalCountString,
                 contactStruct.getDisplayName());
 
-        // TODO: uploading image does not work correctly. (looks like a static image).
         remoteViews.setTextViewText(R.id.description, text);
         remoteViews.setProgressBar(R.id.progress_bar, mTotalCount, mCurrentCount,
                 mTotalCount == -1);
         final String percentage =
                 mContext.getString(R.string.percentage,
                         String.valueOf(mCurrentCount * 100/mTotalCount));
+
         remoteViews.setTextViewText(R.id.progress_text, percentage);
         remoteViews.setImageViewResource(R.id.appIcon, android.R.drawable.stat_sys_download);
 
         final Notification notification = new Notification();
         notification.icon = android.R.drawable.stat_sys_download;
+        notification.tickerText = text;
         notification.flags |= Notification.FLAG_ONGOING_EVENT;
+
         notification.contentView = remoteViews;
 
         notification.contentIntent =
