diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index eac616bf456f31e163212f7f2dbbc9110c71b6da..a74a778ff7c77b28e86163e612dc9bce362b2639 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -2731,7 +2731,7 @@ static void _add_new_multiline(std::string type)
     }
     if(ib == 'e') {
       if(p.size() >= 2)
-	add_multline(type, p.size(), &p[0], CTX.filename);
+	add_multline(type, p, CTX.filename);
       WID->reset_visibility();
       ZeroHighlight();
       Draw();
@@ -2796,7 +2796,7 @@ static void _add_new_line()
       break;
     }
     if(p.size() == 2) {
-      add_multline("Line", p.size(), &p[0], CTX.filename);
+      add_multline("Line", p, CTX.filename);
       WID->reset_visibility();
       ZeroHighlight();
       Draw();
@@ -3801,7 +3801,7 @@ static void _add_transfinite(int dim)
     if(ib == 'e') {
       if(dim == 1) {
         if(p.size())
-          add_trsfline(p.size(), &p[0], CTX.filename,
+          add_trsfline(p, CTX.filename,
                        WID->context_mesh_choice[0]->text(),
                        WID->context_mesh_input[2]->value(),
                        WID->context_mesh_input[1]->value());
@@ -3875,14 +3875,14 @@ static void _add_transfinite(int dim)
             switch (dim) {
             case 2:
               if(p.size() == 3 + 1 || p.size() == 4 + 1)
-                add_trsfsurf(p.size(), &p[0], CTX.filename,
+                add_trsfsurf(p, CTX.filename,
                              WID->context_mesh_choice[1]->text());
               else
                 Msg::Error("Wrong number of points for transfinite surface");
               break;
             case 3:
               if(p.size() == 6 + 1 || p.size() == 8 + 1)
-                add_trsfvol(p.size(), &p[0], CTX.filename);
+                add_trsfvol(p, CTX.filename);
               else
                 Msg::Error("Wrong number of points for transfinite volume");
               break;
diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp
index 3f4dc2b31293843602308d5d1de5adad35bd1c54..9ea375feecad35a8cf7106d5b211fa898e372412 100644
--- a/Geo/GeoStringInterface.cpp
+++ b/Geo/GeoStringInterface.cpp
@@ -130,21 +130,6 @@ void delet(List_T *list, std::string filename, std::string what)
   add_infile(sstream.str(), filename, true);
 }
 
-void add_trsfsurf(int N, int *l, std::string filename, std::string dir)
-{
-  std::ostringstream sstream;
-  sstream << "Transfinite Surface {" << l[0] << "} = {";
-  for(int i = 1; i < N; i++) {
-    if(i > 1) sstream << ", ";
-    sstream << l[i];
-  }
-  if(dir == "Left")
-    sstream << "};";
-  else
-    sstream << "} " << dir << ";";
-  add_infile(sstream.str(), filename);
-}
-
 void add_charlength(List_T *list, std::string filename, std::string lc)
 {
   std::ostringstream sstream;
@@ -159,19 +144,45 @@ void add_recosurf(List_T *list, std::string filename)
   add_infile(sstream.str(), filename);
 }
 
-void add_trsfline(int N, int *l, std::string filename, std::string type, 
+void add_trsfline(std::vector<int> &l, std::string filename, std::string type, 
                   std::string typearg, std::string pts)
 {
   std::ostringstream sstream;
   sstream << "Transfinite Line {";
-  for(int i = 0; i < N; i++) {
+  for(unsigned int i = 0; i < l.size(); i++){
     if(i) sstream << ", ";
     sstream << l[i];
   }
-  if(typearg.empty())
-    sstream << "} = " << pts << ";";
+  sstream << "} = " << pts;
+  if(typearg.size()) sstream << " Using " << type << " " << typearg;
+  sstream << ";";
+  add_infile(sstream.str(), filename);
+}
+
+void add_trsfsurf(std::vector<int> &l, std::string filename, std::string dir)
+{
+  std::ostringstream sstream;
+  sstream << "Transfinite Surface {" << l[0] << "} = {";
+  for(unsigned int i = 1; i < l.size(); i++) {
+    if(i > 1) sstream << ", ";
+    sstream << l[i];
+  }
+  if(dir == "Left")
+    sstream << "};";
   else
-    sstream << "} = " << pts << "Using " << type << " " << typearg << ";";
+    sstream << "} " << dir << ";";
+  add_infile(sstream.str(), filename);
+}
+
+void add_trsfvol(std::vector<int> &l, std::string filename)
+{
+  std::ostringstream sstream;
+  sstream << "Transfinite Volume{" << l[0] << "} = {";
+  for(unsigned int i = 1; i < l.size(); i++) {
+    if(i > 1) sstream << ", ";
+    sstream << l[i];
+  }
+  sstream << "};";
   add_infile(sstream.str(), filename);
 }
 
@@ -214,18 +225,18 @@ void delete_field(int field_id, std::string filename)
   add_infile(sstream.str(), filename);
 }
 
-void set_background_field(int field_id,std::string filename)
+void set_background_field(int field_id, std::string filename)
 {
   std::ostringstream sstream;
   sstream << "Background Field = " << field_id << ";";
   add_infile(sstream.str(), filename);
 }
 
-void add_multline(std::string type, int N, int *p, std::string filename)
+void add_multline(std::string type, std::vector<int> &p, std::string filename)
 {
   std::ostringstream sstream;
   sstream << type << "(" << NEWLINE() << ") = {";
-  for(int i = 0; i < N; i++) {
+  for(unsigned int i = 0; i < p.size(); i++) {
     if(i) sstream << ", ";
     sstream << p[i];
   }
@@ -281,18 +292,6 @@ void add_vol(List_T *list, std::string filename)
   add_infile(sstream.str(), filename);
 }
 
-void add_trsfvol(int N, int *l, std::string filename)
-{
-  std::ostringstream sstream;
-  sstream << "Transfinite Volume{" << l[0] << "} = {";
-  for(int i = 1; i < N; i++) {
-    if(i > 1) sstream << ", ";
-    sstream << l[i];
-  }
-  sstream << "};";
-  add_infile(sstream.str(), filename);
-}
-
 void add_physical(std::string type, List_T *list, std::string filename)
 {
   std::ostringstream sstream;
diff --git a/Geo/GeoStringInterface.h b/Geo/GeoStringInterface.h
index f3408363dd1bd625e93183bc37b9f18f6d0790d8..5e05c4576e9c4365eb733cc5f28f90dac7648e32 100644
--- a/Geo/GeoStringInterface.h
+++ b/Geo/GeoStringInterface.h
@@ -7,6 +7,7 @@
 #define _GEO_STRING_INTERFACE_H_
 
 #include <string>
+#include <vector>
 #include "ListUtils.h"
 
 double evaluate_scalarfunction(std::string var, double val, std::string funct);
@@ -14,16 +15,16 @@ double evaluate_scalarfunction(std::string var, double val, std::string funct);
 void coherence(std::string filename);
 void delet(List_T *list, std::string filename, std::string what);
 void add_infile(std::string text, std::string filename, bool deleted_something=false);
-void add_trsfline(int N, int *l, std::string filename, std::string type, 
-                  std::string typearg, std::string pts);
-void add_trsfsurf(int N, int *l, std::string filename, std::string dir);
-void add_trsfvol(int N, int *l, std::string filename);
 void add_charlength(List_T *list, std::string filename, std::string lc);
 void add_recosurf(List_T *list, std::string filename);
+void add_trsfline(std::vector<int> &l, std::string filename, std::string type, 
+                  std::string typearg, std::string pts);
+void add_trsfsurf(std::vector<int> &l, std::string filename, std::string dir);
+void add_trsfvol(std::vector<int> &l, std::string filename);
 void add_param(std::string par, std::string value, std::string filename);
 void add_point(std::string filename, std::string x, std::string y, std::string z, 
                std::string lc);
-void add_multline(std::string type, int N, int *p, std::string filename);
+void add_multline(std::string type, std::vector<int> &p, std::string filename);
 void add_circ(int p1, int p2, int p3, std::string filename);
 void add_ell(int p1, int p2, int p3, int p4, std::string filename);
 void add_field_option(int field_id, std::string option_name, std::string option_value,