diff --git a/contrib/mobile/CMakeLists.txt b/contrib/mobile/CMakeLists.txt
index 2115bbe21a8e162d6842633261d3754d701fe0fa..19ec84210b1202ea1b8d5d51f73cb4ecc80896d4 100644
--- a/contrib/mobile/CMakeLists.txt
+++ b/contrib/mobile/CMakeLists.txt
@@ -72,7 +72,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/ ${CMAKE_CURRENT_BINARY_DIR}/Onelab/Onelab/frameworks/Gmsh.framework/Headers/)
+  copy_headers(${GMSH_FRAMEWORK}/Headers/gmsh/ ${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/)
 endif(ENABLE_BUILD_IOS_EMULATOR OR ENABLE_BUILD_IOS)
 
diff --git a/contrib/mobile/iOS/Onelab/OptionsViewController.mm b/contrib/mobile/iOS/Onelab/OptionsViewController.mm
index d963c7d70e3499129c8fbd7db31aad734222c164..5cd24e5faa284a21954af06d012c6a221e1ce57f 100644
--- a/contrib/mobile/iOS/Onelab/OptionsViewController.mm
+++ b/contrib/mobile/iOS/Onelab/OptionsViewController.mm
@@ -14,6 +14,7 @@
 #include <gmsh/PView.h>
 #include <gmsh/PViewData.h>
 #include <gmsh/PViewOptions.h>
+#include <gmsh/GmshDefines.h>
 
 @interface OptionsViewController ()
 
@@ -34,7 +35,8 @@
 {
     [super viewDidLoad];
 
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshParameters:) name:@"refreshParameters" object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshOptions:) name:@"refreshParameters" object:nil];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshOptions:) name:@"resetParameters" object:nil];
 
     self.navigationItem.title = @"Options";
 
@@ -64,10 +66,23 @@
     // Dispose of any resources that can be recreated.
 }
 
-- (void)refreshParameters:(id)sender
+- (void)refreshOptions:(id)sender
+{
+    [self performSelectorOnMainThread:@selector(refreshOptions) withObject:nil waitUntilDone:NO];
+}
+- (void)refreshOptions
 {
     NSInteger nrow = [self.tableView numberOfRowsInSection:1];
-    if(nrow < PView::list.size()-1)
+    if(PView::list.size() == 0)
+    {
+        NSMutableArray *array = [[NSMutableArray alloc] init];
+        for(NSInteger i = 0; i<nrow; i++)
+            [array addObject:[NSIndexPath indexPathForRow:i inSection:1]];
+        [self.tableView beginUpdates];
+        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithArray:array] withRowAnimation:UITableViewRowAnimationAutomatic];
+        [self.tableView endUpdates];
+    }
+    else if(nrow < PView::list.size())
     {
         NSMutableArray *array = [[NSMutableArray alloc] init];
         for(NSInteger i = nrow; i<PView::list.size(); i++)
@@ -119,8 +134,10 @@
     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
     if(cell == nil)
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"postproCell"];
-    else
-        return cell;
+    else {
+        cell = nil;
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"postproCell"];
+    }
     [cell setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.x, tableView.frame.size.width, cell.frame.size.height)];
     switch (indexPath.section) {
         case 0:
@@ -139,14 +156,14 @@
                 [showHideOptions addTarget:self action:@selector(setShowGeomLines:) forControlEvents:UIControlEventValueChanged];
             }
             else if(indexPath.row == 2) {
-                [lblOptions setText:@"Show mesh lines"];
-                [showHideOptions setOn:(CTX::instance()->mesh.lines)];
-                [showHideOptions addTarget:self action:@selector(setShowMeshLines:) forControlEvents:UIControlEventValueChanged];
+                [lblOptions setText:@"Show mesh surface edges"];
+                [showHideOptions setOn:(CTX::instance()->mesh.surfacesEdges)];
+                [showHideOptions addTarget:self action:@selector(setShowMeshSurfacesEdges:) forControlEvents:UIControlEventValueChanged];
             }
             else if(indexPath.row == 3) {
-                [lblOptions setText:@"Show mesh edges"];
-                [showHideOptions setOn:(CTX::instance()->mesh.surfacesEdges || CTX::instance()->mesh.volumesEdges)];
-                [showHideOptions addTarget:self action:@selector(setShowMeshEdges:) forControlEvents:UIControlEventValueChanged];
+                [lblOptions setText:@"Show mesh volumes edges"];
+                [showHideOptions setOn:CTX::instance()->mesh.volumesEdges];
+                [showHideOptions addTarget:self action:@selector(setShowMeshVolumesEdges:) forControlEvents:UIControlEventValueChanged];
             }
             [cell addSubview:showHideOptions];
             [cell addSubview:lblOptions];
