diff --git a/Common/Gmsh.cpp b/Common/Gmsh.cpp
index d9e6dae97235a3c7502dfd5affa8995e0e394b29..2c643f64efd481e9ce373f8369156bff92bfb092 100644
--- a/Common/Gmsh.cpp
+++ b/Common/Gmsh.cpp
@@ -132,6 +132,24 @@ int GmshSetOption(const std::string &category, const std::string &name,
   return ColorOption(GMSH_SET|GMSH_GUI, category.c_str(), index, name.c_str(), value);
 }
 
+void GmshSetStringOption(const std::string &category, const std::string &name,
+                         std::string value, int index)
+{
+  StringOption(GMSH_SET|GMSH_GUI, category.c_str(), index, name.c_str(), value);
+}
+
+void GmshSetNumberOption(const std::string &category, const std::string &name,
+                         double value, int index)
+{
+  NumberOption(GMSH_SET|GMSH_GUI, category.c_str(), index, name.c_str(), value);
+}
+
+void GmshSetColorOption(const std::string &category, const std::string &name,
+                        unsigned int value, int index)
+{
+  ColorOption(GMSH_SET|GMSH_GUI, category.c_str(), index, name.c_str(), value);
+}
+
 int GmshGetOption(const std::string &category, const std::string &name,
                   std::string &value, int index)
 {
@@ -150,6 +168,30 @@ int GmshGetOption(const std::string &category, const std::string &name,
   return ColorOption(GMSH_GET, category.c_str(), index, name.c_str(), value);
 }
 
+std::string GmshGetStringOption(const std::string &category, const std::string &name,
+                                int index)
+{
+  std::string value;
+  StringOption(GMSH_GET, category.c_str(), index, name.c_str(), value);
+  return value;
+}
+
+double GmshGetNumberOption(const std::string &category, const std::string &name,
+                           int index)
+{
+  double value;
+  NumberOption(GMSH_GET, category.c_str(), index, name.c_str(), value);
+  return value;
+}
+
+int GmshGetColorOption(const std::string &category, const std::string &name,
+                       int index)
+{
+  unsigned int value;
+  ColorOption(GMSH_GET, category.c_str(), index, name.c_str(), value);
+  return value;
+}
+
 int GmshRestoreDefaultOptions()
 {
   ReInitOptions(0);
diff --git a/Common/Gmsh.h b/Common/Gmsh.h
index e6245c412c87e8fcca6cffb0e0e88cb40d0023c3..0d1f89d8f8956e484d6af0bfa3f99f0ab91e1e39 100644
--- a/Common/Gmsh.h
+++ b/Common/Gmsh.h
@@ -21,12 +21,24 @@ int GmshSetOption(const std::string &category, const std::string &name,
                   double value, int index=0);
 int GmshSetOption(const std::string &category, const std::string &name,
                   unsigned int value, int index=0);
+void GmshSetStringOption(const std::string &category, const std::string &name,
+                         std::string value, int index=0);
+void GmshSetNumberOption(const std::string &category, const std::string &name,
+                         double value, int index=0);
+void GmshSetColorOption(const std::string &category, const std::string &name,
+                        unsigned int value, int index=0);
 int GmshGetOption(const std::string &category, const std::string &name,
                   std::string &value, int index=0);
 int GmshGetOption(const std::string &category, const std::string &name,
                   double &value, int index=0);
 int GmshGetOption(const std::string &category, const std::string &name,
                   unsigned int &value, int index=0);
+std::string GmshGetStringOption(const std::string &category, const std::string &name,
+                                int index=0);
+double GmshGetNumberOption(const std::string &category, const std::string &name,
+                           int index=0);
+unsigned int GmshGetColorOption(const std::string &category, const std::string &name,
+                                int index=0);
 int GmshRestoreDefaultOptions();
 int GmshOpenProject(const std::string &fileName);
 int GmshClearProject();
diff --git a/contrib/mobile/Android/AndroidManifest.xml b/contrib/mobile/Android/AndroidManifest.xml
index aea03b4134e5d56cef8e1dca72dc240594eea918..012dc103e63413291057a8da400e60b26920bfc4 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="6"
-          android:versionName="1.0.7"
+          android:versionCode="7"
+          android:versionName="1.0.8"
           android:installLocation="auto" >
   
   <uses-sdk android:minSdkVersion="14"
diff --git a/contrib/mobile/Android/res/layout/fragment_postprocessing.xml b/contrib/mobile/Android/res/layout/fragment_postprocessing.xml
index 52641104c4c86210fc941ed5580503e5407475b7..20d5adc76ba96bd319ed764221b2a410da2fdcc4 100644
--- a/contrib/mobile/Android/res/layout/fragment_postprocessing.xml
+++ b/contrib/mobile/Android/res/layout/fragment_postprocessing.xml
@@ -1,38 +1,33 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="vertical"
-    android:padding="15dp" >
-    
-    <TextView
-        android:layout_width="match_parent"
-	    android:layout_height="wrap_content"
-        android:text="@string/postpro_intervalstype" />
-	<Spinner
-	    android:id="@+id/intervals_type"
-	    android:layout_width="match_parent"
-	    android:layout_height="wrap_content" />
-	
-	<TextView
-	    android:layout_width="match_parent"
-	    android:layout_height="wrap_content"
-        android:text="@string/postpro_intervals" />
-	<EditText 
-	    android:id="@+id/intervals"
-	    android:layout_width="match_parent"
-	    android:layout_height="wrap_content"
-	    android:inputType="number"
-	    android:digits="0123456789" />
-	
-	<TextView
-	    android:layout_width="match_parent"
-	    android:layout_height="wrap_content"
-        android:text="@string/postpro_raisez" />
-	<SeekBar 
-	    android:id="@+id/raisez"
-	    android:layout_width="match_parent"
-	    android:layout_height="wrap_content"
-	    android:max="5" />
-
-</LinearLayout>
\ No newline at end of file
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="vertical"
+              android:padding="15dp" >
+  <TextView
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:text="@string/postpro_intervalstype" />
+  <Spinner
+      android:id="@+id/intervals_type"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content" />
+  <TextView
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:text="@string/postpro_intervals" />
+  <SeekBar 
+      android:id="@+id/intervals"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:max="100" />
+  <TextView
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:text="@string/postpro_raisez" />
+  <SeekBar 
+      android:id="@+id/raisez"
+      android:layout_width="match_parent"
+      android:layout_height="wrap_content"
+      android:max="100" />
+</LinearLayout>
diff --git a/contrib/mobile/Android/res/layout/splash.xml b/contrib/mobile/Android/res/layout/splash.xml
index 4091ae15ed8d559215719d311ddfd17aa59a4b8a..18ce46253b1af86b13ca9eb92d887733b5de5c19 100644
--- a/contrib/mobile/Android/res/layout/splash.xml
+++ b/contrib/mobile/Android/res/layout/splash.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:layout_width="match_parent"
-                android:layout_height="match_parent" >
+                android:layout_height="match_parent" 
+                android:background="@color/black">
   <ImageView android:id="@+id/splashImage"
              android:layout_centerInParent="true"
              android:layout_width="wrap_content"
diff --git a/contrib/mobile/Android/res/values/colors.xml b/contrib/mobile/Android/res/values/colors.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4dd336640c4cc1f17c33cbc1cba454265789c88c
--- /dev/null
+++ b/contrib/mobile/Android/res/values/colors.xml
@@ -0,0 +1,3 @@
+<resources>
+  <color name="black">#ff000000</color>
+</resources>
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
index ba1589247e96ce10cf247380c7d41a0a750e11d0..3d4b9d472006c1a91a2c2aa24145166d35181ccf 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/Gmsh.java
@@ -37,10 +37,6 @@ public class Gmsh implements Parcelable {
     public native int getIntegerOption(String category, String name, int index);
     // call onelab
     public native int onelabCB(String action);
-    // FIXME: to be removed soon
-    public native String[] getPView();
-    public native void setPView(int position, int intervalsType, int visible,
-                                int nbIso, float raisez);
     public boolean haveAnimation() { return numberOfAnimation() > 1; }
     public native int numberOfAnimation();
     public native int animationNext();
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java
index 25e7254a2d65b3bf50f52c6615885b4bb549b4ab..004b228eb265c23b05c06ade4fa0824b814dee16 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsDisplayFragment.java
@@ -50,44 +50,45 @@ public class OptionsDisplayFragment extends Fragment{
                                                         container, false);
         CheckBox showGeomPoints = new CheckBox(_listView.getContext());
         showGeomPoints.setText("Show geometry points");
-        showGeomPoints.setChecked((_gmsh.getDoubleOption("Geometry", "Points", 0) > 0.));
+        showGeomPoints.setChecked(_gmsh.getDoubleOption("Geometry", "Points", 0) > 0.);
         showGeomPoints.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                     _gmsh.setDoubleOption("Geometry", "Points", (isChecked)?1. : 0., 0);
                     if(mListener != null) mListener.OnModelOptionsChanged();
                 }
             });
