diff --git a/CMakeLists.txt b/CMakeLists.txt
index d5774abdaca41c89782c400af8b49f52e3092beb..62df3ea7a3cea927368bddfb315e3b89e7a2736b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -290,14 +290,25 @@ if(ENABLE_FLTK)
     set(HAVE_FLTK TRUE)
     list(APPEND CONFIG_OPTIONS "Fltk")
     list(APPEND EXTERNAL_INCLUDES ${FLTK_INCLUDE_DIR})
+    if(FLTK_CONFIG_SCRIPT)
+      execute_process(COMMAND ${FLTK_CONFIG_SCRIPT} --api-version
+                      OUTPUT_VARIABLE FLTK_VERSION)
+      message("-- Found fltk-config script for FLTK " ${FLTK_VERSION})
+    endif(FLTK_CONFIG_SCRIPT)
     if(ENABLE_NATIVE_FILE_CHOOSER)
-      add_subdirectory(contrib/NativeFileChooser)
+      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(HAVE_NATIVE_FILE_CHOOSER TRUE)
       list(APPEND CONFIG_OPTIONS "NativeFileChooser")
-      add_definitions(-DFLTK1)
     endif(ENABLE_NATIVE_FILE_CHOOSER)
     if(ENABLE_FL_TREE)
-      add_subdirectory(contrib/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(HAVE_FL_TREE TRUE)
       list(APPEND CONFIG_OPTIONS "FlTree")
     endif(ENABLE_FL_TREE)
@@ -403,31 +414,36 @@ endif(HAVE_FLTK OR HAVE_QT OR ENABLE_GRAPHICS)
 
 if(ENABLE_ANN)
   add_subdirectory(contrib/ANN)
+  include_directories(contrib/ANN/include)
   set(HAVE_ANN TRUE)
   list(APPEND CONFIG_OPTIONS "Ann")
 endif(ENABLE_ANN)
 
 if(ENABLE_CHACO)
   add_subdirectory(contrib/Chaco)
+  include_directories(contrib/Chaco/main)
   set(HAVE_CHACO TRUE)
   list(APPEND CONFIG_OPTIONS "Chaco")
 endif(ENABLE_CHACO)
 
 if(ENABLE_DINTEGRATION)
   add_subdirectory(contrib/DiscreteIntegration)
+  include_directories(contrib/DiscreteIntegration)
   set(HAVE_DINTEGRATION TRUE)
   list(APPEND CONFIG_OPTIONS "DIntegration")
 endif(ENABLE_DINTEGRATION)
 
 if(ENABLE_GMM)
+  include_directories(contrib/gmm)
   set(HAVE_GMM TRUE)
   list(APPEND CONFIG_OPTIONS "Gmm")
 endif(ENABLE_GMM)
 
 if(ENABLE_KBIPACK)
+  add_subdirectory(contrib/kbipack)
+  include_directories(contrib/kbipack)
   set(HAVE_KBIPACK TRUE)
   list(APPEND CONFIG_OPTIONS "Kbipack")
-  add_subdirectory(contrib/kbipack)
   find_library(GMP_LIB NAMES libgmp.a libgmp.dll.a)
   if(GMP_LIB)
     message("-- Found GMP library")
@@ -440,6 +456,7 @@ endif(ENABLE_KBIPACK)
 
 if(ENABLE_MATHEX)
   add_subdirectory(contrib/MathEx)
+  include_directories(contrib/MathEx)
   set(HAVE_MATHEX TRUE)
   list(APPEND CONFIG_OPTIONS "MathEx")
 endif(ENABLE_MATHEX)
@@ -459,6 +476,7 @@ endif(ENABLE_MPI)
 
 if(ENABLE_METIS)
   add_subdirectory(contrib/Metis)
+  include_directories(contrib/Metis)
   set(HAVE_METIS TRUE)
   list(APPEND CONFIG_OPTIONS "Metis")
   message("WARNING: By including Metis you have to comply with Metis' special "
@@ -467,6 +485,8 @@ endif(ENABLE_METIS)
 
 if(ENABLE_NETGEN)
   add_subdirectory(contrib/Netgen)
+  include_directories(contrib/Netgen contrib/Netgen/libsrc/include 
+                      contrib/Netgen/libsrc/interface)
   set(HAVE_NETGEN TRUE)
   list(APPEND CONFIG_OPTIONS "Netgen")
   add_definitions(-DNO_PARALLEL_THREADS)
@@ -474,6 +494,7 @@ endif(ENABLE_NETGEN)
 
 if(ENABLE_TETGEN_NEW AND EXISTS ${CMAKE_SOURCE_DIR}/contrib/TetgenNew/tetgen.h)
   add_subdirectory(contrib/TetgenNew)
+  include_directories(contrib/TetgenNew)
   set(HAVE_TETGEN TRUE)
   list(APPEND CONFIG_OPTIONS "TetgenNew")
   add_definitions(-DTETLIBRARY)
@@ -481,6 +502,7 @@ if(ENABLE_TETGEN_NEW AND EXISTS ${CMAKE_SOURCE_DIR}/contrib/TetgenNew/tetgen.h)
           "that is KNOWN TO BE BUGGY on 64 bits archs and on WIN32/MSVC.")
 elseif(ENABLE_TETGEN AND EXISTS ${CMAKE_SOURCE_DIR}/contrib/Tetgen/tetgen.h)
   add_subdirectory(contrib/Tetgen)
+  include_directories(contrib/Tetgen)
   set(HAVE_TETGEN TRUE)
   list(APPEND CONFIG_OPTIONS "Tetgen")
   add_definitions(-DTETLIBRARY)
@@ -770,11 +792,7 @@ endif(HAVE_FLTK)
 
 # we could specify include dirs more selectively, but this is simpler
 include_directories(Common Fltk Geo Graphics Mesh Solver Numeric Parser Plugin
-  Post Qt contrib/ANN/include contrib/Chaco/main contrib/DiscreteIntegration
-  contrib/MathEx contrib/Metis contrib/NativeFileChooser contrib/Netgen 
-  contrib/Netgen/libsrc/include contrib/Netgen/libsrc/interface
-  contrib/Tetgen contrib/Fl_Tree contrib/gmm contrib/kbipack
-  ${EXTERNAL_INCLUDES} ${CMAKE_BINARY_DIR}/Common)
+  Post Qt ${EXTERNAL_INCLUDES} ${CMAKE_BINARY_DIR}/Common)
 
 # group sources for easier navigation in IDEs
 foreach(DIR ${GMSH_DIRS})
