diff --git a/contrib/mobile/Android/AndroidManifest.xml b/contrib/mobile/Android/AndroidManifest.xml
index c9e84de4f23aed5f17b0cbee7dbbf093bb69aa14..68c69613b8c3f04c9de7f337d09758efd89b8250 100644
--- a/contrib/mobile/Android/AndroidManifest.xml
+++ b/contrib/mobile/Android/AndroidManifest.xml
@@ -1,7 +1,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="org.geuz.onelab"
-          android:versionCode="15"
-          android:versionName="1.2.1"
+          android:versionCode="16"
+          android:versionName="1.2.2"
           android:installLocation="auto" >
   
   <uses-sdk android:minSdkVersion="14"
diff --git a/contrib/mobile/iOS/Onelab/Onelab-Info.plist b/contrib/mobile/iOS/Onelab/Onelab-Info.plist
index 20de3e0c9613a55e719c025f275c7be475052378..38ba3dd96f875152cd427f84fa9e9b5df0daf086 100644
--- a/contrib/mobile/iOS/Onelab/Onelab-Info.plist
+++ b/contrib/mobile/iOS/Onelab/Onelab-Info.plist
@@ -35,11 +35,11 @@
     <key>CFBundlePackageType</key>
     <string>APPL</string>
     <key>CFBundleShortVersionString</key>
-    <string>1.2.0</string>
+    <string>1.2.1</string>
     <key>CFBundleSignature</key>
     <string>????</string>
     <key>CFBundleVersion</key>
-    <string>1.2.0</string>
+    <string>1.2.1</string>
     <key>LSRequiresIPhoneOS</key>
     <true/>
     <key>UIFileSharingEnabled</key>
diff --git a/contrib/mobile/iOS/Onelab/ParametersViewController.mm b/contrib/mobile/iOS/Onelab/ParametersViewController.mm
index d647b95aca05fe5c1bfef36a5b8c2723b8bc5345..e37df567694376138e6badbdc25c90de14128a5c 100644
--- a/contrib/mobile/iOS/Onelab/ParametersViewController.mm
+++ b/contrib/mobile/iOS/Onelab/ParametersViewController.mm
@@ -22,29 +22,37 @@
   [super viewDidLoad];
 
   // Do any additional setup after loading the view, typically from a nib.
-  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshParameters:) name:@"refreshParameters" object:nil];
-  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetParameters:) name:@"resetParameters" object:nil];
+  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshParameters:)
+                                               name:@"refreshParameters" object:nil];
+  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetParameters:)
+                                               name:@"resetParameters" object:nil];
 
   self.navigationItem.title = @"Model";
 
   _sections = [[NSMutableArray alloc] init];
   _sectionstitle = [[NSMutableArray alloc] init];
 
-  UILongPressGestureRecognizer *lpgr = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
+  UILongPressGestureRecognizer *lpgr =
+    [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
   lpgr.minimumPressDuration = 1.0;
   [self.tableView addGestureRecognizer:lpgr];
 
   [self.navigationController setToolbarHidden:NO];
   control = [[UISegmentedControl alloc] initWithItems:[[NSArray alloc] initWithObjects:@"Model", @"Display", nil]];
   UIBarButtonItem *controlBtn = [[UIBarButtonItem alloc] initWithCustomView:control];
-  UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
+  UIBarButtonItem *flexibleSpace =
+    [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
   self.toolbarItems = [[NSArray alloc] initWithObjects:flexibleSpace, controlBtn, flexibleSpace, nil];
   [control addTarget:self action:@selector(indexDidChangeForSegmentedControl:) forControlEvents:UIControlEventValueChanged];
   if(![[UIDevice currentDevice].model isEqualToString:@"iPad"] &&
      ![[UIDevice currentDevice].model isEqualToString:@"iPad Simulator"]){
-    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed:)];
+    self.navigationItem.leftBarButtonItem =
+      [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain
+                                      target:self action:@selector(backButtonPressed:)];
   }
-  self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Reset" style:UIBarButtonItemStyleBordered target:self action:@selector(resetParameters:)];
+  self.navigationItem.rightBarButtonItem =
+    [[UIBarButtonItem alloc] initWithTitle:@"Reset" style:UIBarButtonItemStyleBordered
+                                    target:self action:@selector(resetParameters:)];
 }
 
 - (void)viewWillAppear:(BOOL)animated
