diff --git a/project/msvc/grafx2-sdl2.vcxproj b/project/msvc/grafx2-sdl2.vcxproj
index 109307bd..b025baa4 100644
--- a/project/msvc/grafx2-sdl2.vcxproj
+++ b/project/msvc/grafx2-sdl2.vcxproj
@@ -63,7 +63,7 @@
     
       Windows
       true
-      zlib.lib;SDL2.lib;SDL2main.lib;SDL2_image.lib;lua53.lib;%(AdditionalDependencies)
+      mpr.lib;zlib.lib;SDL2.lib;SDL2main.lib;SDL2_image.lib;lua53.lib;%(AdditionalDependencies)
       $(ZLibLibDir);$(SDL2LibDir);$(SDL2ImageLibDir);$(LuaLibDir);%(AdditionalLibraryDirectories)
     
   
@@ -84,7 +84,7 @@
       true
       true
       true
-      zlib.lib;SDL2.lib;SDL2main.lib;SDL2_image.lib;lua53.lib;%(AdditionalDependencies)
+      mpr.lib;zlib.lib;SDL2.lib;SDL2main.lib;SDL2_image.lib;lua53.lib;%(AdditionalDependencies)
       $(ZLibLibDir);$(SDL2LibDir);$(SDL2ImageLibDir);$(LuaLibDir);%(AdditionalLibraryDirectories)
     
   
@@ -217,4 +217,4 @@
   
   
   
-
\ No newline at end of file
+
diff --git a/project/msvc/grafx2-win32.vcxproj b/project/msvc/grafx2-win32.vcxproj
index 2c2b7987..d79cb76d 100644
--- a/project/msvc/grafx2-win32.vcxproj
+++ b/project/msvc/grafx2-win32.vcxproj
@@ -58,7 +58,7 @@
     
     
       true
-      libtiff.lib;lua53.lib;libpng16.lib;zlib.lib;%(AdditionalDependencies)
+      mpr.lib;libtiff.lib;lua53.lib;libpng16.lib;zlib.lib;%(AdditionalDependencies)
       $(TIFFLibDir);$(PNGLibDirDebug);$(LuaLibDir);%(AdditionalLibraryDirectories)
     
   
@@ -77,7 +77,7 @@
       true
       true
       true
-      libtiff.lib;lua53.lib;libpng16.lib;zlib.lib;%(AdditionalDependencies)
+      mpr.lib;libtiff.lib;lua53.lib;libpng16.lib;zlib.lib;%(AdditionalDependencies)
       $(TIFFLibDir);$(PNGLibDirRelease);$(LuaLibDir);%(AdditionalLibraryDirectories)
     
   
diff --git a/project/msvc/grafx2.vcxproj b/project/msvc/grafx2.vcxproj
index 8a43328a..31c4c18a 100644
--- a/project/msvc/grafx2.vcxproj
+++ b/project/msvc/grafx2.vcxproj
@@ -63,7 +63,7 @@
     
       Windows
       true
-      zlib.lib;SDL.lib;SDLmain.lib;SDL_image.lib;lua53.lib;%(AdditionalDependencies)
+      mpr.lib;zlib.lib;SDL.lib;SDLmain.lib;SDL_image.lib;lua53.lib;%(AdditionalDependencies)
       $(ZLibLibDir);$(SDLLibDir);$(SDLImageLibDir);$(LuaLibDir);%(AdditionalLibraryDirectories)
     
   
@@ -84,7 +84,7 @@
       true
       true
       true
-      zlib.lib;SDL.lib;SDLmain.lib;SDL_image.lib;lua53.lib;%(AdditionalDependencies)
+      mpr.lib;zlib.lib;SDL.lib;SDLmain.lib;SDL_image.lib;lua53.lib;%(AdditionalDependencies)
       $(ZLibLibDir);$(SDLLibDir);$(SDLImageLibDir);$(LuaLibDir);%(AdditionalLibraryDirectories)
     
   
@@ -217,4 +217,4 @@
   
   
   
-
\ No newline at end of file
+
diff --git a/src/Makefile b/src/Makefile
index cc843429..a4074917 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -129,6 +129,7 @@ ifdef COMSPEC
   LOPT += -L../3rdparty/usr-win32/lib -lgdi32 -lcomdlg32
   PLATFORMFILES =
   endif
+  LOPT += -lmpr
   LOPT += -ltiff
   LOPT += -lpng -lz
   LUALOPT = -llua
@@ -501,7 +502,7 @@ endif
       STRIP = $(CROSS_STRIP)
       BIN = ../bin/grafx2-$(API).exe
       COPT = -W -Wall -Wdeclaration-after-statement -O$(OPTIM) -g -ggdb $(TTFCOPT)
-      LOPT = -mwindows -lmingw32 -lshlwapi $(TTFLOPT)
+      LOPT = -mwindows -lmingw32 -lshlwapi -lmpr $(TTFLOPT)
       ifeq ($(API),sdl)
       COPT += -Dmain=SDL_main $(shell $(CROSS_SDLCONFIG) --cflags)
       LOPT += -lSDLmain -lSDL $(shell $(CROSS_SDLCONFIG) --libs) -lSDL_image
