diff --git a/CMakeLists.txt b/CMakeLists.txt
index 858c48620a14716fa17e14f016efa094892045eb..145dde52fcf2c5d89080d90776ab18497820ecbb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -302,56 +302,84 @@ if(ENABLE_PARSER)
 endif(ENABLE_PARSER)
 
 if(ENABLE_FLTK)
-  set(FLTK_SKIP_FORMS TRUE)
-  set(FLTK_SKIP_FLUID TRUE)
-  find_package(FLTK)
-  if(FLTK_FOUND)
+  # try first to use fltk-config (FindFLTK is buggy on Unix, where
+  # e.g. xft and xinerama options are not dealt with)
+  find_program(FLTK_CONFIG_SCRIPT fltk-config)
+  if(FLTK_CONFIG_SCRIPT)
     add_subdirectory(Fltk)
     set_config_option(HAVE_FLTK "Fltk")
+    execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --api-version
+                    OUTPUT_VARIABLE FLTK_VERSION)
+    string(STRIP ${FLTK_VERSION} FLTK_VERSION)
+    message(STATUS "Found fltk-config script for FLTK " ${FLTK_VERSION})
+    execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --includedir
+                    OUTPUT_VARIABLE FLTK_INCLUDE_DIR)
+    string(STRIP ${FLTK_INCLUDE_DIR} FLTK_INCLUDE_DIR)
     list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR})