@@ -74,7 +82,9 @@
   onelab::server::instance()->get(number,[name UTF8String]);
   if(number.size() && !number[0].getReadOnly()){
     NSLog(@"Manual edit of parameter '%s' with value '%g'", number[0].getName().c_str(), number[0].getValue());
-    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s", number[0].getShortName().c_str()] message:name delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
+    UIAlertView *alertView =
+      [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s", number[0].getShortName().c_str()]
+                                 message:name delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Ok", nil];
     alertView.alertViewStyle = UIAlertViewStylePlainTextInput;
     [alertView textFieldAtIndex:0].text = [NSString stringWithFormat:@"%g", number[0].getValue()];
     [alertView show];
@@ -130,7 +140,8 @@
     [section addObject:param];
   }
   [self.tableView beginUpdates];
-  [self.tableView insertRowsAtIndexPaths:[[NSArray alloc] initWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationAutomatic];
+  [self.tableView insertRowsAtIndexPaths:[[NSArray alloc] initWithObjects:indexPath, nil]
+                        withRowAnimation:UITableViewRowAnimationAutomatic];
   [self.tableView endUpdates];
 }
 
@@ -140,14 +151,16 @@
   ParameterStringList *param = [[ParameterStringList alloc] initWithString:p];
   [section addObject:param];
   [self.tableView beginUpdates];
-  [self.tableView insertRowsAtIndexPaths:[[NSArray alloc] initWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationAutomatic];
+  [self.tableView insertRowsAtIndexPaths:[[NSArray alloc] initWithObjects:indexPath, nil]
+                        withRowAnimation:UITableViewRowAnimationAutomatic];
   [self.tableView endUpdates];
 }
 
 - (void)removeParemeterNumberAtIndex:(NSIndexPath*)index
 {
   [self.tableView beginUpdates];
-  [self.tableView deleteRowsAtIndexPaths: [NSArray arrayWithObject:index] withRowAnimation:UITableViewRowAnimationAutomatic];
+  [self.tableView deleteRowsAtIndexPaths: [NSArray arrayWithObject:index]
+                        withRowAnimation:UITableViewRowAnimationAutomatic];
   [self.tableView endUpdates];
 }
 
@@ -156,7 +169,8 @@
   [_sections addObject:s];
   [_sectionstitle addObject:t];
   [self.tableView beginUpdates];
-  [self.tableView insertSections:[[NSIndexSet alloc] initWithIndex:[_sections count]-1] withRowAnimation:UITableViewRowAnimationAutomatic];
+  [self.tableView insertSections:[[NSIndexSet alloc] initWithIndex:[_sections count]-1]
+                withRowAnimation:UITableViewRowAnimationAutomatic];
   [self.tableView endUpdates];
   [self addParameterNumber:p atIndexPath:[NSIndexPath indexPathForRow:0 inSection:[_sections count]-1]];
 }
@@ -166,41 +180,60 @@
   [_sections addObject:s];
   [_sectionstitle addObject:t];
   [self.tableView beginUpdates];
-  [self.tableView insertSections:[[NSIndexSet alloc] initWithIndex:[_sections count]-1] withRowAnimation:UITableViewRowAnimationAutomatic];
+  [self.tableView insertSections:[[NSIndexSet alloc] initWithIndex:[_sections count]-1]
+                withRowAnimation:UITableViewRowAnimationAutomatic];
   [self.tableView endUpdates];
   [self addParameterString:p atIndexPath:[NSIndexPath indexPathForRow:0 inSection:[_sections count]-1]];
 }
 