-        _listView.addItem("Display", showGeomPoints);
+        _listView.addItem("Display Options", showGeomPoints);
         CheckBox showGeomLines = new CheckBox(_listView.getContext());
         showGeomLines.setText("Show geometry lines");
-        showGeomLines.setChecked((_gmsh.getDoubleOption("Geometry", "Lines", 0) > 0.));
+        showGeomLines.setChecked(_gmsh.getDoubleOption("Geometry", "Lines", 0) > 0.);
         showGeomLines.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                     _gmsh.setDoubleOption("Geometry", "Lines", (isChecked)?1. : 0., 0);
                     if(mListener != null) mListener.OnModelOptionsChanged();
                 }
             });
-        _listView.addItem("Display", showGeomLines);
+        _listView.addItem("Display Options", showGeomLines);
         CheckBox showMeshSurfaceEdges = new CheckBox(_listView.getContext());
     	showMeshSurfaceEdges.setText("Show mesh surface edges");
-    	showMeshSurfaceEdges.setChecked((_gmsh.getDoubleOption("Mesh", "SurfaceEdges", 0) > 0.));
+    	showMeshSurfaceEdges.setChecked(_gmsh.getDoubleOption("Mesh", "SurfaceEdges", 0) > 0.);
     	showMeshSurfaceEdges.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                     _gmsh.setDoubleOption("Mesh", "SurfaceEdges", (isChecked)?1. : 0., 0);
                     if(mListener != null) mListener.OnModelOptionsChanged();
                 }
             });
