diff --git a/Fltk/FlGui.cpp b/Fltk/FlGui.cpp
index 80e372c70197740379fc9ee2afdee366e783e1f1..df0f8a5a1ca9d3f2ab94b55b80e205234b890a28 100644
--- a/Fltk/FlGui.cpp
+++ b/Fltk/FlGui.cpp
@@ -5,6 +5,7 @@
 
 #include <sstream>
 #include <string.h>
+#include <inttypes.h>
 #include <FL/Fl.H>
 #include <FL/Fl_Tooltip.H>
 #include <FL/Fl_Shared_Image.H>
@@ -85,7 +86,7 @@ class drawContextFltk : public drawContextGlobal{
   int getFontEnum(int index)
   {
     if(index >= 0 && index < NUM_FONTS)
-      return (long)menu_font_names[index].user_data();
+      return (intptr_t)menu_font_names[index].user_data();
     return FL_HELVETICA;
   }
   const char *getFontName(int index)
diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp
index 3f6ffb44fe47e11537661a58d16ebc90cadaffc9..8ec6dacc0030bd1bbb7ee104cebbb1b600c292da 100644
--- a/Fltk/menuWindow.cpp
+++ b/Fltk/menuWindow.cpp
@@ -6,6 +6,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <inttypes.h>
 #include <time.h>
 #include <FL/Fl_Box.H>
 #include <FL/fl_ask.H>
@@ -1825,13 +1826,15 @@ static void mesh_change_order_cb(Fl_Widget *w, void *data)
 
 static void mesh_degree_cb(Fl_Widget *w, void *data)
 {
-  if((long)data == 2)
+  int degree = (intptr_t)data;
+  if(degree == 2)
     SetOrderN(GModel::current(), 2, CTX::instance()->mesh.secondOrderLinear, 
               CTX::instance()->mesh.secondOrderIncomplete);
-  else if ((long)data == 1)
+  else if (degree == 1)
     SetOrder1(GModel::current());
   else // For now, use the same options as for second order meshes
-    SetOrderN(GModel::current(), (long)data, CTX::instance()->mesh.secondOrderLinear, 
+    SetOrderN(GModel::current(), degree, 
+	      CTX::instance()->mesh.secondOrderLinear, 
               CTX::instance()->mesh.secondOrderIncomplete);
   CTX::instance()->mesh.changed |= (ENT_LINE | ENT_SURFACE | ENT_VOLUME);
   drawContext::global()->draw();
@@ -2083,7 +2086,7 @@ static void mesh_define_compound_entity_cb(Fl_Widget *w, void *data)
 
 static void view_toggle_cb(Fl_Widget *w, void *data)
 {
-  int num = (int)(long)data;
+  int num = (intptr_t)data;
   opt_view_visible(num, GMSH_SET,
                    FlGui::instance()->menu->toggle[num]->value());
   drawContext::global()->draw();
@@ -2122,7 +2125,7 @@ static void view_reload(int index)
 
 static void view_reload_cb(Fl_Widget *w, void *data)
 {
-  view_reload((int)(long)data);
+  view_reload((intptr_t)data);
   drawContext::global()->draw();
 }
 
@@ -2145,7 +2148,7 @@ static void view_remove_other_cb(Fl_Widget *w, void *data)
 {
   if(PView::list.empty()) return;
   for(int i = PView::list.size() - 1; i >= 0; i--)
-    if(i != (long)data) delete PView::list[i];
+    if(i != (intptr_t)data) delete PView::list[i];
   FlGui::instance()->updateViews();
   drawContext::global()->draw();
 }
@@ -2187,7 +2190,7 @@ static void view_remove_empty_cb(Fl_Widget *w, void *data)
 
 static void view_remove_cb(Fl_Widget *w, void *data)
 {
-  delete PView::list[(int)(long)data];
+  delete PView::list[(intptr_t)data];
   FlGui::instance()->updateViews();
   drawContext::global()->draw();
 }
@@ -2212,49 +2215,49 @@ static void view_save_as(int index, const char *title, int format)
 
 static void view_save_ascii_cb(Fl_Widget *w, void *data)
 {
-  view_save_as((int)(long)data, "Save As ASCII View", 0);
+  view_save_as((intptr_t)data, "Save As ASCII View", 0);
 }
 
 static void view_save_binary_cb(Fl_Widget *w, void *data)
 {
-  view_save_as((int)(long)data, "Save As Binary View", 1);
+  view_save_as((intptr_t)data, "Save As Binary View", 1);
 }
 
 static void view_save_parsed_cb(Fl_Widget *w, void *data)
 {
-  view_save_as((int)(long)data, "Save As Parsed View", 2);
+  view_save_as((intptr_t)data, "Save As Parsed View", 2);
 }
 
 static void view_save_stl_cb(Fl_Widget *w, void *data)
 {
-  view_save_as((int)(long)data, "Save As STL Triangulation", 3);
+  view_save_as((intptr_t)data, "Save As STL Triangulation", 3);
 }
 
 static void view_save_txt_cb(Fl_Widget *w, void *data)
 {
-  view_save_as((int)(long)data, "Save As Raw Text", 4);
+  view_save_as((intptr_t)data, "Save As Raw Text", 4);
 }
 
 static void view_save_msh_cb(Fl_Widget *w, void *data)
 {
-  view_save_as((int)(long)data, "Save As Gmsh Mesh", 5);
+  view_save_as((intptr_t)data, "Save As Gmsh Mesh", 5);
 }
 
 static void view_save_med_cb(Fl_Widget *w, void *data)
 {
-  view_save_as((int)(long)data, "Save As MED file", 6);
+  view_save_as((intptr_t)data, "Save As MED file", 6);
 }
 
 static void view_alias_cb(Fl_Widget *w, void *data)
 {
-  new PView(PView::list[(int)(long)data], false);
+  new PView(PView::list[(intptr_t)data], false);
   FlGui::instance()->updateViews();
   drawContext::global()->draw();
 }
 
 static void view_alias_with_options_cb(Fl_Widget *w, void *data)
 {
-  new PView(PView::list[(int)(long)data], true);
+  new PView(PView::list[(intptr_t)data], true);
   FlGui::instance()->updateViews();
   drawContext::global()->draw();
 }
@@ -2305,14 +2308,14 @@ static void view_all_visible_cb(Fl_Widget *w, void *data)
 {
   for(unsigned int i = 0; i < PView::list.size(); i++)
     opt_view_visible(i, GMSH_SET | GMSH_GUI, 
-                     (long)data < 0 ? !opt_view_visible(i, GMSH_GET, 0) :
-                     (long)data > 0 ? 1 : 0);
+                     (intptr_t)data < 0 ? !opt_view_visible(i, GMSH_GET, 0) :
+                     (intptr_t)data > 0 ? 1 : 0);
   drawContext::global()->draw();
 }
 
 static void view_applybgmesh_cb(Fl_Widget *w, void *data)
 {
-  int index =  (int)(long)data;
+  int index =  (intptr_t)data;
   if(index >= 0 && index < (int)PView::list.size()){
     GModel::current()->getFields()->setBackgroundMesh(index);
   }
diff --git a/Fltk/optionWindow.cpp b/Fltk/optionWindow.cpp
index 22a515beea6ea40987ae449daa9647036ffcb2e9..07b7159db1a06bf9af495eeea3fc81ddb8a3f8cf 100644
--- a/Fltk/optionWindow.cpp
+++ b/Fltk/optionWindow.cpp
@@ -4,6 +4,7 @@
 // bugs and problems to <gmsh@geuz.org>.
 
 #include <string.h>
+#include <inttypes.h>
 #include <FL/Fl_Tabs.H>
 #include <FL/Fl_Scroll.H>
 #include <FL/Fl_Color_Chooser.H>
@@ -544,7 +545,7 @@ static void post_options_ok_cb(Fl_Widget *w, void *data)
 
 void view_options_cb(Fl_Widget *w, void *data)
 {
-  FlGui::instance()->options->showGroup((int)(long)data + 6);
+  FlGui::instance()->options->showGroup((intptr_t)data + 6);
 }
 
 static void view_options_timestep_cb(Fl_Widget *w, void *data)
diff --git a/Fltk/pluginWindow.cpp b/Fltk/pluginWindow.cpp
index 9e53915ed149740b7350d04c5fe155f812276edb..7d4881571b03cb251fb22d56bb1cf2fa3d0795a2 100644
--- a/Fltk/pluginWindow.cpp
+++ b/Fltk/pluginWindow.cpp
@@ -5,6 +5,7 @@
 
 #include <vector>
 #include <string.h>
+#include <inttypes.h>
 #include <FL/Fl_Return_Button.H>
 #include <FL/Fl_Group.H>
 #include <FL/Fl_Value_Input.H>
@@ -36,7 +37,7 @@ class PluginDialogBox{
 
 void plugin_cb(Fl_Widget *w, void *data)
 {
-  FlGui::instance()->plugins->show((int)(long)data);
+  FlGui::instance()->plugins->show((intptr_t)data);
 }
 
 static void plugin_input_value_cb(Fl_Widget *w, void *data)
diff --git a/Fltk/solverWindow.cpp b/Fltk/solverWindow.cpp
index 4d21b22fefbc2ea4afd3ee3fb4ba2fdaf75fa607..3f91ce387f3f3ec5b3cffefa7a6796c728b18165 100644
--- a/Fltk/solverWindow.cpp
+++ b/Fltk/solverWindow.cpp
@@ -4,6 +4,7 @@
 // bugs and problems to <gmsh@geuz.org>.
 
 #include <string.h>
+#include <inttypes.h>
 #include <FL/Fl_Tabs.H>
 #include <FL/Fl_Box.H>
 #include <FL/Fl_Return_Button.H>
@@ -273,7 +274,7 @@ void ConnectionManager::run(std::string args)
 
 void solver_cb(Fl_Widget *w, void *data)
 {
-  int num = (int)(long)data;
+  int num = (intptr_t)data;
 
   std::vector<std::string> split = SplitFileName(GModel::current()->getFileName());
 
@@ -306,7 +307,7 @@ void solver_cb(Fl_Widget *w, void *data)
 
 static void solver_ok_cb(Fl_Widget *w, void *data)
 {
-  int num = (int)(long)data;
+  int num = (intptr_t)data;
 
   opt_solver_client_server
     (num, GMSH_SET, FlGui::instance()->solver[num]->menu->menu()[0].value() ? 1 : 0);
@@ -336,7 +337,7 @@ static void solver_ok_cb(Fl_Widget *w, void *data)
 
 static void solver_choose_executable_cb(Fl_Widget *w, void *data)
 {
-  int num = (int)(long)data;
+  int num = (intptr_t)data;
   std::string pattern = "*";
 #if defined(WIN32)
   pattern += ".exe";
@@ -350,7 +351,7 @@ static void solver_choose_executable_cb(Fl_Widget *w, void *data)
 
 static void solver_file_open_cb(Fl_Widget *w, void *data)
 {
-  int num = (int)(long)data;
+  int num = (intptr_t)data;
   std::string pattern = "*" + ConnectionManager::get(num)->inputFileExtension;
 
   if(fileChooser(FILE_CHOOSER_SINGLE, "Choose", pattern.c_str())) {
@@ -361,7 +362,7 @@ static void solver_file_open_cb(Fl_Widget *w, void *data)
 
 static void solver_file_edit_cb(Fl_Widget *w, void *data)
 {
-  int num = (int)(long)data;
+  int num = (intptr_t)data;
   std::string prog = FixWindowsPath(CTX::instance()->editor);
   std::string file = FixWindowsPath(FlGui::instance()->solver[num]->input[0]->value());
   SystemCall(ReplaceSubString("%s", file, prog));
@@ -369,7 +370,7 @@ static void solver_file_edit_cb(Fl_Widget *w, void *data)
 
 static void solver_choose_mesh_cb(Fl_Widget *w, void *data)
 {
-  int num = (int)(long)data;
+  int num = (intptr_t)data;
   if(fileChooser(FILE_CHOOSER_SINGLE, "Choose", "*.msh")){
     FlGui::instance()->solver[num]->input[1]->value(fileChooserGetName(1).c_str());
     solver_ok_cb(w, data);
@@ -409,7 +410,7 @@ static void solver_command_cb(Fl_Widget *w, void *data)
 
 static void solver_kill_cb(Fl_Widget *w, void *data)
 {
-  int num = (int)(long)data;
+  int num = (intptr_t)data;
   ConnectionManager::get(num)->kill();
 }
 
diff --git a/Fltk/visibilityWindow.cpp b/Fltk/visibilityWindow.cpp
index 4f86ebac5c8589a2ea18e080b7b14e5d08bd5746..ead516741f41916a5f79caa507ae9b1b1932f899 100644
--- a/Fltk/visibilityWindow.cpp
+++ b/Fltk/visibilityWindow.cpp
@@ -7,6 +7,7 @@
 #include <sstream>
 #include <map>
 #include <vector>
+#include <inttypes.h>
 #include <string.h>
 #include <FL/Fl_Tabs.H>
 #include <FL/Fl_Box.H>
@@ -896,7 +897,7 @@ static void visibility_number_cb(Fl_Widget *w, void *data)
   // for surfaces, 5 for volumes, 6 for physical points, 7 for
   // physical lines, 8 for physical surfaces and 9 for physical
   // volumes
-  int what = (int)(long)data;
+  int what = (intptr_t)data;
   char val;
   if(what >= 100){ // show
     val = 1;