diff --git a/src/filesel.c b/src/filesel.c
index cbbb6846..72761a6d 100644
--- a/src/filesel.c
+++ b/src/filesel.c
@@ -738,6 +738,7 @@ void Read_list_of_drives(T_Fileselector *list, byte name_length)
         list->Nb_directories++;
       }
     }
+    Enumerate_Network(list);
   }
   #elif defined(__MINT__)
     drive_bits = Drvmap(); //get drive map bitfield
@@ -822,12 +823,29 @@ void Read_list_of_drives(T_Fileselector *list, byte name_length)
 // Comparison of file names:
 #ifdef WIN32
 // case-insensitive
-  #define FILENAME_COMPARE strcasecmp
-  #define FILENAME_COMPARE_UNICODE wcsicmp
+static int Windows_Path_Compare(const char * s1, const char * s2)
+{
+  // trick to make network shares path (starting with \\)
+  // at the end of the list
+  if (s1[0] == '\\')
+  {
+    if (s2[0] != '\\')
+      return 1;
+  }
+  else
+  {
+    // s1[0] != '\\'
+    if (s2[0] == '\\')
+      return -1;
+  }
+  return strcasecmp(s1, s2);
+}
+#define FILENAME_COMPARE Windows_Path_Compare
+#define FILENAME_COMPARE_UNICODE wcsicmp
 #else
 // case-sensitive
-  #define FILENAME_COMPARE strcmp
-  #define FILENAME_COMPARE_UNICODE Unicode_strcmp
+#define FILENAME_COMPARE strcmp
+#define FILENAME_COMPARE_UNICODE Unicode_strcmp
 #endif
 
 
diff --git a/src/input.c b/src/input.c
index b275373f..235386ff 100644
--- a/src/input.c
+++ b/src/input.c
@@ -33,6 +33,9 @@
   #include 
   #include 
 #endif
+#if defined(_MSC_VER)
+#define strdup _strdup
+#endif
 
 #ifdef USE_X11
 #include 
diff --git a/src/io.c b/src/io.c
index 894a07a3..6d08b843 100644
--- a/src/io.c
+++ b/src/io.c
@@ -70,6 +70,8 @@
 #include "global.h"
 #include "gfx2log.h"
 #include "gfx2mem.h"
+// for the network browse
+#include "filesel.h"
 
 // Lit un octet
 // Renvoie -1 si OK, 0 en cas d'erreur
@@ -1222,3 +1224,59 @@ char * Calculate_relative_path(const char * ref_path, const char * path)
   }
   return rel_path;
 }
+
+#if defined(WIN32)
+static void Enumerate_Network_R(T_Fileselector *list, LPNETRESOURCEA lpnr)
+{
+  // Mpr.lib
+  HANDLE hEnum;
+  DWORD r;
+  r = WNetOpenEnumA (RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, lpnr, &hEnum);
+  if (r == NO_ERROR)
+  {
+    DWORD buffer_size = 16*1024;
+    DWORD count = -1;
+    LPNETRESOURCEA lpnrLocal = (LPNETRESOURCEA) GlobalAlloc(GPTR, buffer_size);
+    do
+    {
+      ZeroMemory(lpnrLocal, buffer_size);
+      r = WNetEnumResourceA(hEnum, &count, lpnrLocal, &buffer_size);
+      if (r == NO_ERROR)
+      {
+        DWORD i;
+        for (i = 0 ; i < count; i++)
+        {
+          GFX2_Log(GFX2_DEBUG, "%08x %08x %08x %s %s %s %s\n",
+            lpnrLocal[i].dwType, lpnrLocal[i].dwDisplayType,
+            lpnrLocal[i].dwUsage,
+            lpnrLocal[i].lpProvider, lpnrLocal[i].lpLocalName,
+            lpnrLocal[i].lpRemoteName, lpnrLocal[i].lpComment);
+          if (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER)
+          {
+            Enumerate_Network_R(list, &lpnrLocal[i]);
+          }
+          if (lpnrLocal[i].dwType == RESOURCETYPE_DISK &&
+            lpnrLocal[i].dwDisplayType == RESOURCEDISPLAYTYPE_SHARE)
+          {
+            Add_element_to_list(list, lpnrLocal[i].lpRemoteName,
+                    Format_filename(lpnrLocal[i].lpRemoteName, 19-1, FSOBJECT_DRIVE),
+                    FSOBJECT_DRIVE, ICON_NETWORK);
+            list->Nb_directories++;
+          }
+        }
+      }
+      else
+      {
+      }
+    }
+    while (0);
+    GlobalFree((HGLOBAL) lpnrLocal);
+    WNetCloseEnum(hEnum);
+  }
+}
+
+void Enumerate_Network(T_Fileselector *list)
+{
+  Enumerate_Network_R(list, NULL);
+}
+#endif
diff --git a/src/io.h b/src/io.h
index 6bea8c88..83c82f2e 100644
--- a/src/io.h
+++ b/src/io.h
@@ -201,5 +201,9 @@ int Remove_directory(const char * path);
 /// Calculate relative path
 char * Calculate_relative_path(const char * ref_path, const char * path);
 
+#if defined(WIN32)
+void Enumerate_Network(T_Fileselector *list);
+#endif
+
 /** @}*/
 #endif