-    if(FLTK_CONFIG_SCRIPT)
-      execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --api-version
-                      OUTPUT_VARIABLE FLTK_VERSION)
-      string(STRIP ${FLTK_VERSION} FLTK_VERSION)
-      message(STATUS "Found fltk-config script for FLTK " ${FLTK_VERSION})
-    endif(FLTK_CONFIG_SCRIPT)
-    if(ENABLE_NATIVE_FILE_CHOOSER)
-      if(NOT FLTK_VERSION OR FLTK_VERSION EQUAL 1.1)
-        add_subdirectory(contrib/NativeFileChooser)
-        include_directories(contrib/NativeFileChooser)
-        add_definitions(-DFLTK1)
-      endif(NOT FLTK_VERSION OR FLTK_VERSION EQUAL 1.1)
-      set_config_option(HAVE_NATIVE_FILE_CHOOSER "NativeFileChooser")
-    endif(ENABLE_NATIVE_FILE_CHOOSER)
-    if(ENABLE_FL_TREE)
-      if(NOT FLTK_VERSION OR FLTK_VERSION EQUAL 1.1)
-        add_subdirectory(contrib/Fl_Tree)
-        include_directories(contrib/Fl_Tree)
-      endif(NOT FLTK_VERSION OR FLTK_VERSION EQUAL 1.1)
-      set_config_option(HAVE_FL_TREE "FlTree")
-    endif(ENABLE_FL_TREE)
-    if(APPLE AND FLTK_VERSION EQUAL 1.3)
-      # required for system sounds (until cmake updates find_package(FLTK))
-      list(APPEND FLTK_LIBRARIES "-framework AudioToolbox")
-    endif(APPLE AND FLTK_VERSION EQUAL 1.3)
-    if(UNIX AND FLTK_CONFIG_SCRIPT)
-      # missing Xft/Xinerama (until cmake updates find_package(FLTK))
-      execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --ldflags
-                      OUTPUT_VARIABLE FLTK_LDFLAGS)
-      if(X11_Xft_FOUND)
-        string(REGEX MATCH ".*Xft.*" ${FLTK_LDFLAGS} FLTK_HAVE_XFT)
-        if(FLTK_HAVE_XFT)
-          list(APPEND FLTK_LIBRARIES ${X11_Xft_LIB})
-        endif(FLTK_HAVE_XFT)
-      endif(X11_Xft_FOUND)
-      if(X11_Xinerama_FOUND)
-        string(REGEX MATCH ".*Xinerama.*" ${FLTK_LDFLAGS} FLTK_HAVE_XINERAMA)
-        if(FLTK_HAVE_XINERAMA)
-          list(APPEND FLTK_LIBRARIES ${X11_Xinerama_LIB})
-        endif(FLTK_HAVE_XINERAMA)
-      endif(X11_Xinerama_FOUND)
-    endif(UNIX AND FLTK_CONFIG_SCRIPT)
-  endif(FLTK_FOUND)
+    execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --use-gl --use-images --ldflags
+                    OUTPUT_VARIABLE FLTK_LIBRARIES)
+    string(STRIP ${FLTK_LIBRARIES} FLTK_LIBRARIES)
+    string(REGEX MATCH "fltk[_ ]jpeg" FLTK_JPEG ${FLTK_LIBRARIES})
+    string(REGEX MATCH "fltk[_ ]z" FLTK_Z ${FLTK_LIBRARIES})
+    string(REGEX MATCH "fltk[_ ]png" FLTK_PNG ${FLTK_LIBRARIES})
+  else(FLTK_CONFIG_SCRIPT)
+    set(FLTK_SKIP_FORMS TRUE)
+    set(FLTK_SKIP_FLUID TRUE)
+    find_package(FLTK)
+    if(FLTK_FOUND)
+      add_subdirectory(Fltk)
+      set_config_option(HAVE_FLTK "Fltk")
+      list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR})
+      # find fltk jpeg
+      find_library(FLTK_JPEG fltk_jpeg)
+      if(NOT FLTK_JPEG)
+        find_library(FLTK_JPEG fltkjpeg)
+      endif(NOT FLTK_JPEG)
+      if(FLTK_JPEG)
+        list(APPEND EXTERNAL_LIBRARIES ${FLTK_JPEG})
+        foreach(DIR ${FLTK_INCLUDE_DIR})
+          list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/jpeg)
+        endforeach(DIR)
+      endif(FLTK_JPEG)
+      # find fltk zlib
+      find_library(FLTK_Z fltk_z)
+      if(NOT FLTK_Z)
+        find_library(FLTK_Z fltkz)
+      endif(NOT FLTK_Z)
+      if(FLTK_Z)
+        list(APPEND EXTERNAL_LIBRARIES ${FLTK_Z})
+        foreach(DIR ${FLTK_INCLUDE_DIR})
+          list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/zlib)
+        endforeach(DIR)
+      endif(FLTK_Z)
+      # find fltk png
+      find_library(FLTK_PNG fltk_png)
+      if(NOT FLTK_PNG)
+        find_library(FLTK_PNG fltkpng)
+      endif(NOT FLTK_PNG)
+      if(FLTK_PNG)
+        list(APPEND EXTERNAL_LIBRARIES ${FLTK_PNG})
+        foreach(DIR ${FLTK_INCLUDE_DIR})
+          list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/png)
+        endforeach(DIR)
+      endif(FLTK_PNG)   
+    endif(FLTK_FOUND)
+  endif(FLTK_CONFIG_SCRIPT)
+  if(ENABLE_NATIVE_FILE_CHOOSER)
+    if(NOT FLTK_VERSION OR FLTK_VERSION EQUAL 1.1)
+      add_subdirectory(contrib/NativeFileChooser)
+      include_directories(contrib/NativeFileChooser)
+      add_definitions(-DFLTK1)
+    endif(NOT FLTK_VERSION OR FLTK_VERSION EQUAL 1.1)
+    set_config_option(HAVE_NATIVE_FILE_CHOOSER "NativeFileChooser")
+  endif(ENABLE_NATIVE_FILE_CHOOSER)
+  if(ENABLE_FL_TREE)
+    if(NOT FLTK_VERSION OR FLTK_VERSION EQUAL 1.1)
+      add_subdirectory(contrib/Fl_Tree)
+      include_directories(contrib/Fl_Tree)
+    endif(NOT FLTK_VERSION OR FLTK_VERSION EQUAL 1.1)
+    set_config_option(HAVE_FL_TREE "FlTree")
+  endif(ENABLE_FL_TREE)
 elseif(ENABLE_QT)
   find_package(Qt4)
   set(QT_USE_QTOPENGL TRUE)
@@ -368,72 +396,39 @@ if(HAVE_FLTK OR HAVE_QT OR ENABLE_GRAPHICS)
     message(SEND_ERROR "Cannot compile GUI without Mesh, Post or Plugin modules")
   endif(NOT HAVE_MESH OR NOT HAVE_POST OR NOT HAVE_PLUGINS)
   # get jpeg lib (if we have fltk first try to get the local jpeg lib)
