diff --git a/src/com/android/settings/LocationSettings.java b/src/com/android/settings/LocationSettings.java
index cfbbe26..0e50188 100644
--- a/src/com/android/settings/LocationSettings.java
+++ b/src/com/android/settings/LocationSettings.java
@@ -76,6 +76,7 @@
         if (mSettingsObserver != null) {
             mContentQueryMap.deleteObserver(mSettingsObserver);
         }
+        mContentQueryMap.close();
     }
 
     private PreferenceScreen createPreferenceHierarchy() {
diff --git a/src/com/android/settings/NotificationStation.java b/src/com/android/settings/NotificationStation.java
index 62f1c30..ea0c8b6 100644
--- a/src/com/android/settings/NotificationStation.java
+++ b/src/com/android/settings/NotificationStation.java
@@ -18,42 +18,32 @@
 
 import android.app.Activity;
 import android.app.ActivityManager;
+import android.app.INotificationListener;
 import android.app.INotificationManager;
 import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.TaskStackBuilder;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.database.sqlite.SQLiteException;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
-import android.provider.*;
 import android.util.Log;
-import android.util.Slog;
 import android.view.LayoutInflater;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
-import android.view.View.OnTouchListener;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.DateTimeView;
 import android.widget.ImageView;
 import android.widget.ListView;
-import android.widget.RadioButton;
 import android.widget.TextView;
 import com.android.internal.statusbar.StatusBarNotification;
-import com.android.settings.DreamBackend.DreamInfo;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -65,6 +55,18 @@
 
     private final PackageReceiver mPackageReceiver = new PackageReceiver();
     private INotificationManager mNoMan;
+    private INotificationListener.Stub mListener = new INotificationListener.Stub() {
+        @Override
+        public void onNotificationPosted(StatusBarNotification notification) throws RemoteException {
+            Log.v(TAG, "onNotificationPosted: " + notification);
+            getListView().post(new Runnable() { public void run() { refreshList(); }});
+        }
+
+        @Override
+        public void onNotificationRemoved(StatusBarNotification notification) throws RemoteException {
+            // no-op; we're just showing new notifications
+        }
+    };
 
     private NotificationHistoryAdapter mAdapter;
     private Context mContext;
@@ -76,6 +78,11 @@
         mContext = activity;
         mNoMan = INotificationManager.Stub.asInterface(
                 ServiceManager.getService(Context.NOTIFICATION_SERVICE));
+        try {
+            mNoMan.registerListener(mListener, UserHandle.USER_ALL);
+        } catch (RemoteException e) {
+            // well, that didn't work out
+        }
     }
 
     @Override
@@ -116,7 +123,7 @@
     public void onResume() {
         logd("onResume()");
         super.onResume();
-        refreshFromBackend();
+        refreshList();
 
         // listen for package changes
         IntentFilter filter = new IntentFilter();
@@ -128,7 +135,7 @@
         mContext.registerReceiver(mPackageReceiver , filter);
     }
 
-    private void refreshFromBackend() {
+    private void refreshList() {
         List<HistoricalNotificationInfo> infos = loadNotifications();
         if (infos != null) {
             logd("adding %d infos", infos.size());
@@ -315,7 +322,7 @@
         @Override
         public void onReceive(Context context, Intent intent) {
             logd("PackageReceiver.onReceive");
-            //refreshFromBackend();
+            //refreshList();
         }
     }
 }
