diff --git a/Graphics/ReadImg.cpp b/Graphics/ReadImg.cpp
index 50e1544d9f97634723098f243be22c8b22844d4b..c62ac74d6eecc7021db10637ca47281e3316b562 100644
--- a/Graphics/ReadImg.cpp
+++ b/Graphics/ReadImg.cpp
@@ -1,4 +1,4 @@
-// $Id: ReadImg.cpp,v 1.12 2006-01-28 03:39:44 geuzaine Exp $
+// $Id: ReadImg.cpp,v 1.13 2006-01-28 04:50:36 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -24,12 +24,15 @@
 #include "GmshUI.h"
 #include "Views.h"
   
+#include <FL/Fl_JPEG_Image.H>
 #include <FL/Fl_PNM_Image.H>
-  
-// from an image, we create a post pro object
+#include <FL/Fl_PNG_Image.H>
+#include <FL/Fl_BMP_Image.H>
+
+// from an image, we create a post-procession view
 
-Post_View * Img2Pos(Fl_RGB_Image & img_init, int quads=1,
-		    int resizex=0, int resizey=0) 
+static Post_View *Img2Pos(Fl_RGB_Image & img_init, int quads=1, 
+			  int resizex=0, int resizey=0) 
 {
   img_init.desaturate(); // convert to grayscale
 
@@ -94,18 +97,41 @@ Post_View * Img2Pos(Fl_RGB_Image & img_init, int quads=1,
   return v;
 }
 
+static void EndPos(char *name, Post_View *v)
+{
+  if(!v) return;
+  char name2[256];
+  strcpy(name2, name);
+  strcat(name2, ".pos");
+  EndView(v, 1, name2, name);
+  Msg(INFO, "Read file '%s'", name);
+  Msg(STATUS2N, "Read '%s'", name);
+}
+
 void read_pnm(char *name) 
 {
   Msg(INFO, "Reading PNM file '%s'", name);
+  Fl_PNM_Image img(name);
+  EndPos(name, Img2Pos(img));
+}
 
-  Fl_PNM_Image theVeryNicePicture(name);
-  Post_View * v = Img2Pos(theVeryNicePicture);
-  if(v){
-    char name2[256];
-    strcpy(name2, name);
-    strcat(name2, ".pos");
-    EndView(v, 1, name2, name);
-    Msg(INFO, "Read PNM file '%s'", name);
-    Msg(STATUS2N, "Read '%s'", name);
-  }
+void read_jpeg(char *name) 
+{
+  Msg(INFO, "Reading JPEG file '%s'", name);
+  Fl_JPEG_Image img(name);
+  EndPos(name, Img2Pos(img));
+}
+
+void read_png(char *name) 
+{
+  Msg(INFO, "Reading PNG file '%s'", name);
+  Fl_PNG_Image img(name);
+  EndPos(name, Img2Pos(img));
+}
+
+void read_bmp(char *name) 
+{
+  Msg(INFO, "Reading BMP file '%s'", name);
+  Fl_BMP_Image img(name);
+  EndPos(name, Img2Pos(img));
 }
diff --git a/Graphics/ReadImg.h b/Graphics/ReadImg.h
index bd92bc4b2e30d80a77836a044295fb3dcc380c74..e7635e744cf9e1e346685e3eda79ca0f38cf6c7a 100644
--- a/Graphics/ReadImg.h
+++ b/Graphics/ReadImg.h
@@ -20,6 +20,9 @@
 // 
 // Please report all bugs and problems to <gmsh@geuz.org>.
 
-void read_pnm (char *name);
+void read_pnm(char *name);
+void read_jpeg(char *name);
+void read_png(char *name);
+void read_bmp(char *name);
 
 #endif
diff --git a/Parser/OpenFile.cpp b/Parser/OpenFile.cpp
index c4b71831954f97badf4c92f35154ad18dbadd929..57bf6cdafed8886b190ffbe53a4548eb27da7297 100644
--- a/Parser/OpenFile.cpp
+++ b/Parser/OpenFile.cpp
@@ -1,4 +1,4 @@
-// $Id: OpenFile.cpp,v 1.87 2006-01-06 00:34:32 geuzaine Exp $
+// $Id: OpenFile.cpp,v 1.88 2006-01-28 04:50:36 geuzaine Exp $
 //
 // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 //
@@ -267,20 +267,8 @@ int MergeProblem(char *name, int warn_if_missing)
   }
 #endif
   