diff --git a/Common/StringUtils.cpp b/Common/StringUtils.cpp
index 5b289fee6759746738f47c79bb56ce9db65b17ab..666924430784f272858cc464d25a81dd19d69eb3 100644
--- a/Common/StringUtils.cpp
+++ b/Common/StringUtils.cpp
@@ -93,8 +93,8 @@ std::vector<std::string> SplitFileName(const std::string &fileName)
   // returns [path, baseName, extension]
   int idot = fileName.find_last_of('.');
   int islash = fileName.find_last_of("/\\");
-  if(idot == (int)std::string::npos) idot = -1;
-  if(islash == (int)std::string::npos) islash = -1;
+  if(idot == std::string::npos) idot = -1;
+  if(islash == std::string::npos) islash = -1;
   std::vector<std::string> s(3);
   if(idot > 0)
     s[2] = fileName.substr(idot);
diff --git a/Fltk/visibilityWindow.cpp b/Fltk/visibilityWindow.cpp
index 41df59730c6371b975b32e1d45e68a5f86eca692..bdfeb78d83cdca92ab5a739aa9af83483ae6bb13 100644
--- a/Fltk/visibilityWindow.cpp
+++ b/Fltk/visibilityWindow.cpp
@@ -430,7 +430,7 @@ static void _add_vertex(GVertex *gv, Fl_Tree *tree, std::string path)
   vertex << path << "Point " << gv->tag() << "/";
   Fl_Tree_Item *n = tree->add(vertex.str().c_str());
   if(gv->getVisibility()) n->select(1);
-  n->userdata((void*)gv);
+  n->user_data((void*)gv);
   n->close();
 }
 
@@ -440,7 +440,7 @@ static void _add_edge(GEdge *ge, Fl_Tree *tree, std::string path)
   edge << path << "Line " << ge->tag() << "/";
   Fl_Tree_Item *n = tree->add(edge.str().c_str());
   if(ge->getVisibility()) n->select(1);