-    	_listView.addItem("Display", showMeshSurfaceEdges);
+    	_listView.addItem("Display Options", showMeshSurfaceEdges);
     	CheckBox showMeshVolumesEdges = new CheckBox(_listView.getContext());
     	showMeshVolumesEdges.setText("Show mesh volume edges");
-    	showMeshVolumesEdges.setChecked((_gmsh.getDoubleOption("Mesh", "VolumeEdges", 0) > 0.));
-    	showMeshVolumesEdges.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+    	showMeshVolumesEdges.setChecked(_gmsh.getDoubleOption("Mesh", "VolumeEdges", 0) > 0.);
+    	showMeshVolumesEdges.setOnCheckedChangeListener
+            (new CompoundButton.OnCheckedChangeListener() {
                 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                     _gmsh.setDoubleOption("Mesh", "VolumeEdges", (isChecked)?1. : 0., 0);
                     if(mListener != null) mListener.OnModelOptionsChanged();
                 }
             });
-    	_listView.addItem("Display", showMeshVolumesEdges);
+    	_listView.addItem("Display Options", showMeshVolumesEdges);
     	this.refresh();
         return _listView;
     }
@@ -95,36 +96,34 @@ public class OptionsDisplayFragment extends Fragment{
     public void refresh()
     {
         if(_gmsh == null) return;
-        String[] PViews = _gmsh.getPView();
-        for(int i=0; i<_listView.itemsCountInSection("Result"); i++) {
-            View v = (View)_listView.getItemAtPosition(6+i);
+        int nbviews = (int)_gmsh.getDoubleOption("PostProcessing", "NbViews", 0);
+
+        for(int i = 0; i<_listView.itemsCountInSection("Result Options"); i++) {
+            View v = (View)_listView.getItemAtPosition(6 + i);
             if(!v.getClass().equals(LinearLayout.class)) continue;
-            for(int j=0; j<((LinearLayout)v).getChildCount(); j++) {
+            for(int j = 0; j < ((LinearLayout)v).getChildCount(); j++) {
                 View sv = ((LinearLayout)v).getChildAt(j);
                 if(sv.getClass().equals(CheckBox.class)){
-                    String[] infos = PViews[i].split("\n");
-                    ((CheckBox)sv).setChecked(infos[2].equals("1"));
+                    ((CheckBox)sv).setChecked(_gmsh.getDoubleOption("View", "Visible", i) > 0.);
                 }
             }
         }
-        for(int i=_listView.itemsCountInSection("Result"); i < PViews.length;i++) {
-            // name / IntervalsType (1=Iso 2=Continous 3=Discrete 4=Numeric)
-            String[] infos = PViews[i].split("\n");
+        for(int i = _listView.itemsCountInSection("Result Options"); i < nbviews; i++) {
             final int myID = i;
             LinearLayout layout = new LinearLayout(_listView.getContext());
             CheckBox checkbox = new CheckBox(_listView.getContext());
             checkbox.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT,
                                                                   LayoutParams.WRAP_CONTENT));
-            checkbox.setText(infos[0]);
-            checkbox.setChecked(infos[2].equals("1"));
+            checkbox.setText(_gmsh.getStringOption("View", "Name", myID));
+            checkbox.setChecked(_gmsh.getDoubleOption("View", "Visible", myID) > 0.);
             checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                        _gmsh.setPView(myID, -1, (isChecked)? 1 : 0, -1, -1);
+                        _gmsh.setDoubleOption("View", "Visible", isChecked ? 1. : 0., myID);
                         if(mListener != null) mListener.OnModelOptionsChanged();
                     }
                 });
             Button button = new Button(_listView.getContext());
-            button.setText("More options >");
+            button.setText(">");
             button.setOnClickListener(new View.OnClickListener() {
                     public void onClick(View v) {
                         Intent intent = new Intent(getActivity(), PostProcessingActivity.class);
@@ -140,7 +139,7 @@ public class OptionsDisplayFragment extends Fragment{
             button.setGravity(Gravity.RIGHT);
             layout.addView(checkbox);
             layout.addView(button);
-            _listView.addItem("Result", layout);
+            _listView.addItem("Result Options", layout);
         }
     }
 
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
index 42570e843292ef6cb912d8fcaeb30cfbc68c9dbe..1912b9b0f1338e2ce587a646c216f9c8ef51bea1 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsPostProcessingFragment.java
@@ -1,6 +1,7 @@
 package org.geuz.onelab;
 
 import java.util.ArrayList;
+import java.lang.Math;
 
 import android.app.Fragment;
 import android.content.Context;
@@ -50,25 +51,11 @@ public class OptionsPostProcessingFragment extends Fragment{
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState)
     {
-        String[] PViews = _gmsh.getPView();
-        String[] infos = PViews[_pview].split("\n");
-        getActivity().getActionBar().setTitle(infos[0]);
+        getActivity().getActionBar().setTitle(_gmsh.getStringOption("View", "Name", _pview));
         LinearLayout layout =  (LinearLayout)inflater.inflate(R.layout.fragment_postprocessing,
                                                               container, false);
         final Spinner intervalsType = (Spinner)layout.findViewById(R.id.intervals_type);
-        final EditText intervals = (EditText)layout.findViewById(R.id.intervals);
-        final SeekBar raiseZ = (SeekBar)layout.findViewById(R.id.raisez);
-        raiseZ.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
-                public void onStopTrackingTouch(SeekBar seekBar) {
-                    _gmsh.setPView(_pview, -1, -1, -1, seekBar.getProgress());
-                }
-                // UNUSED Auto-generated method stub
-                public void onStartTrackingTouch(SeekBar seekBar) {}
-                // UNUSED Auto-generated method stub
-                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { }
-            });
-        raiseZ.setProgress(Integer.parseInt(infos[4]));
-        intervalsType.setEnabled(infos[2].equals("1"));
+        intervalsType.setEnabled(_gmsh.getDoubleOption("View", "Visible", _pview) > 0.);
         ArrayList<String> choices;
         ArrayAdapter<String> adapter;
         choices = new ArrayList<String>();
@@ -79,53 +66,53 @@ public class OptionsPostProcessingFragment extends Fragment{
                                            android.R.layout.simple_spinner_dropdown_item, choices);
         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
         intervalsType.setAdapter(adapter);
-        intervalsType.setSelection(Integer.parseInt(infos[1])-1);
+        intervalsType.setSelection((int)_gmsh.getDoubleOption("View", "IntervalsType", _pview) - 1);
         intervalsType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                 public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
-                    _gmsh.setPView(_pview, pos+1, -1, -1, -1);
+                    _gmsh.setDoubleOption("View", "IntervalsType", pos + 1, _pview);
                     // TODO glView.requestRender();
-                    intervals.setEnabled(pos == 0 || pos == 2);
                 }
                 // Unused Auto-generated method stub
                 public void onNothingSelected(AdapterView<?> arg0) {}
             });
