diff --git a/services/java/com/android/server/InputMethodManagerService.java b/services/java/com/android/server/InputMethodManagerService.java
index 5bf66e4..47e8082 100644
--- a/services/java/com/android/server/InputMethodManagerService.java
+++ b/services/java/com/android/server/InputMethodManagerService.java
@@ -27,7 +27,7 @@
 import com.android.internal.view.InputBindResult;
 
 import com.android.server.status.IconData;
-import com.android.server.status.StatusBarService;
+import com.android.server.status.StatusBarManagerService;
 
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -110,7 +110,7 @@
     final Context mContext;
     final Handler mHandler;
     final SettingsObserver mSettingsObserver;
-    final StatusBarService mStatusBar;
+    final StatusBarManagerService mStatusBar;
     final IBinder mInputMethodIcon;
     final IconData mInputMethodData;
     final IWindowManager mIWindowManager;
@@ -447,7 +447,7 @@
         }
     }
 
-    public InputMethodManagerService(Context context, StatusBarService statusBar) {
+    public InputMethodManagerService(Context context, StatusBarManagerService statusBar) {
         mContext = context;
         mHandler = new Handler(this);
         mIWindowManager = IWindowManager.Stub.asInterface(
diff --git a/services/java/com/android/server/NotificationManagerService.java b/services/java/com/android/server/NotificationManagerService.java
index 73d17ea..bd93eb9 100755
--- a/services/java/com/android/server/NotificationManagerService.java
+++ b/services/java/com/android/server/NotificationManagerService.java
@@ -18,7 +18,7 @@
 
 import com.android.server.status.IconData;
 import com.android.server.status.NotificationData;
-import com.android.server.status.StatusBarService;
+import com.android.server.status.StatusBarManagerService;
 
 import android.app.ActivityManagerNative;
 import android.app.IActivityManager;
@@ -86,7 +86,7 @@
     final IBinder mForegroundToken = new Binder();
 
     private WorkerHandler mHandler;
-    private StatusBarService mStatusBarService;
+    private StatusBarManagerService mStatusBar;
     private LightsService mLightsService;
     private LightsService.Light mBatteryLight;
     private LightsService.Light mNotificationLight;
@@ -238,8 +238,8 @@
         }
     }
 
-    private StatusBarService.NotificationCallbacks mNotificationCallbacks
-            = new StatusBarService.NotificationCallbacks() {
+    private StatusBarManagerService.NotificationCallbacks mNotificationCallbacks
+            = new StatusBarManagerService.NotificationCallbacks() {
 
         public void onSetDisabled(int status) {
             synchronized (mNotificationList) {
@@ -405,7 +405,7 @@
         }
     }
 
-    NotificationManagerService(Context context, StatusBarService statusBar,
+    NotificationManagerService(Context context, StatusBarManagerService statusBar,
             LightsService lights)
     {
         super();
@@ -417,7 +417,7 @@
         mToastQueue = new ArrayList<ToastRecord>();
         mHandler = new WorkerHandler();
 
-        mStatusBarService = statusBar;
+        mStatusBar = statusBar;
         statusBar.setNotificationCallbacks(mNotificationCallbacks);
 
         mBatteryLight = lights.getLight(LightsService.LIGHT_ID_BATTERY);
@@ -734,7 +734,7 @@
                     r.statusBarKey = old.statusBarKey;
                     long identity = Binder.clearCallingIdentity();
                     try {
-                        mStatusBarService.updateIcon(r.statusBarKey, icon, n);
+                        mStatusBar.updateIcon(r.statusBarKey, icon, n);
                     }
                     finally {
                         Binder.restoreCallingIdentity(identity);
@@ -742,7 +742,7 @@
                 } else {
                     long identity = Binder.clearCallingIdentity();
                     try {
-                        r.statusBarKey = mStatusBarService.addIcon(icon, n);
+                        r.statusBarKey = mStatusBar.addIcon(icon, n);
                         mAttentionLight.pulse();
                     }
                     finally {
@@ -756,7 +756,7 @@
                 if (old != null && old.statusBarKey != null) {
                     long identity = Binder.clearCallingIdentity();
                     try {
-                        mStatusBarService.removeIcon(old.statusBarKey);
+                        mStatusBar.removeIcon(old.statusBarKey);
                     }
                     finally {
                         Binder.restoreCallingIdentity(identity);
@@ -864,7 +864,7 @@
         if (r.notification.icon != 0) {
             long identity = Binder.clearCallingIdentity();
             try {
-                mStatusBarService.removeIcon(r.statusBarKey);
+                mStatusBar.removeIcon(r.statusBarKey);
             }
             finally {
                 Binder.restoreCallingIdentity(identity);
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 65becb6..d7948ec 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -17,7 +17,7 @@
 package com.android.server;
 
 import com.android.server.am.ActivityManagerService;
-import com.android.server.status.StatusBarService;
+import com.android.server.status.StatusBarManagerService;
 import com.android.internal.os.BinderInternal;
 import com.android.internal.os.SamplingProfilerIntegration;
 
@@ -206,7 +206,7 @@
         }
 
         DevicePolicyManagerService devicePolicy = null;
-        StatusBarService statusBar = null;
+        StatusBarManagerService statusBar = null;
         InputMethodManagerService imm = null;
         AppWidgetService appWidget = null;
         NotificationManagerService notification = null;
@@ -224,10 +224,10 @@
 
             try {
                 Slog.i(TAG, "Status Bar");
-                statusBar = new StatusBarService(context);
+                statusBar = new StatusBarManagerService(context);
                 ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);
             } catch (Throwable e) {
-                Slog.e(TAG, "Failure starting StatusBarService", e);
+                Slog.e(TAG, "Failure starting StatusBarManagerService", e);
             }
 
             try {
@@ -464,7 +464,7 @@
         }
 
         // These are needed to propagate to the runnable below.
-        final StatusBarService statusBarF = statusBar;
+        final StatusBarManagerService statusBarF = statusBar;
         final BatteryService batteryF = battery;
         final ConnectivityService connectivityF = connectivity;
         final DockObserver dockF = dock;
diff --git a/services/java/com/android/server/UiModeManagerService.java b/services/java/com/android/server/UiModeManagerService.java
index 3606629..9493161 100644
--- a/services/java/com/android/server/UiModeManagerService.java
+++ b/services/java/com/android/server/UiModeManagerService.java
@@ -545,7 +545,7 @@
             mStatusBarManager = (StatusBarManager) mContext.getSystemService(Context.STATUS_BAR_SERVICE);
         }
 
-        // Fear not: StatusBarService manages a list of requests to disable
+        // Fear not: StatusBarManagerService manages a list of requests to disable
         // features of the status bar; these are ORed together to form the
         // active disabled list. So if (for example) the device is locked and
         // the status bar should be totally disabled, the calls below will
diff --git a/services/java/com/android/server/status/CloseDragHandle.java b/services/java/com/android/server/status/CloseDragHandle.java
index ad1ac4d..d11ab10 100644
--- a/services/java/com/android/server/status/CloseDragHandle.java
+++ b/services/java/com/android/server/status/CloseDragHandle.java
@@ -23,7 +23,7 @@
 
 
 public class CloseDragHandle extends LinearLayout {
-    StatusBarService mService;
+    StatusBarManagerService mService;
 
     public CloseDragHandle(Context context, AttributeSet attrs) {
         super(context, attrs);
diff --git a/services/java/com/android/server/status/ExpandedView.java b/services/java/com/android/server/status/ExpandedView.java
index cb37f90..af85bce 100644
--- a/services/java/com/android/server/status/ExpandedView.java
+++ b/services/java/com/android/server/status/ExpandedView.java
@@ -27,7 +27,7 @@
 
 
 public class ExpandedView extends LinearLayout {
-    StatusBarService mService;
+    StatusBarManagerService mService;
     int mPrevHeight = -1;
 
     public ExpandedView(Context context, AttributeSet attrs) {
@@ -50,9 +50,9 @@
          super.onLayout(changed, left, top, right, bottom);
          int height = bottom - top;
          if (height != mPrevHeight) {
-             //Slog.d(StatusBarService.TAG, "height changed old=" + mPrevHeight + " new=" + height);
+             //Slog.d(StatusBarManagerService.TAG, "height changed old=" + mPrevHeight + " new=" + height);
              mPrevHeight = height;
-             mService.updateExpandedViewPos(StatusBarService.EXPANDED_LEAVE_ALONE);
+             mService.updateExpandedViewPos(StatusBarManagerService.EXPANDED_LEAVE_ALONE);
          }
      }
 }
diff --git a/services/java/com/android/server/status/IconMerger.java b/services/java/com/android/server/status/IconMerger.java
index aa702ae..86f1e34 100644
--- a/services/java/com/android/server/status/IconMerger.java
+++ b/services/java/com/android/server/status/IconMerger.java
@@ -24,7 +24,7 @@
 
 
 public class IconMerger extends LinearLayout {
-    StatusBarService service;
+    StatusBarManagerService service;
     StatusBarIcon moreIcon;
 
     public IconMerger(Context context, AttributeSet attrs) {
diff --git a/services/java/com/android/server/status/NotificationViewList.java b/services/java/com/android/server/status/NotificationViewList.java
index 1bb56a7..a24e239 100644
--- a/services/java/com/android/server/status/NotificationViewList.java
+++ b/services/java/com/android/server/status/NotificationViewList.java
@@ -135,8 +135,8 @@
                 index++;
             }
         }
-        Slog.e(StatusBarService.TAG, "Couldn't find notification in NotificationViewList.");
-        Slog.e(StatusBarService.TAG, "notification=" + notification);
+        Slog.e(StatusBarManagerService.TAG, "Couldn't find notification in NotificationViewList.");
+        Slog.e(StatusBarManagerService.TAG, "notification=" + notification);
         dump(notification);
         return 0;
     }
@@ -173,8 +173,8 @@
     }
 
     void add(StatusBarNotification notification) {
-        if (StatusBarService.SPEW) {
-            Slog.d(StatusBarService.TAG, "before add NotificationViewList"
+        if (StatusBarManagerService.SPEW) {
+            Slog.d(StatusBarManagerService.TAG, "before add NotificationViewList"
                     + " notification.data.ongoingEvent=" + notification.data.ongoingEvent);
             dump(notification);
         }
@@ -192,14 +192,14 @@
         }
         list.add(index, notification);
 
-        if (StatusBarService.SPEW) {
-            Slog.d(StatusBarService.TAG, "after add NotificationViewList index=" + index);
+        if (StatusBarManagerService.SPEW) {
+            Slog.d(StatusBarManagerService.TAG, "after add NotificationViewList index=" + index);
             dump(notification);
         }
     }
 
     void dump(StatusBarNotification notification) {
-        if (StatusBarService.SPEW) {
+        if (StatusBarManagerService.SPEW) {
             boolean showTime = false;
             String s = "";
             for (int i=0; i<mOngoing.size(); i++) {
@@ -217,7 +217,7 @@
                 }
                 s += " ";
             }
-            Slog.d(StatusBarService.TAG, "NotificationViewList ongoing: " + s);
+            Slog.d(StatusBarManagerService.TAG, "NotificationViewList ongoing: " + s);
 
             s = "";
             for (int i=0; i<mLatest.size(); i++) {
@@ -235,7 +235,7 @@
                 }
                 s += " ";
             }
-            Slog.d(StatusBarService.TAG, "NotificationViewList latest:  " + s);
+            Slog.d(StatusBarManagerService.TAG, "NotificationViewList latest:  " + s);
         }
     }
 
diff --git a/services/java/com/android/server/status/StatusBarIcon.java b/services/java/com/android/server/status/StatusBarIcon.java
index f77b550..dfccf94 100644
--- a/services/java/com/android/server/status/StatusBarIcon.java
+++ b/services/java/com/android/server/status/StatusBarIcon.java
@@ -153,7 +153,7 @@
             try {
                 r = context.getPackageManager().getResourcesForApplication(data.iconPackage);
             } catch (PackageManager.NameNotFoundException ex) {
-                Slog.e(StatusBarService.TAG, "Icon package not found: " + data.iconPackage, ex);
+                Slog.e(StatusBarManagerService.TAG, "Icon package not found: " + data.iconPackage, ex);
                 return null;
             }
         } else {
@@ -161,14 +161,14 @@
         }
 
         if (data.iconId == 0) {
-            Slog.w(StatusBarService.TAG, "No icon ID for slot " + data.slot);
+            Slog.w(StatusBarManagerService.TAG, "No icon ID for slot " + data.slot);
             return null;
         }
         
         try {
             return r.getDrawable(data.iconId);
         } catch (RuntimeException e) {
-            Slog.w(StatusBarService.TAG, "Icon not found in "
+            Slog.w(StatusBarManagerService.TAG, "Icon not found in "
                   + (data.iconPackage != null ? data.iconId : "<system>")
                   + ": " + Integer.toHexString(data.iconId));
         }
diff --git a/services/java/com/android/server/status/StatusBarService.java b/services/java/com/android/server/status/StatusBarManagerService.java
similarity index 99%
rename from services/java/com/android/server/status/StatusBarService.java
rename to services/java/com/android/server/status/StatusBarManagerService.java
index 4880496..18cb1ed 100644
--- a/services/java/com/android/server/status/StatusBarService.java
+++ b/services/java/com/android/server/status/StatusBarManagerService.java
@@ -84,7 +84,7 @@
  * separately throughout the code, although they both use the same key, which is assigned
  * when they are created.
  */
-public class StatusBarService extends IStatusBarService.Stub
+public class StatusBarManagerService extends IStatusBarService.Stub
 {
     static final String TAG = "StatusBar";
     static final boolean SPEW = false;
@@ -144,7 +144,7 @@
             switch (event.getKeyCode()) {
             case KeyEvent.KEYCODE_BACK:
                 if (!down) {
-                    StatusBarService.this.deactivate();
+                    StatusBarManagerService.this.deactivate();
                 }
                 return true;
             }
@@ -236,7 +236,7 @@
     /**
      * Construct the service, add the status bar view to the window manager
      */
-    public StatusBarService(Context context) {
+    public StatusBarManagerService(Context context) {
         mContext = context;
         mDisplay = ((WindowManager)context.getSystemService(
                 Context.WINDOW_SERVICE)).getDefaultDisplay();
@@ -413,13 +413,13 @@
     private void enforceStatusBar() {
         mContext.enforceCallingOrSelfPermission(
                 android.Manifest.permission.STATUS_BAR,
-                "StatusBarService");
+                "StatusBarManagerService");
     }
 
     private void enforceExpandStatusBar() {
         mContext.enforceCallingOrSelfPermission(
                 android.Manifest.permission.EXPAND_STATUS_BAR,
-                "StatusBarService");
+                "StatusBarManagerService");
     }
 
     public void registerStatusBar(IStatusBar bar) {
@@ -1878,7 +1878,7 @@
             }
             ArrayList<StatusBarNotification> list = null;
             if (pkgList != null) {
-                synchronized (StatusBarService.this) {
+                synchronized (StatusBarManagerService.this) {
                     for (String pkg : pkgList) {
                         list = mNotificationData.notificationsForPackage(pkg);
                     }
diff --git a/services/java/com/android/server/status/StatusBarPolicy.java b/services/java/com/android/server/status/StatusBarPolicy.java
index cab2662..51aa695 100644
--- a/services/java/com/android/server/status/StatusBarPolicy.java
+++ b/services/java/com/android/server/status/StatusBarPolicy.java
@@ -97,7 +97,7 @@
     private static final int AM_PM_STYLE = AM_PM_STYLE_GONE;
 
     private final Context mContext;
-    private final StatusBarService mService;
+    private final StatusBarManagerService mService;
     private final Handler mHandler = new StatusBarHandler();
     private final IBatteryStats mBatteryStats;
 
@@ -417,7 +417,7 @@
         }
     };
 
-    private StatusBarPolicy(Context context, StatusBarService service) {
+    private StatusBarPolicy(Context context, StatusBarManagerService service) {
         mContext = context;
         mService = service;
         mSignalStrength = new SignalStrength();
@@ -561,7 +561,7 @@
         }
     }
 
-    public static void installIcons(Context context, StatusBarService service) {
+    public static void installIcons(Context context, StatusBarManagerService service) {
         sInstance = new StatusBarPolicy(context, service);
     }
 
diff --git a/services/java/com/android/server/status/StatusBarView.java b/services/java/com/android/server/status/StatusBarView.java
index 5e1f572..5743854 100644
--- a/services/java/com/android/server/status/StatusBarView.java
+++ b/services/java/com/android/server/status/StatusBarView.java
@@ -34,7 +34,7 @@
 
     static final int DIM_ANIM_TIME = 400;
     
-    StatusBarService mService;
+    StatusBarManagerService mService;
     boolean mTracking;
     int mStartX, mStartY;
     ViewGroup mNotificationIcons;
@@ -94,7 +94,7 @@
     @Override
     protected void onSizeChanged(int w, int h, int oldw, int oldh) {
         super.onSizeChanged(w, h, oldw, oldh);
-        mService.updateExpandedViewPos(StatusBarService.EXPANDED_LEAVE_ALONE);
+        mService.updateExpandedViewPos(StatusBarManagerService.EXPANDED_LEAVE_ALONE);
     }
 
     @Override
diff --git a/services/java/com/android/server/status/TrackingView.java b/services/java/com/android/server/status/TrackingView.java
index 8ec39c0..a0cf31d 100644
--- a/services/java/com/android/server/status/TrackingView.java
+++ b/services/java/com/android/server/status/TrackingView.java
@@ -26,7 +26,7 @@
 
 public class TrackingView extends LinearLayout {
     final Display mDisplay;
-    StatusBarService mService;
+    StatusBarManagerService mService;
     boolean mTracking;
     int mStartX, mStartY;
 