-  n->userdata((void*)ge);
+  n->user_data((void*)ge);
   n->close();
   if(ge->getBeginVertex())
     _add_vertex(ge->getBeginVertex(), tree, edge.str());
@@ -454,7 +454,7 @@ static void _add_face(GFace *gf, Fl_Tree *tree, std::string path)
   face << path << "Surface " << gf->tag() << "/";
   Fl_Tree_Item *n = tree->add(face.str().c_str());
   if(gf->getVisibility()) n->select(1);
-  n->userdata((void*)gf);
+  n->user_data((void*)gf);
   n->close();
   std::list<GEdge*> edges = gf->edges();
   for(std::list<GEdge*>::iterator it = edges.begin(); it != edges.end(); it++)
@@ -467,7 +467,7 @@ static void _add_region(GRegion *gr, Fl_Tree *tree, std::string path)
   region << path << "Volume " << gr->tag() << "/";
   Fl_Tree_Item *n = tree->add(region.str().c_str());
   if(gr->getVisibility()) n->select(1);
-  n->userdata((void*)gr);
+  n->user_data((void*)gr);
   n->close();
   std::list<GFace*> faces = gr->faces();
   for(std::list<GFace*>::iterator it = faces.begin(); it != faces.end(); it++)
@@ -605,8 +605,8 @@ static void _recur_select(Fl_Tree_Item *n)
 
 static void _recur_set_visible(Fl_Tree_Item *n)
 {
-  if(n->userdata() && n->is_selected()){
-    GEntity *ge = (GEntity*)n->userdata();
+  if(n->user_data() && n->is_selected()){
+    GEntity *ge = (GEntity*)n->user_data();
     bool recursive = FlGui::instance()->visibility->butt[0]->value() ? true : false;
     ge->setVisibility(1, recursive);
     // force this: if we ask to see an entity, let's assume that we
@@ -619,8 +619,8 @@ static void _recur_set_visible(Fl_Tree_Item *n)
 
 static void _recur_update_selected(Fl_Tree_Item *n)
 {
-  if(n->userdata()){
-    GEntity *ge = (GEntity*)n->userdata();
+  if(n->user_data()){
+    GEntity *ge = (GEntity*)n->user_data();
     n->select(ge->getVisibility() ? 1 : 0);
   }
   for(int i = 0; i < n->children(); i++)
diff --git a/Solver/linearSystemCSR.cpp b/Solver/linearSystemCSR.cpp
index 08c70c279e290ca49d83ca4c4d3d8c08a079d0ff..fd31746723c5fbe2ddd3beffb6af44b6855a8925 100644
--- a/Solver/linearSystemCSR.cpp
+++ b/Solver/linearSystemCSR.cpp
@@ -342,7 +342,7 @@ int linearSystemCSRTaucs<double>::systemSolve()
   myVeryCuteTaucsMatrix.values.d = (double*)_a->array;
   myVeryCuteTaucsMatrix.flags = TAUCS_SYMMETRIC | TAUCS_LOWER | TAUCS_DOUBLE;
 
-  char* options[] = { "taucs.factor.LLT=true", NULL };
+  char* options[] = { (char*)"taucs.factor.LLT=true", NULL };
   double t1 = Cpu();
   int result = taucs_linsolve(&myVeryCuteTaucsMatrix,
                               NULL,
diff --git a/contrib/Fl_Tree/FL/Fl_Tree_Item.H b/contrib/Fl_Tree/FL/Fl_Tree_Item.H
index 1274c62601894190516005672ef5a35f83db4d29..a474e6bc4f322cac1149f4366b5e27d3b0cdf045 100644
--- a/contrib/Fl_Tree/FL/Fl_Tree_Item.H
+++ b/contrib/Fl_Tree/FL/Fl_Tree_Item.H
@@ -278,11 +278,11 @@ public:
         return(_usericon);
     }
     /// Set the user data.
-    void userdata(void *val) {
+    void user_data(void *val) {
         _userdata = val;
     }
     /// Get the user data.
-    void *userdata() const {
+    void *user_data() const {
         return(_userdata);
     }
     //////////////////