-  if(!strcmp(ext, ".ppm") || !strcmp(ext, ".pnm")) {
-    // An image file is used as an input, we transform it onto a post
-    // pro file that could be used as a background mesh. We should
-    // check the first bytes of the file instead of the extension to
-    // determine the file type.
-#if defined(HAVE_FLTK)
-    read_pnm(name);
-    SetBoundingBox();
-#endif
-    status = 0;
-  }
-  else if(!strcmp(ext, ".stl") || !strcmp(ext, ".STL") || 
-	  !strcmp(ext, ".mesh")) {
-    if (THEM->bds)delete THEM->bds;
+  if(!strcmp(ext, ".stl") || !strcmp(ext, ".STL") || !strcmp(ext, ".mesh")) {
+    if(THEM->bds) delete THEM->bds;
     THEM->bds = new BDS_Mesh;
     if(!strcmp(ext, ".mesh"))
       THEM->bds->read_mesh(name);
@@ -294,6 +282,36 @@ int MergeProblem(char *name, int warn_if_missing)
     SetBoundingBox();
     status = THEM->status;
   }
+#if defined(HAVE_FLTK)
+  else if(!strcmp(ext, ".pnm") || !strcmp(ext, ".PNM") ||
+	  !strcmp(ext, ".pbm") || !strcmp(ext, ".PBM") ||
+	  !strcmp(ext, ".pgm") || !strcmp(ext, ".PGM") ||
+	  !strcmp(ext, ".ppm") || !strcmp(ext, ".PPM")) {
+    read_pnm(name);
+    SetBoundingBox();
+    status = 0;
+  }
+  else if(!strcmp(ext, ".bmp") || !strcmp(ext, ".BMP")) {
+    read_bmp(name);
+    SetBoundingBox();
+    status = 0;
+  }
+#if defined(HAVE_LIBJPEG)
+  else if(!strcmp(ext, ".jpg") || !strcmp(ext, ".JPG") ||
+	  !strcmp(ext, ".jpeg") || !strcmp(ext, ".JPEG")) {
+    read_jpeg(name);
+    SetBoundingBox();
+    status = 0;
+  }
+#endif
+#if defined(HAVE_LIBPNG)
+  else if(!strcmp(ext, ".png") || !strcmp(ext, ".PNG")) {
+    read_png(name);
+    SetBoundingBox();
+    status = 0;
+  }
+#endif
+#endif
   else {
     fpos_t position;
     fgetpos(fp, &position);
diff --git a/configure b/configure
index bb1f617334290d86ef8635b90ecf5d04b9929a24..7e66be69928895a86a484e2d6cb433c4377e2884 100755
--- a/configure
+++ b/configure
@@ -3502,10 +3502,13 @@ echo "$as_me: error: Could not find fltk-config. Try --with-fltk-prefix?" >&2;}
   INCLS="${INCLS} `$FLTKCONFIG --use-gl --use-images --cxxflags`"
 
     if test "x$enable_jpeg" != "xno"; then
-    if test "x${JPEG_PREFIX}" != "x"; then
-      LDFLAGS="-L${JPEG_PREFIX} -L${JPEG_PREFIX}/lib ${LDFLAGS}"
-    fi
-    echo "$as_me:$LINENO: checking for main in -ljpeg" >&5
+        if expr "${GMSH_LIBS}" : '.*fltk_jpeg.*'; then
+      FLAGS="-DHAVE_LIBJPEG ${FLAGS}"
+    else
+      if test "x${JPEG_PREFIX}" != "x"; then
+        LDFLAGS="-L${JPEG_PREFIX} -L${JPEG_PREFIX}/lib ${LDFLAGS}"
+      fi
+      echo "$as_me:$LINENO: checking for main in -ljpeg" >&5
 echo $ECHO_N "checking for main in -ljpeg... $ECHO_C" >&6
 if test "${ac_cv_lib_jpeg_main+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3569,23 +3572,27 @@ else
   JPEG="no"
 fi
 
-    if test "x${JPEG}" = "xyes"; then
-      FLAGS="-DHAVE_LIBJPEG ${FLAGS}"
-      if test "x${JPEG_PREFIX}" = "x"; then
-        GMSH_LIBS="${GMSH_LIBS} -ljpeg"
-      else
-                GMSH_LIBS="${GMSH_LIBS} -L${JPEG_PREFIX} -L${JPEG_PREFIX}/lib -ljpeg"
-        INCLS="${INCLS} -I${JPEG_PREFIX} -I${JPEG_PREFIX}/include"
+      if test "x${JPEG}" = "xyes"; then
+        FLAGS="-DHAVE_LIBJPEG ${FLAGS}"
+        if test "x${JPEG_PREFIX}" = "x"; then
+          GMSH_LIBS="${GMSH_LIBS} -ljpeg"
+        else
+                    GMSH_LIBS="${GMSH_LIBS} -L${JPEG_PREFIX} -L${JPEG_PREFIX}/lib -ljpeg"
+          INCLS="${INCLS} -I${JPEG_PREFIX} -I${JPEG_PREFIX}/include"
+        fi
       fi
     fi
   fi
 
     ZLIB=""
   if test "x$enable_zlib" != "xno"; then
-    if test "x${ZLIB_PREFIX}" != "x"; then
-      LDFLAGS="-L${ZLIB_PREFIX} -L${ZLIB_PREFIX}/lib ${LDFLAGS}"
-    fi
-    echo "$as_me:$LINENO: checking for main in -lz" >&5
+        if expr "${GMSH_LIBS}" : '.*fltk_z.*'; then
+      ZLIB="yes"
+    else
+      if test "x${ZLIB_PREFIX}" != "x"; then
+        LDFLAGS="-L${ZLIB_PREFIX} -L${ZLIB_PREFIX}/lib ${LDFLAGS}"
+      fi
+      echo "$as_me:$LINENO: checking for main in -lz" >&5
 echo $ECHO_N "checking for main in -lz... $ECHO_C" >&6
 if test "${ac_cv_lib_z_main+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3649,13 +3656,17 @@ else
   ZLIB="no"
 fi
 
+    fi
   fi
 
     if test "x$enable_png" != "xno" -a "x${ZLIB}" = "xyes"; then
-    if test "x${PNG_PREFIX}" != "x"; then
-      LDFLAGS="-L${PNG_PREFIX} -L${PNG_PREFIX}/lib ${LDFLAGS}"
-    fi
-    echo "$as_me:$LINENO: checking for main in -lpng" >&5
+        if expr "${GMSH_LIBS}" : '.*fltk_png.*'; then
+      FLAGS="-DHAVE_LIBPNG ${FLAGS}"
+    else
+      if test "x${PNG_PREFIX}" != "x"; then
+        LDFLAGS="-L${PNG_PREFIX} -L${PNG_PREFIX}/lib ${LDFLAGS}"
+      fi
+      echo "$as_me:$LINENO: checking for main in -lpng" >&5
 echo $ECHO_N "checking for main in -lpng... $ECHO_C" >&6
 if test "${ac_cv_lib_png_main+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -3719,24 +3730,29 @@ else
   PNG="no"
 fi
 
-    if test "x${PNG}" = "xyes"; then
-      FLAGS="-DHAVE_LIBPNG ${FLAGS}"
-      if test "x${PNG_PREFIX}" = "x"; then
-        GMSH_LIBS="${GMSH_LIBS} -lpng"
-      else
-                GMSH_LIBS="${GMSH_LIBS} -L${PNG_PREFIX} -L${PNG_PREFIX}/lib -lpng"
-        INCLS="${INCLS} -I${PNG_PREFIX} -I${PNG_PREFIX}/include"
+      if test "x${PNG}" = "xyes"; then
+        FLAGS="-DHAVE_LIBPNG ${FLAGS}"
+        if test "x${PNG_PREFIX}" = "x"; then
+          GMSH_LIBS="${GMSH_LIBS} -lpng"
+        else
+                    GMSH_LIBS="${GMSH_LIBS} -L${PNG_PREFIX} -L${PNG_PREFIX}/lib -lpng"
+          INCLS="${INCLS} -I${PNG_PREFIX} -I${PNG_PREFIX}/include"
+        fi
       fi
     fi
   fi
 
     if test "x${ZLIB}" = "xyes"; then
-    FLAGS="-DHAVE_LIBZ ${FLAGS}"
-    if test "x${ZLIB_PREFIX}" = "x"; then
-      GMSH_LIBS="${GMSH_LIBS} -lz"
+        if expr "${GMSH_LIBS}" : '.*fltk_z.*'; then
+      FLAGS="-DHAVE_LIBZ ${FLAGS}"
     else
-            GMSH_LIBS="${GMSH_LIBS} -L${ZLIB_PREFIX} -L${ZLIB_PREFIX}/lib -lz"
-      INCLS="${INCLS} -I${ZLIB_PREFIX} -I${ZLIB_PREFIX}/include"
+      FLAGS="-DHAVE_LIBZ ${FLAGS}"
+      if test "x${ZLIB_PREFIX}" = "x"; then
+        GMSH_LIBS="${GMSH_LIBS} -lz"
+      else
+                GMSH_LIBS="${GMSH_LIBS} -L${ZLIB_PREFIX} -L${ZLIB_PREFIX}/lib -lz"
+        INCLS="${INCLS} -I${ZLIB_PREFIX} -I${ZLIB_PREFIX}/include"
+      fi
     fi
   fi
 
diff --git a/configure.in b/configure.in
index b7d1c9ae3f748beec060329023548adbb7c03f0c..360a718de42fb2f25e9c77b9ed6370bab7695952 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-dnl $Id: configure.in,v 1.85 2006-01-06 00:34:20 geuzaine Exp $
+dnl $Id: configure.in,v 1.86 2006-01-28 04:50:36 geuzaine Exp $
 dnl
 dnl Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle
 dnl
@@ -165,58 +165,78 @@ if test "x$enable_gui" != "xno"; then
 
   dnl Check for libjpeg
   if test "x$enable_jpeg" != "xno"; then
-    if test "x${JPEG_PREFIX}" != "x"; then
-      LDFLAGS="-L${JPEG_PREFIX} -L${JPEG_PREFIX}/lib ${LDFLAGS}"
-    fi
-    AC_CHECK_LIB(jpeg,main,JPEG="yes",JPEG="no")
-    if test "x${JPEG}" = "xyes"; then
+    dnl If provided by FLTK, use that one; otherwise, look for it
+    if expr "${GMSH_LIBS}" : '.*fltk_jpeg.*'; then
       FLAGS="-DHAVE_LIBJPEG ${FLAGS}"
-      if test "x${JPEG_PREFIX}" = "x"; then
-        GMSH_LIBS="${GMSH_LIBS} -ljpeg"
-      else
-        dnl Find the libs/includes even if libjpeg is _not_ properly installed (ugly hack!)
-        GMSH_LIBS="${GMSH_LIBS} -L${JPEG_PREFIX} -L${JPEG_PREFIX}/lib -ljpeg"
-        INCLS="${INCLS} -I${JPEG_PREFIX} -I${JPEG_PREFIX}/include"
+    else      
+      if test "x${JPEG_PREFIX}" != "x"; then
+        LDFLAGS="-L${JPEG_PREFIX} -L${JPEG_PREFIX}/lib ${LDFLAGS}"
       fi
-    fi 
+      AC_CHECK_LIB(jpeg,main,JPEG="yes",JPEG="no")
+      if test "x${JPEG}" = "xyes"; then
+        FLAGS="-DHAVE_LIBJPEG ${FLAGS}"
+        if test "x${JPEG_PREFIX}" = "x"; then
+          GMSH_LIBS="${GMSH_LIBS} -ljpeg"
+        else
+          dnl Find the libs/includes even if libjpeg is _not_ properly installed (ugly hack!)
+          GMSH_LIBS="${GMSH_LIBS} -L${JPEG_PREFIX} -L${JPEG_PREFIX}/lib -ljpeg"
+          INCLS="${INCLS} -I${JPEG_PREFIX} -I${JPEG_PREFIX}/include"
+        fi
+      fi 
+    fi
   fi
 
   dnl Check for libz
   ZLIB=""
   if test "x$enable_zlib" != "xno"; then
-    if test "x${ZLIB_PREFIX}" != "x"; then
-      LDFLAGS="-L${ZLIB_PREFIX} -L${ZLIB_PREFIX}/lib ${LDFLAGS}"
+    dnl If provided by FLTK, use that one; otherwise, look for it
+    if expr "${GMSH_LIBS}" : '.*fltk_z.*'; then
+      ZLIB="yes"
+    else      
+      if test "x${ZLIB_PREFIX}" != "x"; then
+        LDFLAGS="-L${ZLIB_PREFIX} -L${ZLIB_PREFIX}/lib ${LDFLAGS}"
+      fi
+      AC_CHECK_LIB(z,main,ZLIB="yes",ZLIB="no")
     fi
-    AC_CHECK_LIB(z,main,ZLIB="yes",ZLIB="no")
   fi
 
   dnl Check for libpng (only if libz is available)
   if test "x$enable_png" != "xno" -a "x${ZLIB}" = "xyes"; then
-    if test "x${PNG_PREFIX}" != "x"; then
-      LDFLAGS="-L${PNG_PREFIX} -L${PNG_PREFIX}/lib ${LDFLAGS}"
-    fi
-    AC_CHECK_LIB(png,main,PNG="yes",PNG="no")
-    if test "x${PNG}" = "xyes"; then
+    dnl If provided by FLTK, use that one; otherwise, look for it
+    if expr "${GMSH_LIBS}" : '.*fltk_png.*'; then
       FLAGS="-DHAVE_LIBPNG ${FLAGS}"
-      if test "x${PNG_PREFIX}" = "x"; then
-        GMSH_LIBS="${GMSH_LIBS} -lpng"
-      else
-        dnl Find the libs/includes even if libjpeg is _not_ properly installed (ugly hack!)
-        GMSH_LIBS="${GMSH_LIBS} -L${PNG_PREFIX} -L${PNG_PREFIX}/lib -lpng"
-        INCLS="${INCLS} -I${PNG_PREFIX} -I${PNG_PREFIX}/include"
+    else
+      if test "x${PNG_PREFIX}" != "x"; then
+        LDFLAGS="-L${PNG_PREFIX} -L${PNG_PREFIX}/lib ${LDFLAGS}"
+      fi
+      AC_CHECK_LIB(png,main,PNG="yes",PNG="no")
+      if test "x${PNG}" = "xyes"; then
+        FLAGS="-DHAVE_LIBPNG ${FLAGS}"
+        if test "x${PNG_PREFIX}" = "x"; then
+          GMSH_LIBS="${GMSH_LIBS} -lpng"
+        else
+          dnl Find the libs/includes even if libjpeg is _not_ properly installed (ugly hack!)
+          GMSH_LIBS="${GMSH_LIBS} -L${PNG_PREFIX} -L${PNG_PREFIX}/lib -lpng"
+          INCLS="${INCLS} -I${PNG_PREFIX} -I${PNG_PREFIX}/include"
+        fi
       fi
     fi 
   fi
 
   dnl Complete zlib link line (zlib must be linked in after libpng)
   if test "x${ZLIB}" = "xyes"; then
-    FLAGS="-DHAVE_LIBZ ${FLAGS}"
-    if test "x${ZLIB_PREFIX}" = "x"; then
-      GMSH_LIBS="${GMSH_LIBS} -lz"
+    dnl If provided by FLTK, use that one; otherwise, look for it
+    if expr "${GMSH_LIBS}" : '.*fltk_z.*'; then
+      FLAGS="-DHAVE_LIBZ ${FLAGS}"
     else
-      dnl Find the libs/includes even if libjpeg is _not_ properly installed (ugly hack!)
-      GMSH_LIBS="${GMSH_LIBS} -L${ZLIB_PREFIX} -L${ZLIB_PREFIX}/lib -lz"
-      INCLS="${INCLS} -I${ZLIB_PREFIX} -I${ZLIB_PREFIX}/include"
+      FLAGS="-DHAVE_LIBZ ${FLAGS}"
+      if test "x${ZLIB_PREFIX}" = "x"; then
+        GMSH_LIBS="${GMSH_LIBS} -lz"
+      else
+        dnl Find the libs/includes even if libjpeg is _not_ properly installed (ugly hack!)
+        GMSH_LIBS="${GMSH_LIBS} -L${ZLIB_PREFIX} -L${ZLIB_PREFIX}/lib -lz"
+        INCLS="${INCLS} -I${ZLIB_PREFIX} -I${ZLIB_PREFIX}/include"
+      fi
     fi
   fi