diff --git a/src/buttons.c b/src/buttons.c
index 0048b3a7..d8e3d829 100644
--- a/src/buttons.c
+++ b/src/buttons.c
@@ -1201,7 +1201,7 @@ void Add_font_or_skin(const char *name)
     && (!strcasecmp(fname + namelength - 4,".png")
     || !strcasecmp(fname + namelength - 4,".gif")))
   {
-    Add_element_to_list(&Skin_files_list, name, 0);
+    Add_element_to_list(&Skin_files_list, name, 0, ICON_NONE);
     
     if (fname[0]=='\0')
       return;
@@ -1216,7 +1216,7 @@ void Add_font_or_skin(const char *name)
   else if (namelength>=10 && !strncasecmp(fname, "font_", 5)
     && (!strcasecmp(fname + namelength - 4, ".png")))
   {
-    Add_element_to_list(&Font_files_list, name, 0);
+    Add_element_to_list(&Font_files_list, name, 0, ICON_NONE);
     
     if (fname[0]=='\0')
       return;
diff --git a/src/const.h b/src/const.h
index 1b24f278..49fd163b 100644
--- a/src/const.h
+++ b/src/const.h
@@ -269,7 +269,8 @@ enum ICON_TYPES
   ICON_NETWORK,      ///< "Network" drive
   ICON_STAR,         ///< Star (favorite)
   ICON_DROPDOWN,     ///< Dropdown arrow
-  NB_ICON_SPRITES    ///< Number of 8x8 icons
+  NB_ICON_SPRITES,   ///< Number of 8x8 icons
+  ICON_NONE          ///< None of the above
 };
 
 /// Identifiers for the buttons in the menu.
diff --git a/src/factory.c b/src/factory.c
index 64758f60..96acad0e 100644
--- a/src/factory.c
+++ b/src/factory.c
@@ -916,7 +916,7 @@ void Draw_script_information(T_Fileselector_item * script_item)
 // Add a script to the list
 void Add_script(const char *name)
 {
-  Add_element_to_list(&Scripts_list, Find_last_slash(name)+1, 0);
+  Add_element_to_list(&Scripts_list, Find_last_slash(name)+1, 0, ICON_NONE);
 }
 
 void Highlight_script(T_Fileselector *selector, T_List_button *list, const char *selected_script)
diff --git a/src/filesel.c b/src/filesel.c
index f15f9557..02ce82bd 100644
--- a/src/filesel.c
+++ b/src/filesel.c
@@ -22,7 +22,7 @@
     along with Grafx2; if not, see 
 */
 
-#include 
+#include 
 
 #if defined(__amigaos4__) || defined(__AROS__) || defined(__MORPHOS__) || defined(__amigaos__)
     #include 
@@ -81,9 +81,11 @@ byte Native_filesel(byte load)
   OPENFILENAME ofn;
   char szFileName[MAX_PATH] = "";
 	SDL_SysWMinfo wminfo;
+	HWND hwnd;
+	
 	SDL_VERSION(&wminfo.version);
 	SDL_GetWMInfo(&wminfo);
-	HWND hwnd = wminfo.window;
+	hwnd = wminfo.window;
 
   ZeroMemory(&ofn, sizeof(ofn));
 
@@ -126,8 +128,6 @@ T_Fileselector Filelist;
 /// Filename (without directory) of the highlighted file
 static char Selector_filename[256];
 
-int drive_types[26];
-
 // Conventions:
 //
 // * Le fileselect modifie le répertoire courant. Ceci permet de n'avoir
@@ -249,7 +249,7 @@ char * Format_filename(const char * fname, int type)
 
 
 // -- Rajouter a la liste des elements de la liste un element ---------------
-void Add_element_to_list(T_Fileselector *list, const char * fname, int type)
+void Add_element_to_list(T_Fileselector *list, const char * fname, int type, byte icon)
 //  Cette procedure ajoute a la liste chainee un fichier passé en argument.
 {
   // Pointeur temporaire d'insertion
@@ -262,6 +262,13 @@ void Add_element_to_list(T_Fileselector *list, const char * fname, int type)
   strcpy(temp_item->Short_name,Format_filename(fname, type));
   strcpy(temp_item->Full_name,fname);
   temp_item->Type = type;
+  temp_item->Icon = icon;
+  if (icon != ICON_NONE)
+  {
+    // If the item has an icon preceding it, its short
+    // name must be one character shorter
+    temp_item->Short_name[17]='\0';
+  }
 
   temp_item->Next    =list->First;
   temp_item->Previous=NULL;
@@ -344,7 +351,7 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
      !isHidden(entry)))
     {
       // On rajoute le répertoire à la liste
-      Add_element_to_list(list, entry->d_name, 1);
+      Add_element_to_list(list, entry->d_name, 1, ICON_NONE);
       list->Nb_directories++;
     }
     else if (S_ISREG(Infos_enreg.st_mode) && //Il s'agit d'un fichier
@@ -357,7 +364,7 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
         if (Check_extension(entry->d_name, ext))
         {
           // On rajoute le fichier à la liste
-          Add_element_to_list(list, entry->d_name, 0);
+          Add_element_to_list(list, entry->d_name, 0, ICON_NONE);
           list->Nb_files++;
           // Stop searching
           ext=NULL;
@@ -373,7 +380,7 @@ void Read_list_of_files(T_Fileselector *list, byte selected_format)
   }
 
 #if defined(__MORPHOS__) || defined(__AROS__) || defined (__amigaos4__) || defined(__amigaos__)
-  Add_element_to_list(list, "/",1); // on amiga systems, / means parent. And there is no ..
+  Add_element_to_list(list, "/",1, ICON_NONE); // on amiga systems, / means parent. And there is no ..
   list->Nb_directories ++;
 #endif
 
@@ -425,7 +432,7 @@ void Read_list_of_drives(T_Fileselector *list)
       {
         bstrtostr( dl->dol_Name, tmp, 254 );
         strcat( tmp, ":" );
-        Add_element_to_list(list, tmp, 2 );
+        Add_element_to_list(list, tmp, 2, ICON_NONE );
         list->Nb_directories++;
       }
       UnLockDosList( LDF_VOLUMES | LDF_READ );
@@ -437,6 +444,8 @@ void Read_list_of_drives(T_Fileselector *list)
     int drive_bits = GetLogicalDrives();
     int drive_index;
     int bit_index;
+    byte icon;
+    
     // Sous Windows, on a la totale, presque aussi bien que sous DOS:
     drive_index = 0;
     for (bit_index=0; bit_index<26 && drive_index<23; bit_index++)
@@ -451,23 +460,23 @@ void Read_list_of_drives(T_Fileselector *list)
         switch (GetDriveType(drive_path))
         {
           case DRIVE_CDROM:
-            drive_types[drive_index]=ICON_CDROM;
+            icon=ICON_CDROM;
             break;
           case DRIVE_REMOTE:
-            drive_types[drive_index]=ICON_NETWORK;
+            icon=ICON_NETWORK;
             break;
           case DRIVE_REMOVABLE:
-            drive_types[drive_index]=ICON_FLOPPY_3_5;
+            icon=ICON_FLOPPY_3_5;
             break;
           case DRIVE_FIXED:
-            drive_types[drive_index]=ICON_HDD;
+            icon=ICON_HDD;
             break;
           default:
-            drive_types[drive_index]=ICON_NETWORK;
+            icon=ICON_NETWORK;
             break;
         }
         drive_name[0]='A'+bit_index;
-        Add_element_to_list(list, drive_name,2);
+        Add_element_to_list(list, drive_name,2, icon);
         list->Nb_directories++;
         drive_index++;
       }
