diff --git a/ring-android/app/src/main/java/cx/ring/views/AvatarDrawable.java b/ring-android/app/src/main/java/cx/ring/views/AvatarDrawable.java
index bc3307c..388a00c 100644
--- a/ring-android/app/src/main/java/cx/ring/views/AvatarDrawable.java
+++ b/ring-android/app/src/main/java/cx/ring/views/AvatarDrawable.java
@@ -96,30 +96,16 @@
     public AvatarDrawable(Context context, Account account) {
         this(context, VCardServiceImpl.readData(account.getProfile()), account.getRegisteredName(), account.getUri(), true);
     }
-    /*public AvatarDrawable(Context context, byte[] photo, String profileName, String username, String id, boolean crop) {
-        this(context, photo, TextUtils.isEmpty(profileName) ? username : profileName, id, crop);
-    }*/
-    public AvatarDrawable(Context context, Bitmap photo, String profileName, String username, String id, boolean crop) {
-        this(context, photo, TextUtils.isEmpty(profileName) ? username : profileName, id, crop);
-    }
     public AvatarDrawable(Context context, Tuple<String, Object> data, String registeredName, String uri, boolean crop) {
         this(context, (Bitmap)data.second, data.first, registeredName, uri, crop);
     }
     public AvatarDrawable(Context context, Tuple<String, Object> data, String registeredName, String uri) {
         this(context, (Bitmap)data.second, data.first, registeredName, uri, true);
     }
-    /*public AvatarDrawable(Context context, byte[] photo, String name, String id, boolean crop) {
-        this(context, photo == null ? null : getBitmap(photo), name, id, crop);
+    public AvatarDrawable(Context context, Bitmap photo, String profileName, String username, String id, boolean crop) {
+        this(context, photo, TextUtils.isEmpty(profileName) ? username : profileName, id, crop);
     }
 
-    private static Bitmap getBitmap(byte[] photo) {
-        Bitmap source = BitmapFactory.decodeByteArray(photo, 0, photo.length);
-        if (source == null)
-            return null;
-        int d = Math.min(source.getWidth(), source.getHeight());
-        return ThumbnailUtils.extractThumbnail(source, d, d);
-    }*/
-
     public AvatarDrawable(Context context, Bitmap photo, String name, String id, boolean crop) {
         Log.w("AvatarDrawable", photo + " " + name + " " + id);
         cropCircle = crop;