-        intervals.setText(infos[3]);
-        intervals.setOnKeyListener(new View.OnKeyListener() {
-                public boolean onKey(View v, int keyCode, KeyEvent event) {
-                    if(keyCode == KeyEvent.KEYCODE_ENTER){ // hide the keyboard
-                        InputMethodManager imm = (InputMethodManager)intervals.getContext()
-                            .getSystemService(Context.INPUT_METHOD_SERVICE);
-                        imm.hideSoftInputFromWindow(intervals.getWindowToken(), 0);
-                        return true;
-                    }
-                    return false;
+
+        final SeekBar intervals = (SeekBar)layout.findViewById(R.id.intervals);
+        intervals.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+                public void onStopTrackingTouch(SeekBar seekBar) {
+                    double d = seekBar.getProgress();
+                    if(d < 1.) d = 1.;
+                    _gmsh.setDoubleOption("View", "NbIso", d, _pview);
                 }
+                // UNUSED Auto-generated method stub
+                public void onStartTrackingTouch(SeekBar seekBar) {}
+                // UNUSED Auto-generated method stub
+                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { }
             });
-        intervals.addTextChangedListener(new TextWatcher() {
-                public void onTextChanged(CharSequence s, int start, int before, int count) {
-                    int nIso = 1;
-                    try {
-                        if(s.length() < 1) nIso = 1;
-                        else nIso = Integer.parseInt(s.toString());
-                    }
-                    catch(NumberFormatException e){
-                        nIso = 1;
-                        intervals.setText("");
-                    }
-                    if(nIso > 1000) {
-                        _gmsh.setPView(_pview, -1, -1, 1000, -1); intervals.setText("1000");
-                    }
-                    else if(nIso > 0)
-                        _gmsh.setPView(_pview, -1, -1, nIso, -1);
-                    else
-                        _gmsh.setPView(_pview, -1, -1, 1, -1);
+        intervals.setProgress((int)_gmsh.getDoubleOption("View", "NbIso", _pview));
+
+        final SeekBar raiseZ = (SeekBar)layout.findViewById(R.id.raisez);
+        raiseZ.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+                public void onStopTrackingTouch(SeekBar seekBar) {
+                    double maxval = Math.max(Math.abs(_gmsh.getDoubleOption("View", "Min", _pview)),
+                                             Math.abs(_gmsh.getDoubleOption("View", "Max", _pview)));
+                    if(maxval == 0.) maxval = 1.;
+                    double val2 = 2. * _gmsh.getDoubleOption("General", "BoundingBoxSize", 0) / maxval;
+                    // map [0,100] to [-val2,val2]
+                    double d = 2 * val2 * (seekBar.getProgress() / 100. - 0.5);
+                    _gmsh.setDoubleOption("View", "RaiseZ", d, _pview);
                 }
                 // UNUSED Auto-generated method stub
-                public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
+                public void onStartTrackingTouch(SeekBar seekBar) {}
                 // UNUSED Auto-generated method stub
-                public void afterTextChanged(Editable s) {}
+                public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { }
             });
-
+        double maxval = Math.max(Math.abs(_gmsh.getDoubleOption("View", "Min", _pview)),
+                                 Math.abs(_gmsh.getDoubleOption("View", "Max", _pview)));
+        if(maxval == 0.) maxval = 1.;
+        double val2 = 2. * _gmsh.getDoubleOption("General", "BoundingBoxSize", 0) / maxval;
+        // map [-val2,val2] to [0,100]
+        double d = 100. * (_gmsh.getDoubleOption("View", "RaiseZ", _pview) / (2 * val2) + 0.5);
+        raiseZ.setProgress((int)d);
         return layout;
     }
 }
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java b/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
index 402628fd266acb8d52af4bc8c211481d4ee2977c..523113c6212063f5377c078fd8fde9ad11bd678e 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/ParameterNumber.java
@@ -64,13 +64,13 @@ public class ParameterNumber extends Parameter {
     {
         super.update();
         if(_bar != null) {
-            _title.setText(getShortName() + " (" + formatDouble(_value)+ ")");
+            _title.setText(getShortName() + " (" + formatDouble(_value) + ")");
             _bar.setMax(100);
             _bar.setProgress((int)(100*(_value-_min)/(_max-_min)));
             _bar.setEnabled(!this.isReadOnly());
         }
         else if(_spinner != null) {
-            for(int i=0;i<_choices.size();i++)
+            for(int i = 0; i < _choices.size(); i++)
                 if(_values.get(i) == _value)
                     _spinner.setSelection(i, true);
         }
@@ -79,7 +79,7 @@ public class ParameterNumber extends Parameter {
             _checkbox.setChecked((_value == 0)? false : true);
         }
         else if(_edittext != null) {
-            _edittext.setText(""+formatDouble(_value));
+            _edittext.setText("" + formatDouble(_value));
         }
         else if(_stepper != null) {
             _stepper.setMaximum((int)Math.round(_max));
@@ -89,19 +89,15 @@ public class ParameterNumber extends Parameter {
     }
     public void setValue(double value)
     {
-        if(value < _min || value > _max) {
-            //Log.w("ParameterNumber", "Incorect value "+value+" (max="+_max+" min="+_min+")");
-            return;
-        }
         if(value == _value) return;
         _value = value;
         _changed = true;
         _gmsh.setParam(getType(), getName(), String.valueOf(value));
         if(mListener != null) mListener.OnParameterChanged();
     }
-    public void setMin(double min) {_min = min;this.update();}
-    public void setMax(double max) {_max = max;this.update();}
-    public void setStep(double step) {_step = step;this.update();}
+    public void setMin(double min) { _min = min; this.update(); }
+    public void setMax(double max) { _max = max; this.update(); }
+    public void setStep(double step) { _step = step;this.update(); }
     public void addChoice(double choice, String value)
     {
         if(_values == null) {
@@ -246,9 +242,7 @@ public class ParameterNumber extends Parameter {
                     public void onStopTrackingTouch(SeekBar seekBar) {
                         setValue(getMin() + (getMax() - getMin())*seekBar.getProgress()/100);
                     }
-
                     public void onStartTrackingTouch(SeekBar seekBar) {}
-
                     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
                 });
         }
@@ -257,7 +251,6 @@ public class ParameterNumber extends Parameter {
             paramLayout.addView(_checkbox);
             _checkbox.setEnabled(!_readOnly);
             _checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
-
                     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                         setValue((isChecked)? 1 : 0);
                     }
@@ -314,7 +307,10 @@ public class ParameterNumber extends Parameter {
         return paramLayout;
     }
     private OnParameterChangedListener mListener;
-    public void setOnParameterChangedListener(OnParameterChangedListener listener) { mListener = listener;}
+    public void setOnParameterChangedListener(OnParameterChangedListener listener)
+    {
+        mListener = listener;
+    }
     public interface OnParameterChangedListener
     {
         void OnParameterChanged();
diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java b/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java
index 9103f3c0d47448bbef093a22cbdbfc7b05669039..c3c0ce4680e970e07aac92dbf57dba62c8c17feb 100644
--- a/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java
+++ b/contrib/mobile/Android/src/org/geuz/onelab/ParameterString.java
@@ -16,7 +16,7 @@ import android.widget.Spinner;
 
 public class ParameterString extends Parameter{
 
-    private  String _kind;
+    private String _kind;
     private int _index;
     private ArrayList<String> _choices;
     private ArrayAdapter<String> _adapter;
diff --git a/contrib/mobile/androidGModel.cpp b/contrib/mobile/androidGModel.cpp
index fe8bfbf596b753b2b137c45686086453bc1a0d61..00799ea45ba8ad51435926cf0fef62c329fc82fa 100644
--- a/contrib/mobile/androidGModel.cpp
+++ b/contrib/mobile/androidGModel.cpp
@@ -1,3 +1,5 @@
+#undef NDEBUG
+
 #ifndef NDEBUG
 #include <android/log.h>
 #define  LOG_TAG    "Gmsh"
@@ -174,7 +176,7 @@ extern "C" {
     tmp = env->GetStringUTFChars(c, NULL);
     std::string category(tmp, strlen(tmp));
     env->ReleaseStringUTFChars(c, tmp);
-    GmshSetOption(category, name, value, (unsigned int)idx);
+    GmshSetStringOption(category, name, value, (int)idx);
   }
   JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setDoubleOption
   (JNIEnv *env, jobject obj, jstring c, jstring n, jdouble v, jint idx)
@@ -186,7 +188,7 @@ extern "C" {
     tmp = env->GetStringUTFChars(c, NULL);
     const std::string category(tmp, strlen(tmp));
     env->ReleaseStringUTFChars(c, tmp);
-    GmshSetOption(category, name, (double)v, (unsigned int)idx);
+    GmshSetNumberOption(category, name, (double)v, (int)idx);
   }
   JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setIntegerOption
   (JNIEnv *env, jobject obj, jstring c, jstring n, jint v, jint idx)
@@ -198,7 +200,7 @@ extern "C" {
     tmp = env->GetStringUTFChars(c, NULL);
     const std::string category(tmp, strlen(tmp));
     env->ReleaseStringUTFChars(c, tmp);
-    GmshSetOption(category, name, (unsigned int)v, (unsigned int)idx);
+    GmshSetColorOption(category, name, (unsigned int)v, (int)idx);
   }
   JNIEXPORT jstring JNICALL Java_org_geuz_onelab_Gmsh_getStringOption
   (JNIEnv *env, jobject obj, jstring c, jstring n, jint idx)
@@ -209,10 +211,10 @@ extern "C" {
     env->ReleaseStringUTFChars(n, tmp);
     tmp = env->GetStringUTFChars(c, NULL);
     const std::string category(tmp, strlen(tmp));
+    env->ReleaseStringUTFChars(c, tmp);
     std::string value;
-    GmshGetOption(category, name, value, (unsigned int)idx);
+    value = GmshGetStringOption(category, name, (int)idx);
     return env->NewStringUTF(value.c_str());
-
   }
   JNIEXPORT jdouble JNICALL Java_org_geuz_onelab_Gmsh_getDoubleOption
   (JNIEnv *env, jobject obj, jstring c, jstring n, jint idx)
@@ -223,8 +225,7 @@ extern "C" {
     env->ReleaseStringUTFChars(n, tmp);
     tmp = env->GetStringUTFChars(c, NULL);
     const std::string category(tmp, strlen(tmp));
-    double value;
-    GmshGetOption(category, name, value, (unsigned int)idx);
+    double value = GmshGetNumberOption(category, name, (int)idx);
     return value;
   }
   JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_getIntegerOption
@@ -236,18 +237,16 @@ extern "C" {
     env->ReleaseStringUTFChars(n, tmp);
     tmp = env->GetStringUTFChars(c, NULL);
     const std::string category(tmp, strlen(tmp));
-    unsigned int value;
-    GmshGetOption(category, name, value, (unsigned int)idx);
+    unsigned int value = GmshGetColorOption(category, name, (int)idx);
     return value;
   }
-
   JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getParams
   (JNIEnv *env, jobject obj)
   {
     jclass stringClass = env->FindClass( "java/lang/String" );
     std::vector<std::string> tmp =  onelab::server::instance()->toChar();
-    for(unsigned int i=0;i<tmp.size();i++)
-      for(unsigned int j=0; j<tmp[i].size();j++)
+    for(unsigned int i = 0; i < tmp.size(); i++)
+      for(unsigned int j = 0; j < tmp[i].size(); j++)
         if(tmp[i][j] == '\0') tmp[i][j] = 0x03;
     jobjectArray params = env->NewObjectArray(tmp.size(), stringClass, 0);
     for(int i=0; i<tmp.size();i++){
@@ -257,7 +256,6 @@ extern "C" {
     }
     return params;
   }
-
   JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setParam
   (JNIEnv *env, jobject obj, jstring jtype, jstring jname, jstring jvalue)
   {
@@ -265,14 +263,14 @@ extern "C" {
     const char *name = env->GetStringUTFChars(jname, NULL);
     const char *value = env->GetStringUTFChars(jvalue, NULL);
     // Get the original param and then change the value
-    if(strcmp(type,"ParameterNumber") == 0){
+    if(strcmp(type, "ParameterNumber") == 0){
       std::vector<onelab::number> s;
       if(onelab::server::instance()->get(s,  name)){
         s[0].setValue(atof(value));
         onelab::server::instance()->set(s[0]);
       }
     }
-    else if(strcmp(type,"ParameterString") == 0){
+    else if(strcmp(type, "ParameterString") == 0){
       std::vector<onelab::string> s;
       if(onelab::server::instance()->get(s,  name)){
         s[0].setValue(value);
@@ -281,35 +279,6 @@ extern "C" {
     }
   }
 
-  JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getPView
-  (JNIEnv *env, jobject obj)
-  {
-    jclass stringClass = env->FindClass( "java/lang/String" );
-    jobjectArray jPView = env->NewObjectArray(PView::list.size(), stringClass, 0);
-    for(unsigned int i = 0; i < PView::list.size(); i++){
-      std::ostringstream sstream;
-      sstream	<< PView::list[i]->getData()->getName().c_str()
-                << "\n" <<  PView::list[i]->getOptions()->intervalsType
-                << "\n" << ((PView::list[i]->getOptions()->visible) ? 1 : 0)
-                << "\n" << PView::list[i]->getOptions()->nbIso
-                << "\n" << PView::list[i]->getOptions()->raise[2];
-      jstring s = env->NewStringUTF(sstream.str().c_str());
-      env->SetObjectArrayElement(jPView, i, s);
-      env->DeleteLocalRef(s);
-    }
-    return jPView;
-  }
-
-  JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setPView
-  (JNIEnv *env, jobject, jint pos, jint intervalsType, jint visible, jint nIntervals, jfloat raisez)
-  {
-    if(intervalsType > 0 && intervalsType < 4) PView::list[pos]->getOptions()->intervalsType = intervalsType;
-    if(visible >= 0) PView::list[pos]->getOptions()->visible = visible;
-    if(nIntervals > 0) PView::list[pos]->getOptions()->nbIso = nIntervals;
-    if(raisez>=0) PView::list[pos]->getOptions()->raise[2] = raisez;
-    PView::list[pos]->setChanged(true);
-  }
-
   JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_onelabCB
   (JNIEnv *env, jobject obj, jstring jaction)
   {
diff --git a/contrib/mobile/androidGModel.h b/contrib/mobile/androidGModel.h
index 95c68751420a8ca27d0d287cde959e33bca33b6e..58a6060ee2e759e789aaf554c6d40a91f7a79d78 100644
--- a/contrib/mobile/androidGModel.h
+++ b/contrib/mobile/androidGModel.h
@@ -35,10 +35,6 @@ JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getParams
   (JNIEnv *, jobject);
 JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_setParam
   (JNIEnv *, jobject, jstring, jstring, jstring);
-JNIEXPORT jobjectArray JNICALL Java_org_geuz_onelab_Gmsh_getPView
-  (JNIEnv *, jobject);
-JNIEXPORT void JNICALL Java_org_geuz_onelab_Gmsh_setPView
-  (JNIEnv *, jobject, jint, jint, jint, jint, jfloat);
 JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_onelabCB
   (JNIEnv *, jobject, jstring);
 JNIEXPORT jint JNICALL Java_org_geuz_onelab_Gmsh_numberOfAnimation
diff --git a/contrib/mobile/utils/onelab_android_build.sh b/contrib/mobile/utils/onelab_android_build.sh
index a8c64b06ddd538df1282745ac93d3ba8023986fe..032273222ff2562e20c7b03c749f4ceb02bc0879 100755
--- a/contrib/mobile/utils/onelab_android_build.sh
+++ b/contrib/mobile/utils/onelab_android_build.sh
@@ -98,6 +98,9 @@ while read line; do
   target=$(($target+1))
 done < <($android_sdk/tools/android list target | grep -A 5 "id:")
 
+# to sign the APK:
+# cp utils/ant.properties build_android/Onelab/
+
 # to re-install on the device:
 # $android_sdk/platform-tools/adb install -r $gmsh_svn/contrib/mobile/build_android/Onelab/bin/Onelab-release.apk