diff --git a/hal/ghalmount.c b/hal/ghalmount.c
index 35d964e..3380f79 100644
--- a/hal/ghalmount.c
+++ b/hal/ghalmount.c
@@ -388,6 +388,7 @@ do_update_from_hal (GHalMount *m)
   HalDevice *drive;
   char *name;
   const char *icon_name;
+  const char *icon_name_fallback;
   const char *drive_type;
   const char *drive_bus;
   gboolean drive_uses_removable_media;
@@ -437,19 +438,14 @@ do_update_from_hal (GHalMount *m)
   /*g_warning ("drive_bus='%s'", drive_bus); */
   /*g_warning ("drive_uses_removable_media=%d", drive_uses_removable_media); */
 
+  icon_name_fallback = NULL;
+
   if (strlen (volume_icon_from_hal) > 0)
     icon_name = volume_icon_from_hal;
   else if (strlen (icon_from_hal) > 0)
     icon_name = icon_from_hal;
   else if (is_audio_player)
     icon_name = "multimedia-player";
-#if 0
-  /* This icon hasn't been finalized yet, and causes issues with
-   * the icon theme, so it has been disabled for gnome 2.22.
-   */
-  else if (is_crypto || is_crypto_cleartext)
-    icon_name = "media-encrypted";
-#endif
   else if (strcmp (drive_type, "disk") == 0)
     {
       if (strcmp (drive_bus, "ide") == 0)
@@ -480,7 +476,12 @@ do_update_from_hal (GHalMount *m)
   else
     icon_name = "drive-harddisk";
 
-  
+  if (is_crypto || is_crypto_cleartext)
+    {
+      icon_name_fallback = icon_name;
+      icon_name = "media-encrypted";
+    }
+
   if (strlen (volume_name_from_hal) > 0)
     name = g_strdup (volume_name_from_hal);
   else if (strlen (name_from_hal) > 0)
@@ -519,6 +520,15 @@ do_update_from_hal (GHalMount *m)
 
   if (m->override_icon != NULL)
     m->icon = g_object_ref (m->override_icon);
+  else if (icon_name_fallback)
+    {
+      const char *names[2];
+
+      names[0] = icon_name;
+      names[1] = icon_name_fallback;
+
+      m->icon = g_themed_icon_new_from_names ((char **) names, 2);
+    }
   else
     m->icon = g_themed_icon_new_with_default_fallbacks (icon_name);
     
diff --git a/hal/ghalvolume.c b/hal/ghalvolume.c
index 076147a..5373102 100644
--- a/hal/ghalvolume.c
+++ b/hal/ghalvolume.c
@@ -63,6 +63,7 @@ struct _GHalVolume {
 
   char *name;
   char *icon;
+  char *icon_fallback;
 };
 
 static void g_hal_volume_volume_iface_init (GVolumeIface *iface);
@@ -110,6 +111,7 @@ g_hal_volume_finalize (GObject *object)
 
   g_free (volume->name);
   g_free (volume->icon);
+  g_free (volume->icon_fallback);
 
   if (G_OBJECT_CLASS (g_hal_volume_parent_class)->finalize)
     (*G_OBJECT_CLASS (g_hal_volume_parent_class)->finalize) (object);
@@ -332,11 +334,13 @@ do_update_from_hal (GHalVolume *mv)
     }
 
   mv->name = name;
+  mv->icon = _drive_get_icon (drive); /* use the drive icon since we're unmounted */
 
   if (is_crypto || is_crypto_cleartext)
-    mv->icon = g_strdup ("drive-encrypted");
-  else
-    mv->icon = _drive_get_icon (drive); /* use the drive icon since we're unmounted */
+    {
+      mv->icon_fallback = mv->icon;
+      mv->icon = g_strdup ("drive-encrypted");
+    }
 
   if (hal_device_get_property_bool (volume, "volume.is_mounted"))
     mv->mount_path = g_strdup (hal_device_get_property_string (volume, "volume.mount_point"));
@@ -692,7 +696,17 @@ g_hal_volume_get_icon (GVolume *volume)
   GIcon *icon;
 
   G_LOCK (hal_volume);
-  icon = g_themed_icon_new_with_default_fallbacks (hal_volume->icon);
+  if (hal_volume->icon_fallback)
+    {
+      const char *names[2];
+
+      names[0] = hal_volume->icon;
+      names[1] = hal_volume->icon_fallback;
+
+      icon = g_themed_icon_new_from_names ((char **) names, 2);
+    }
+  else
+    icon = g_themed_icon_new_with_default_fallbacks (hal_volume->icon);
   G_UNLOCK (hal_volume);
   
   return icon;