@@ -191,17 +208,16 @@
     CTX::instance()->geom.lines = sender.on;
     [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" object:nil];
 }
-- (void)setShowMeshEdges:(UISwitch*)sender
+- (void)setShowMeshVolumesEdges:(UISwitch*)sender
 {
-    CTX::instance()->mesh.surfacesEdges = sender.on;
     CTX::instance()->mesh.volumesEdges = sender.on;
-    CTX::instance()->mesh.changed = YES;
+    CTX::instance()->mesh.changed = ENT_VOLUME;
     [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" object:nil];
 }
-- (void)setShowMeshLines:(UISwitch*)sender
+- (void)setShowMeshSurfacesEdges:(UISwitch*)sender
 {
-    CTX::instance()->mesh.lines = sender.on;
-    CTX::instance()->mesh.changed = YES;
+    CTX::instance()->mesh.surfacesEdges = sender.on;
+    CTX::instance()->mesh.changed = ENT_SURFACE;
     [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" object:nil];
 }
 -(IBAction)PViewVisible:(id)sender
diff --git a/contrib/mobile/iOS/Onelab/Parameter.mm b/contrib/mobile/iOS/Onelab/Parameter.mm
index 34641030613b9237519968261f87dd089629e2a4..c82b60f033ad1d20cd1e93ab25caaea7fb4d1e1b 100644
--- a/contrib/mobile/iOS/Onelab/Parameter.mm
+++ b/contrib/mobile/iOS/Onelab/Parameter.mm
@@ -355,6 +355,7 @@
     if(number.size() < 1) return YES;
     number[0].setValue([textField.text doubleValue]);
     onelab::server::instance()->set(number[0]);
+	[textField setText:[NSString stringWithFormat:@"%f", number[0].getValue()]];
     return YES;
 }
 -(BOOL)textFieldShouldReturn:(UITextField *)textField
diff --git a/contrib/mobile/iOS/Onelab/ParametersViewController.mm b/contrib/mobile/iOS/Onelab/ParametersViewController.mm
index 879b214f9ed4dd330dfad1e2f2df234e8f209c94..c008f84d655b7e9a57601f6a43e9deec543bb8d7 100644
--- a/contrib/mobile/iOS/Onelab/ParametersViewController.mm
+++ b/contrib/mobile/iOS/Onelab/ParametersViewController.mm
@@ -128,11 +128,6 @@
 }
 - (void)refreshTableView
 {
-	if(!_lastRefresh) _lastRefresh = [NSDate date];
-	else {
-		if([_lastRefresh timeIntervalSinceNow] >= -1) return;
-		_lastRefresh = [NSDate date];
-	}
 	std::vector<onelab::number> number;
     onelab::server::instance()->get(number);
 
@@ -209,8 +204,16 @@
 }
 - (void)refreshParameters:(id)sender
 {
+	[self performSelectorOnMainThread:@selector(refreshParameters) withObject:nil waitUntilDone:NO];
+}
+- (void)refreshParameters
+{
+	if(!_lastRefresh) _lastRefresh = [NSDate date];
+	else {
+		if([_lastRefresh timeIntervalSinceNow] >= -1) return;
+		_lastRefresh = [NSDate date];
+	}
 	[self refreshTableView]; // Get the param
-	[self.tableView setNeedsDisplay];
 }
 - (void)resetParameters:(id)sender
 {
@@ -218,8 +221,8 @@
     [_sections removeAllObjects];
     [_sectionstitle removeAllObjects];
     [self.tableView reloadData];
-    [self refreshParameters:sender];
-    onelab_cb("check");
+	onelab_cb("check");
+    [self refreshTableView];
     [[NSNotificationCenter defaultCenter] postNotificationName:@"requestRender" object:nil];
 }
 
@@ -283,8 +286,10 @@
     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
     if(cell == nil)
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
-    else
-        return cell;
+    else {
+		cell = nil;
+        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
+	}
 	[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
     [cell setUserInteractionEnabled:!([tmp isReadOnly])];
     [tmp setLabelFrame:CGRectMake(20, 5, cell.frame.size.width - 40, cell.frame.size.height/2)];