diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index cd5dec7..9c03fa0 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -68,6 +68,7 @@
 
 import com.android.settings.dashboard.DashboardCategory;
 import com.android.settings.dashboard.DashboardTile;
+import com.android.settings.users.CircleFramedDrawable;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -779,4 +780,14 @@
                 context.getSystemService(Context.PERSISTENT_DATA_BLOCK_SERVICE);
         manager.setOemUnlockEnabled(enabled);
     }
+
+    /**
+     * Returns a circular icon for a user.
+     */
+    public static Drawable getUserIcon(Context context, UserManager um, UserInfo user) {
+        if (user.iconPath == null) return null;
+        Bitmap icon = um.getUserIcon(user.id);
+        if (icon == null) return null;
+        return CircleFramedDrawable.getInstance(context, icon);
+    }
 }
diff --git a/src/com/android/settings/applications/RunningState.java b/src/com/android/settings/applications/RunningState.java
index 632b202..1019abc 100644
--- a/src/com/android/settings/applications/RunningState.java
+++ b/src/com/android/settings/applications/RunningState.java
@@ -17,7 +17,7 @@
 package com.android.settings.applications;
 
 import com.android.settings.R;
-import com.android.settings.users.UserUtils;
+import com.android.settings.Utils;
 
 import android.app.ActivityManager;
 import android.app.ActivityManagerNative;
@@ -837,8 +837,7 @@
                 UserInfo info = mUm.getUserInfo(newItem.mUserId);
                 userItem.mUser.mInfo = info;
                 if (info != null) {
-                    userItem.mUser.mIcon = UserUtils.getUserIcon(context, mUm,
-                            info, context.getResources());
+                    userItem.mUser.mIcon = Utils.getUserIcon(context, mUm, info);
                 }
                 String name = info != null ? info.name : null;
                 if (name == null && info != null) {
diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/BatteryEntry.java
index e527276..92eaade 100644
--- a/src/com/android/settings/fuelgauge/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryEntry.java
@@ -25,9 +25,10 @@
 import android.os.BatteryStats;
 import android.os.Handler;
 import android.os.UserManager;
+
 import com.android.internal.os.BatterySipper;
 import com.android.settings.R;
-import com.android.settings.users.UserUtils;
+import com.android.settings.Utils;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -160,7 +161,7 @@
             case USER: {
                 UserInfo info = um.getUserInfo(sipper.userId);
                 if (info != null) {
-                    icon = UserUtils.getUserIcon(context, um, info, context.getResources());
+                    icon = Utils.getUserIcon(context, um, info);
                     name = info != null ? info.name : null;
                     if (name == null) {
                         name = Integer.toString(info.id);
diff --git a/src/com/android/settings/net/UidDetailProvider.java b/src/com/android/settings/net/UidDetailProvider.java
index aca3e5d..69e6b5a 100644
--- a/src/com/android/settings/net/UidDetailProvider.java
+++ b/src/com/android/settings/net/UidDetailProvider.java
@@ -32,7 +32,6 @@
 
 import com.android.settings.R;
 import com.android.settings.Utils;
-import com.android.settings.users.UserUtils;
 
 /**
  * Return details about a specific UID, handling special cases like
@@ -121,7 +120,7 @@
             final UserInfo info = um.getUserInfo(userHandle);
             if (info != null) {
                 detail.label = res.getString(R.string.running_process_item_user_label, info.name);
-                detail.icon = UserUtils.getUserIcon(mContext, um, info, res);
+                detail.icon = Utils.getUserIcon(mContext, um, info);
                 return detail;
             }
         }
diff --git a/src/com/android/settings/users/CircleFramedDrawable.java b/src/com/android/settings/users/CircleFramedDrawable.java
index 671cfbe..6423078 100644
--- a/src/com/android/settings/users/CircleFramedDrawable.java
+++ b/src/com/android/settings/users/CircleFramedDrawable.java
@@ -37,7 +37,7 @@
  * Converts the user avatar icon to a circularly clipped one.
  * TODO: Move this to an internal framework class and share with the one in Keyguard.
  */
-class CircleFramedDrawable extends Drawable {
+public class CircleFramedDrawable extends Drawable {
 
     private final Bitmap mBitmap;
     private final int mSize;
diff --git a/src/com/android/settings/users/EditUserInfoController.java b/src/com/android/settings/users/EditUserInfoController.java
index d1352d0..53aaf27 100644
--- a/src/com/android/settings/users/EditUserInfoController.java
+++ b/src/com/android/settings/users/EditUserInfoController.java
@@ -126,8 +126,7 @@
         final ImageView userPhotoView = (ImageView) content.findViewById(R.id.user_photo);
         Drawable drawable = null;
         if (mSavedPhoto != null) {
-            drawable = CircleFramedDrawable.getInstance(activity,
-                    mSavedPhoto);
+            drawable = CircleFramedDrawable.getInstance(activity, mSavedPhoto);
         } else {
             drawable = currentUserIcon;
             if (drawable == null) {
diff --git a/src/com/android/settings/users/UserUtils.java b/src/com/android/settings/users/UserUtils.java
deleted file mode 100644
index 946d871..0000000
--- a/src/com/android/settings/users/UserUtils.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.users;
-
-import android.content.Context;
-import android.content.pm.UserInfo;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.os.UserManager;
-
-public class UserUtils {
-    public static Drawable getUserIcon(Context context, UserManager um, UserInfo user, Resources res) {
-        if (user.iconPath == null) return null;
-        Bitmap icon = um.getUserIcon(user.id);
-        if (icon == null) return null;
-        return CircleFramedDrawable.getInstance(context, icon);
-    }
-}