-  if(HAVE_FLTK)
-    find_library(FLTK_JPEG fltk_jpeg)
-    if(NOT FLTK_JPEG)
-      find_library(FLTK_JPEG fltkjpeg)
-    endif(NOT FLTK_JPEG)
-    if(FLTK_JPEG)
-      set_config_option(HAVE_LIBJPEG "Jpeg(Fltk)")
-      list(APPEND EXTERNAL_LIBRARIES ${FLTK_JPEG})
-      foreach(DIR ${FLTK_INCLUDE_DIR})
-        list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/jpeg)
-      endforeach(DIR)
-    endif(FLTK_JPEG)
-  endif(HAVE_FLTK)
-  if(NOT FLTK_JPEG)
+  if(FLTK_JPEG)
+    set_config_option(HAVE_LIBJPEG "Jpeg(Fltk)")
+  else(FLTK_JPEG)
     find_package(JPEG)
     if(JPEG_FOUND)
       set_config_option(HAVE_LIBJPEG "Jpeg")
       list(APPEND EXTERNAL_LIBRARIES ${JPEG_LIBRARIES})
       list(APPEND EXTERNAL_INCLUDES ${JPEG_INCLUDE_DIR})
     endif(JPEG_FOUND)
-  endif(NOT FLTK_JPEG)
+  endif(FLTK_JPEG)
   # get zlib (if we have fltk first try to get the local zlib)
-  if(HAVE_FLTK)
-    find_library(FLTK_Z fltk_z)
-    if(NOT FLTK_Z)
-      find_library(FLTK_Z fltkz)
-    endif(NOT FLTK_Z)
-    if(FLTK_Z)
-      set_config_option(HAVE_LIBZ "Zlib(Fltk)")
-      list(APPEND EXTERNAL_LIBRARIES ${FLTK_Z})
-      foreach(DIR ${FLTK_INCLUDE_DIR})
-        list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/zlib)
-      endforeach(DIR)
-    endif(FLTK_Z)
-  endif(HAVE_FLTK)
-  if(NOT FLTK_Z)
+  if(FLTK_Z)
+    set_config_option(HAVE_LIBZ "Zlib(Fltk)")
+  else(FLTK_Z)
     find_package(ZLIB)
     if(ZLIB_FOUND)
       set_config_option(HAVE_LIBZ "Zlib")
       list(APPEND EXTERNAL_LIBRARIES ${ZLIB_LIBRARIES})
       list(APPEND EXTERNAL_INCLUDES ${ZLIB_INCLUDE_DIR})
     endif(ZLIB_FOUND)
-  endif(NOT FLTK_Z)
+  endif(FLTK_Z)
   # get png lib (if we have fltk first try to get the local png lib)
   if(HAVE_LIBZ)
-    if(HAVE_FLTK)
-      find_library(FLTK_PNG fltk_png)
-      if(NOT FLTK_PNG)
-        find_library(FLTK_PNG fltkpng)
-      endif(NOT FLTK_PNG)
-      if(FLTK_PNG)
-        set_config_option(HAVE_LIBPNG "Png(Fltk)")
-        list(APPEND EXTERNAL_LIBRARIES ${FLTK_PNG})
-        foreach(DIR ${FLTK_INCLUDE_DIR})
-          list(APPEND EXTERNAL_INCLUDES ${DIR}/FL/images ${DIR}/png)
-        endforeach(DIR)
-      endif(FLTK_PNG)
-    endif(HAVE_FLTK)
-    if(NOT FLTK_PNG)
+    if(FLTK_PNG)
+      set_config_option(HAVE_LIBPNG "Png(Fltk)")
+    else(FLTK_PNG)
       find_package(PNG)
       if(PNG_FOUND)
         set_config_option(HAVE_LIBPNG "Png")
         list(APPEND EXTERNAL_LIBRARIES ${PNG_LIBRARIES})
         list(APPEND EXTERNAL_INCLUDES ${PNG_INCLUDE_DIR})
       endif(PNG_FOUND)
-    endif(NOT FLTK_PNG)
+    endif(FLTK_PNG)
   endif(HAVE_LIBZ)
   find_package(OpenGL REQUIRED)
   if(OPENGL_GLU_FOUND)
@@ -1160,4 +1155,3 @@ message("")
 
 mark_as_advanced(BISON FLEX GMP_LIB GMSH_EXTRA_VERSION HDF5_LIB MAKEINFO 
                  MED_LIB OCC_INC SZ_LIB TAUCS_LIB ACIS_LIB TEXI2PDF)
-