+NSString *GetSectionTitle(NSString *name)
+{
+  NSString *s = @"";
+  NSArray *split = [name componentsSeparatedByString:@"/"];
+  for(int i = 0; i < [split count] - 1; i++){
+    NSString *name = [split objectAtIndex:i];
+    while([name length] && [name characterAtIndex:0] == ' ')
+      name = [name substringFromIndex:1];
+    while([name length] && ([name characterAtIndex:0] == '{' || [name characterAtIndex:0] == '}'))
+      name = [name substringFromIndex:1];
+    while([name length] && [name characterAtIndex:0] >= '0' && [name characterAtIndex:0] <= '9')
+      name = [name substringFromIndex:1];
+    if(i)
+      s = [s stringByAppendingString:@" > "];
+    s = [s stringByAppendingString:name];
+  }
+  return s;
+}
+
 - (void)refreshTableView
 {
   std::vector<onelab::number> number;
   onelab::server::instance()->get(number);
 
   // check for new/updated parameters (number)
-  for(int i=0;i<number.size();i++) {
-    if(!number[i].getVisible()) continue; // Do not add invisible parameter
-    NSString *name=[NSString stringWithCString:number[i].getName().c_str() encoding:NSUTF8StringEncoding];
-    NSString *sectiontitle = [[name componentsSeparatedByString:@"/"] objectAtIndex:0];
+  for(int i = 0; i < number.size(); i++) {
+    if(!number[i].getVisible()) continue; // do not add invisible parameter
+    NSString *name = [NSString stringWithCString:number[i].getName().c_str() encoding:NSUTF8StringEncoding];
+    NSString *sectiontitle = GetSectionTitle(name);
     Boolean found = false;
-
-    for(int iSection=0; iSection<[_sectionstitle count]; iSection++) { // Check if the section exist
+    for(int iSection = 0; iSection < [_sectionstitle count]; iSection++) { // check if the section exist
       if([sectiontitle isEqualToString:[_sectionstitle objectAtIndex:iSection]]) {
         NSMutableArray *section = [_sections objectAtIndex:iSection];
         for(int iparameter = 0; iparameter<[section count]; iparameter++) {
-          if([[[section objectAtIndex: iparameter] getName] isEqualToString:name]) { // The parameter is in the section
+          if([[[section objectAtIndex: iparameter] getName] isEqualToString:name]) { // the parameter is in the section
             Parameter * p = [section objectAtIndex: iparameter];
             [p refresh]; // just refresh the parameter
             found = true;
             break;
           }
         }
-        if(!found) // The parameter is not in the section, add it
+        if(!found) // the parameter is not in the section, add it
           [self addParameterNumber:number[i] atIndexPath:[NSIndexPath indexPathForRow:[section count] inSection:iSection]];
         found = true; break;
       }
     }
     if(found) continue; // the parameter is in the tableView
-    // The section has to be created
+    // the section has to be created
     NSMutableArray *newSection = [[NSMutableArray alloc] init];
     [self addSection:newSection withTitle:sectiontitle withParameterNumber:number[i]];
   }
@@ -209,38 +242,37 @@
   onelab::server::instance()->get(string);
 
   // check for new/updated parameters (string)
-  for(int i=0;i<string.size();i++) {
-    if(!string[i].getVisible() || string[i].getKind() == "file") continue; // Do not add invisible parameter
-    NSString *name=[NSString stringWithCString:string[i].getName().c_str() encoding:NSUTF8StringEncoding];
-    NSString *sectiontitle = [[name componentsSeparatedByString:@"/"] objectAtIndex:0];
+  for(int i = 0; i < string.size(); i++) {
+    if(!string[i].getVisible() || string[i].getKind() == "file") continue; // do not add invisible parameter
+    NSString *name = [NSString stringWithCString:string[i].getName().c_str() encoding:NSUTF8StringEncoding];
+    NSString *sectiontitle = GetSectionTitle(name);
     Boolean found = false;
-
-    for(int iSection=0; iSection<[_sectionstitle count]; iSection++) { // Check if the section exist
+    for(int iSection = 0; iSection < [_sectionstitle count]; iSection++) { // check if the section exist
       if([sectiontitle isEqualToString:[_sectionstitle objectAtIndex:iSection]]) {
         NSMutableArray *section = [_sections objectAtIndex:iSection];
         for(int iparameter = 0; iparameter<[section count]; iparameter++) {
-          if([[[section objectAtIndex: iparameter] getName] isEqualToString:name]) { // The parameter is in the section
+          if([[[section objectAtIndex: iparameter] getName] isEqualToString:name]) { // the parameter is in the section
             Parameter * p = [section objectAtIndex: iparameter];
             [p refresh]; // just refresh the parameter
             found = true;
             break;
           }
         }
-        if(!found) // The parameter is not in the section, add it
+        if(!found) // the parameter is not in the section, add it
           [self addParameterString:string[i] atIndexPath:[NSIndexPath indexPathForRow:[section count] inSection:iSection]];
         found = true; break;
       }
     }
     if(found) continue; // the parameter is in the tableView
-    // The section have to be create
+    // the section has to be created
     NSMutableArray *newSection = [[NSMutableArray alloc] init];
     [self addSection:newSection withTitle:sectiontitle withParameterString:string[i]];
   }
 
   // check for hidden/deleted parameters
-  for(int iSection=0; iSection<[_sectionstitle count]; iSection++) {
+  for(int iSection = 0; iSection < [_sectionstitle count]; iSection++) {
     NSMutableArray *section = [_sections objectAtIndex:iSection];
-    for(int iparameter = 0; iparameter<[section count]; iparameter++) {
+    for(int iparameter = 0; iparameter < [section count]; iparameter++) {
       Parameter * p = [section objectAtIndex: iparameter];
       std::vector<onelab::number> number;
       onelab::server::instance()->get(number,[[p getName] UTF8String]);
@@ -286,7 +318,9 @@
 {
   if(((AppDelegate *)[UIApplication sharedApplication].delegate)->compute) {
     UIAlertView *alert;
-    alert = [[UIAlertView alloc] initWithTitle:@"Can't reset model parameters" message:@"The computation has to complete before you can reset the parameters." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
+    alert = [[UIAlertView alloc] initWithTitle:@"Can't reset model parameters"
+                                       message:@"The computation has to complete before you can reset the parameters."
+                                      delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
     [alert show];
     return;
   }
@@ -324,9 +358,11 @@
 {
   // get the param with his name
   static NSString *CellIdentifier = @"parameterCell";
-  if(indexPath.section >= _sections.count) return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
+  if(indexPath.section >= _sections.count)
+    return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   NSMutableArray *sectionContent = [_sections objectAtIndex:[indexPath section]];
-  if(indexPath.row >= sectionContent.count) return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
+  if(indexPath.row >= sectionContent.count)
+    return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   Parameter *tmp = [sectionContent objectAtIndex:[indexPath row]];
 
   UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];