@@ -489,11 +498,11 @@ void Read_list_of_drives(T_Fileselector *list)
     #else
         char * home_dir = getenv("HOME");
     #endif
-    Add_element_to_list(list, "/", 2);
+    Add_element_to_list(list, "/", 2, ICON_NONE);
     list->Nb_directories++;
     if(home_dir)
     {
-        Add_element_to_list(list, home_dir, 2);
+        Add_element_to_list(list, home_dir, 2, ICON_NONE);
         list->Nb_directories++;
     }
 
@@ -503,7 +512,7 @@ void Read_list_of_drives(T_Fileselector *list)
     {
         if(mount_points_list->me_dummy == 0 && strcmp(mount_points_list->me_mountdir,"/") && strcmp(mount_points_list->me_mountdir,"/home"))
         {
-            Add_element_to_list(list, mount_points_list->me_mountdir,2);
+            Add_element_to_list(list, mount_points_list->me_mountdir,2, ICON_NONE);
             list->Nb_directories++;
         }
         next = mount_points_list -> me_next;
@@ -698,12 +707,13 @@ void Display_file_list(T_Fileselector *list, short offset_first,short selector_o
       }
 
       // On affiche l'élément
-#ifdef __WIN32__
-      if (current_item->Short_name[1]==':') {
-        Print_in_window(17,95+index*8,current_item->Short_name,text_color,background_color);
-        Window_display_icon_sprite(8,95+index*8,drive_types[index]);
+      if (current_item->Icon != ICON_NONE)
+      {
+        // Name preceded by an icon
+        Print_in_window(16,95+index*8,current_item->Short_name,text_color,background_color);
+        Window_display_icon_sprite(8,95+index*8,current_item->Icon);
       } else
-#endif
+        // Name without icon
         Print_in_window(8,95+index*8,current_item->Short_name,text_color,background_color);
 
       // On passe à la ligne suivante
diff --git a/src/filesel.h b/src/filesel.h
index 3fd1fddb..560419c0 100644
--- a/src/filesel.h
+++ b/src/filesel.h
@@ -31,7 +31,7 @@
 
 byte Button_Load_or_Save(byte load, T_IO_Context *context);
 
-void Add_element_to_list(T_Fileselector *list, const char * fname, int type);
+void Add_element_to_list(T_Fileselector *list, const char * fname, int type, byte icon);
 ///
 /// Formats a display name for a file, directory, or similar name (drive, volume).
 /// The returned value is a pointer to a single static buffer of 19 characters
diff --git a/src/input.c b/src/input.c
index c11472e7..2b657b83 100644
--- a/src/input.c
+++ b/src/input.c
@@ -98,9 +98,11 @@ void AcceptDND(void)
 {
 #ifdef __WIN32__
 	SDL_SysWMinfo wminfo;
+	HWND hwnd;
+	
 	SDL_VERSION(&wminfo.version);
 	SDL_GetWMInfo(&wminfo);
-	HWND hwnd = wminfo.window;
+	hwnd = wminfo.window;
 	DragAcceptFiles(hwnd,TRUE);
 	SDL_EventState (SDL_SYSWMEVENT,SDL_ENABLE );
 #endif
diff --git a/src/main.c b/src/main.c
index 1bd92065..8850518b 100644
--- a/src/main.c
+++ b/src/main.c
@@ -442,6 +442,7 @@ int Init_program(int argc,char * argv[])
   static char program_directory[MAX_PATH_CHARACTERS];
   T_Gui_skin *gfx;
   int file_in_command_line;
+  SDL_TimerID tid;
   static char main_filename [MAX_PATH_CHARACTERS];
   static char main_directory[MAX_PATH_CHARACTERS];
   static char spare_filename [MAX_PATH_CHARACTERS];
@@ -545,7 +546,7 @@ int Init_program(int argc,char * argv[])
     printf("Couldn't initialize SDL.\n");
     return(0);
   }
-  SDL_TimerID tid = SDL_AddTimer(10, putTimerEvent, NULL);
+  tid = SDL_AddTimer(10, putTimerEvent, NULL);
 
   Joystick = SDL_JoystickOpen(0);
   SDL_EnableKeyRepeat(250, 32);
diff --git a/src/sdlscreen.c b/src/sdlscreen.c
index 35a1bb28..ca701530 100644
--- a/src/sdlscreen.c
+++ b/src/sdlscreen.c
@@ -51,6 +51,8 @@
 void Set_mode_SDL(int *width, int *height, int fullscreen)
 {
   static SDL_Cursor* cur = NULL;
+  static byte cursorData = 0;
+
   Screen_SDL=SDL_SetVideoMode(*width,*height,8,(fullscreen?SDL_FULLSCREEN:0)|SDL_RESIZABLE);
   if(Screen_SDL != NULL)
   {
@@ -70,11 +72,10 @@ void Set_mode_SDL(int *width, int *height, int fullscreen)
 
   // Trick borrowed to Barrage (http://www.mail-archive.com/debian-bugs-dist@lists.debian.org/msg737265.html) :
   // Showing the cursor but setting it to fully transparent allows us to get absolute mouse coordinates,
-  // this means we canuse tablet in fullscreen mode.
+  // this means we can use tablet in fullscreen mode.
   SDL_ShowCursor(1); // Hide the SDL mouse cursor, we use our own
 
   SDL_FreeCursor(cur);
-  static byte cursorData = 0;
   cur = SDL_CreateCursor(&cursorData, &cursorData, 1,1,0,0);
   SDL_SetCursor(cur);
 }
diff --git a/src/struct.h b/src/struct.h
index ee80a30a..adbe7647 100644
--- a/src/struct.h
+++ b/src/struct.h
@@ -165,6 +165,7 @@ typedef struct T_Fileselector_item
   char Short_name[19]; ///< Name to display.
   char Full_name[256]; ///< Filesystem value.
   byte Type;           ///< Type of item: 0 = File, 1 = Directory, 2 = Drive
+  byte Icon;           ///< One of ::ICON_TYPES, ICON_NONE for none.
 
   struct T_Fileselector_item * Next;    ///< Pointer to next item of the current fileselector.
   struct T_Fileselector_item * Previous;///< Pointer to previous item of the current fileselector.