diff --git a/contrib/mobile/CMakeLists.txt b/contrib/mobile/CMakeLists.txt
index f37e434cdbc4cc707b8af8f44759701bf4778fe1..e56cf87d684aff2882e562055a90630806a20087 100644
--- a/contrib/mobile/CMakeLists.txt
+++ b/contrib/mobile/CMakeLists.txt
@@ -59,9 +59,8 @@ if(ENABLE_BUILD_IOS_EMULATOR OR ENABLE_BUILD_IOS)
   add_custom_target(xcodeProject
     cd ${CMAKE_CURRENT_SOURCE_DIR}/utils/ && ${CMAKE_CURRENT_SOURCE_DIR}/utils/make_icon_ios.sh
     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/Onelab/
-    COMMAND ${CMAKE_COMMAND} -E copy_directory  ${CMAKE_CURRENT_SOURCE_DIR}/utils/ios.iconset/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/
-    COMMAND ${CMAKE_COMMAND} -E copy_directory  ${CMAKE_CURRENT_SOURCE_DIR}/iOS/Default-568h@2x.png ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Default-568h@2x.png
-    COMMAND ${CMAKE_COMMAND} -E copy_directory  ${CMAKE_CURRENT_SOURCE_DIR}/iOS/Onelab/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/
+    COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/utils/ios.iconset/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/
+    COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/iOS/Onelab/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/
     COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/iOS/Onelab.xcodeproj/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab.xcodeproj/
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/drawContext.cpp ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/
     COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/drawContext.h ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/
@@ -82,7 +81,7 @@ if(ENABLE_BUILD_IOS_EMULATOR OR ENABLE_BUILD_IOS)
     COMMAND ${CMAKE_COMMAND} -E copy ${PETSC_FRAMEWORK}/petsc ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/frameworks/petsc.framework/
   )
   copy_headers(${GETDP_FRAMEWORK}/Headers/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/frameworks/GetDP.framework/Headers/)
-  copy_headers(${GMSH_FRAMEWORK}/Headers/gmsh/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/frameworks/Gmsh.framework/Headers/)
+  copy_headers(${GMSH_FRAMEWORK}/Headers/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/frameworks/Gmsh.framework/Headers/)
   copy_headers(${PETSC_FRAMEWORK}/Headers/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/frameworks/petsc.framework/Headers/)
 
   message(STATUS "")
diff --git a/contrib/mobile/drawContext.cpp b/contrib/mobile/drawContext.cpp
index d60ff05f8bbe7536888f74957a49ac4e8eb25078..1432160c5c1cf0bccb858ca5083246bb705a2484 100644
--- a/contrib/mobile/drawContext.cpp
+++ b/contrib/mobile/drawContext.cpp
@@ -378,8 +378,8 @@ void drawContext::drawScale()
 		double xmin = this->_left + (this->_right - this->_left -width)/2.;
 		double ymin = this->_bottom + height + 2*height*nPview;
     
-		GLfloat *vertex = (GLfloat *)malloc(opt->nbIso*3*4*sizeof(GLfloat));
-		GLubyte *color = (GLubyte *)malloc(opt->nbIso*4*4*sizeof(GLubyte));
+		std::vector<GLfloat> vertex(opt->nbIso*3*4);
+		std::vector<GLubyte> color(opt->nbIso*4*4);
 		for(int i = 0; i < opt->nbIso; i++){
 			if(opt->intervalsType == PViewOptions::Discrete || opt->intervalsType == PViewOptions::Numeric)
 			{
@@ -451,9 +451,9 @@ void drawContext::drawScale()
 			}
 		}
 	
-		glVertexPointer(3, GL_FLOAT, 0, vertex);
+		glVertexPointer(3, GL_FLOAT, 0, &vertex[0]);
 		glEnableClientState(GL_VERTEX_ARRAY);
-		glColorPointer(4, GL_UNSIGNED_BYTE, 0, color);
+		glColorPointer(4, GL_UNSIGNED_BYTE, 0, &color[0]);
 		glEnableClientState(GL_COLOR_ARRAY);
 		if(opt->intervalsType == PViewOptions::Discrete || opt->intervalsType == PViewOptions::Numeric || opt->intervalsType == PViewOptions::Continuous)
 			glDrawArrays(GL_TRIANGLE_STRIP, 0, opt->nbIso*4);
@@ -461,20 +461,17 @@ void drawContext::drawScale()
 			glDrawArrays(GL_LINES, 0, opt->nbIso*4);
 		glDisableClientState(GL_COLOR_ARRAY);
 		glDisableClientState(GL_VERTEX_ARRAY);
-		free(vertex);
-		free(color);
 
 		char label[1024];
-		drawString *lbl = new drawString(p->getData()->getName().c_str(), 20);
-		lbl->draw(xmin+width/2, ymin-height/2, 0., _width/(_right-_left), _height/(_top-_bottom));
-		drawString *val = new drawString(p->getData()->getName().c_str(), 14);
+		drawString lbl(p->getData()->getName().c_str(), 20);
+		lbl.draw(xmin+width/2, ymin-height/2, 0., _width/(_right-_left), _height/(_top-_bottom));
+		drawString val(p->getData()->getName().c_str(), 14);
 		for(int i = 0; i < 3; i++) {
 			double v = opt->getScaleValue(i, 3, opt->tmpMin, opt->tmpMax);
 			sprintf(label, opt->format.c_str(), v);
-			val->setText(label);
-			val->draw(xmin+i*width/2, ymin+height/2, 0., _width/(_right-_left), _height/(_top-_bottom));
+			val.setText(label);
+			val.draw(xmin+i*width/2, ymin+height/2, 0., _width/(_right-_left), _height/(_top-_bottom));
 		}
