Index: dll/win32/shell32/folders.cpp
===================================================================
--- dll/win32/shell32/folders.cpp	(revision 69299)
+++ dll/win32/shell32/folders.cpp	(working copy)
@@ -281,15 +281,16 @@
 
     else if (_ILIsDrive (pSimplePidl))
     {
-        static const WCHAR drive[] = { 'D', 'r', 'i', 'v', 'e', 0 };
-        int icon_idx = -1;
-
+	    icon_idx = IDI_SHELL_NOT_CONNECTED_HDD;
         if (_ILGetDrive(pSimplePidl, sTemp, MAX_PATH))
         {
             switch(GetDriveTypeA(sTemp))
             {
                 case DRIVE_REMOVABLE:
-                    icon_idx = IDI_SHELL_FLOPPY;
+					if (*sTemp == 'a' || *sTemp == 'A' || *sTemp == 'b' || *sTemp == 'B')
+						icon_idx = IDI_SHELL_3_12_FLOPPY;
+					else
+                    	icon_idx = IDI_SHELL_REMOVABLE_DRIVE;
                     break;
                 case DRIVE_CDROM:
                     icon_idx = IDI_SHELL_CDROM;
@@ -300,24 +301,13 @@
                 case DRIVE_RAMDISK:
                     icon_idx = IDI_SHELL_RAMDISK;
                     break;
-                case DRIVE_NO_ROOT_DIR:
-                    icon_idx = IDI_SHELL_CDROM;
+                case DRIVE_FIXED:
+					icon_idx = IDI_SHELL_DRIVE;
                     break;
             }
         }
-
-        if (icon_idx != -1)
-        {
             initIcon->SetNormalIcon(swShell32Name, -icon_idx);
         }
-        else
-        {
-            if (HCR_GetIconW(drive, wTemp, NULL, MAX_PATH, &icon_idx))
-                initIcon->SetNormalIcon(wTemp, icon_idx);
-            else
-                initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_DRIVE);
-        }
-    }
 
     else if (_ILIsFolder (pSimplePidl))
     {
Index: dll/win32/shell32/icon_res.rc
===================================================================
--- dll/win32/shell32/icon_res.rc	(revision 69299)
+++ dll/win32/shell32/icon_res.rc	(working copy)
@@ -3,9 +3,9 @@
 IDI_SHELL_EXE ICON "res/icons/3.ico"
 IDI_SHELL_FOLDER ICON "res/icons/4.ico"
 IDI_SHELL_FOLDER_OPEN ICON "res/icons/5.ico"
-IDI_SHELL_5_12_FLOPPY ICON "res/icons/6.ico"
-IDI_SHELL_3_14_FLOPPY ICON "res/icons/7.ico"
-IDI_SHELL_FLOPPY ICON "res/icons/7.ico"
+IDI_SHELL_5_14_FLOPPY ICON "res/icons/6.ico"
+IDI_SHELL_3_12_FLOPPY ICON "res/icons/7.ico"
+IDI_SHELL_REMOVABLE_DRIVE ICON "res/icons/8.ico"
 IDI_SHELL_DRIVE ICON "res/icons/9.ico"
 IDI_SHELL_NETDRIVE ICON "res/icons/10.ico"
 IDI_SHELL_NETDRIVE_OFF ICON "res/icons/11.ico"
Index: dll/win32/shell32/shresdef.h
===================================================================
--- dll/win32/shell32/shresdef.h	(revision 69299)
+++ dll/win32/shell32/shresdef.h	(working copy)
@@ -315,9 +315,9 @@
 #define IDI_SHELL_EXE                3
 #define IDI_SHELL_FOLDER             4
 #define IDI_SHELL_FOLDER_OPEN        5
-#define IDI_SHELL_5_12_FLOPPY        6
-#define IDI_SHELL_3_14_FLOPPY        7
-#define IDI_SHELL_FLOPPY             8
+#define IDI_SHELL_5_14_FLOPPY        6
+#define IDI_SHELL_3_12_FLOPPY        7
+#define IDI_SHELL_REMOVABLE_DRIVE    8
 #define IDI_SHELL_DRIVE              9
 #define IDI_SHELL_NETDRIVE          10
 #define IDI_SHELL_NETDRIVE_OFF      11
Index: dll/win32/shell32/dialogs/drvdefext.cpp
===================================================================
--- dll/win32/shell32/dialogs/drvdefext.cpp	(revision 69299)
+++ dll/win32/shell32/dialogs/drvdefext.cpp	(working copy)
@@ -303,7 +303,18 @@
     switch (DriveType)
     {
         case DRIVE_CDROM: IconId = IDI_SHELL_CDROM; TypeStrId = IDS_DRIVE_CDROM; break;
-        case DRIVE_REMOVABLE: IconId = IDI_SHELL_FLOPPY; break;
+        case DRIVE_REMOVABLE: 
+			if (*m_wszDrive == L'a' || *m_wszDrive == L'A' || *m_wszDrive == L'b' || *m_wszDrive == L'B')
+			{
+				IconId = IDI_SHELL_3_12_FLOPPY;
+				TypeStrId = IDS_DRIVE_FLOPPY;
+			}
+			else
+			{
+				IconId = IDI_SHELL_REMOVABLE_DRIVE;
+				TypeStrId = IDS_DRIVE_REMOVABLE;
+			}
+			break;
         case DRIVE_RAMDISK: IconId = IDI_SHELL_RAMDISK; break;
         default: IconId = IDI_SHELL_DRIVE; TypeStrId = IDS_DRIVE_FIXED;
     }
Index: dll/win32/shell32/folders/CDrivesFolder.cpp
===================================================================
--- dll/win32/shell32/folders/CDrivesFolder.cpp	(revision 69299)
+++ dll/win32/shell32/folders/CDrivesFolder.cpp	(working copy)
@@ -538,6 +538,12 @@
                         case DRIVE_CDROM:
                             ResourceId = IDS_DRIVE_CDROM;
                             break;
+						case DRIVE_REMOVABLE:
+							if (*wszDrive == L'a' || *wszDrive == L'A' || *wszDrive == L'b' || *wszDrive == L'B')
+								ResourceId = IDS_DRIVE_FLOPPY;
+							else
+								ResourceId = IDS_DRIVE_REMOVABLE;
+							break;
                         default:
                             ResourceId = 0;
                     }