-    
 		nPview++;
 	}
 	glPopMatrix();
@@ -522,12 +519,12 @@ void drawContext::drawAxes(float x0, float y0, float z0, float h)
 	glDrawArrays(GL_LINES, 0, 6);
 	glDisableClientState(GL_VERTEX_ARRAY);
 	glDisableClientState(GL_COLOR_ARRAY);
-	drawString *x = new drawString("X", 16,colors);
-	x->draw(x0+h, y0, z0, _width/(_right-_left), _height/(_top-_bottom));
-	drawString *y = new drawString("Y", 16,colors+8);
-	y->draw(x0, y0+h, z0, _width/(_right-_left), _height/(_top-_bottom));
-	drawString *z = new drawString("Z", 16,colors+16);
-	z->draw(x0, y0, z0+h, _width/(_right-_left), _height/(_top-_bottom));
+	drawString x ("X", 16,colors);
+	x.draw(x0+h, y0, z0, _width/(_right-_left), _height/(_top-_bottom));
+	drawString y("Y", 16,colors+8);
+	y.draw(x0, y0+h, z0, _width/(_right-_left), _height/(_top-_bottom));
+	drawString z("Z", 16,colors+16);
+	z.draw(x0, y0, z0+h, _width/(_right-_left), _height/(_top-_bottom));
 	glPopMatrix();
 	glLineWidth(1);
 }
diff --git a/contrib/mobile/drawGeom.cpp b/contrib/mobile/drawGeom.cpp
index a6780043c4b9412b223fc2bc71016d8fe65144ae..fda9d776c426091abad6def9a2c78efc4b10fe41 100644
--- a/contrib/mobile/drawGeom.cpp
+++ b/contrib/mobile/drawGeom.cpp
@@ -59,8 +59,7 @@ void drawGeomEdge(GEdge *e)
 	double t_max = t_bounds.high();
 
 	// Create a VA for this edge
-	GLfloat *edge = (GLfloat *) malloc(N*3*sizeof(GLfloat));
-		
+        std::vector<GLfloat> edge(N*3);
 	for(unsigned int i=0; i < N; i++) {
 		double t = t_min + (double)i / (double)(N-1) * (t_max - t_min);
 		GPoint p = e->point(t);
@@ -68,13 +67,12 @@ void drawGeomEdge(GEdge *e)
 	}
 	// Then print the VA
 	glLineWidth((GLfloat)CTX::instance()->geom.lineWidth);
-	glVertexPointer(3, GL_FLOAT, 0, edge);
+	glVertexPointer(3, GL_FLOAT, 0, &edge[0]);
 	glEnableClientState(GL_VERTEX_ARRAY);
 	glEnable(GL_LINE_SMOOTH);
 	glDrawArrays(GL_LINE_STRIP, 0, N);
 	glDisable(GL_LINE_SMOOTH);
 	glDisableClientState(GL_VERTEX_ARRAY);
-	free(edge);
 }
 void drawGeomFace(GFace *f)
 {
diff --git a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
index 7b96b3e70db3c0a11bc2f3f03619363cd39f3b26..5927b95050102376c012770bc50853d78f1e5185 100644
--- a/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
+++ b/contrib/mobile/iOS/Onelab.xcodeproj/project.pbxproj
@@ -18,7 +18,6 @@
 		9C92862D180D217B00AAABD4 /* icon_app_iphone_61.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C928626180D217A00AAABD4 /* icon_app_iphone_61.png */; };
 		9C92862E180D217B00AAABD4 /* icon_app_iphone_retina_61.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C928627180D217A00AAABD4 /* icon_app_iphone_retina_61.png */; };
 		9C92862F180D217B00AAABD4 /* icon_app_iphone_retina.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C928628180D217B00AAABD4 /* icon_app_iphone_retina.png */; };
-		9C928633180D297C00AAABD4 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9C928632180D297C00AAABD4 /* Default-568h@2x.png */; };
 		9C95B7F61726C88E00C0CCE2 /* main.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9C95B7F51726C88E00C0CCE2 /* main.mm */; };
 		9C96083B1712C16300E1D4A0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C96083A1712C16300E1D4A0 /* UIKit.framework */; };
 		9C96083D1712C16300E1D4A0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C96083C1712C16300E1D4A0 /* Foundation.framework */; };
@@ -304,7 +303,6 @@
 			buildActionMask = 2147483647;
 			files = (
 				9C9608AC1712EF0900E1D4A0 /* iPadStoryboard.storyboard in Resources */,
-				9C928633180D297C00AAABD4 /* Default-568h@2x.png in Resources */,
 				9CC85C021790286C00F241C4 /* files in Resources */,
 				9C92862D180D217B00AAABD4 /* icon_app_iphone_61.png in Resources */,
 				9C92862A180D217B00AAABD4 /* icon_app_ipad_retina_61.png in Resources */,
diff --git a/contrib/mobile/utils/make_icon_ios.sh b/contrib/mobile/utils/make_icon_ios.sh
index e394b63a85cd014505ade420ae34336113a4eb07..e772101d32e39cd1b5ff6e8e786deeb2ac1517fc 100755
--- a/contrib/mobile/utils/make_icon_ios.sh
+++ b/contrib/mobile/utils/make_icon_ios.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-mkdir ios.iconset
+mkdir -p ios.iconset
 # App icons (iPad)
 convert -scale 152 ../../../utils/icons/gmsh_1024x1024.png ios.iconset/icon_app_ipad_retina.png
 convert -scale 76 ../../../utils/icons/gmsh_1024x1024.png ios.iconset/icon_app_ipad.png