--- a/src/mpv.cc
+++ b/src/mpv.cc
@@ -48,49 +48,26 @@
 
     }
 
-  octave_value retval;
-  
+  if (args.length () == 3)
+    { 
+      std::string rnd = args(2).string_value ();
+      if (! error_state) {
+        int prec =  args(1).int_value ();
+        if (! error_state)
+          return octave_value (new octave_mp (args(0), prec, rnd));
+      }
+    }
+    
   if (args.length () == 2)
     {
       int prec = args(1).int_value ();
-      
-      if (args(0).is_string ())
-        {
-          std::string s = args(0).string_value ();
-      
-          if (! error_state)
-            retval = octave_value (new octave_mp (s, prec));
-        }
-      else
-        {
-          double d = args(0).double_value ();
-          
-          if (! error_state)
-            retval = octave_value (new octave_mp (d, prec));
-        }
-    }
-  else
-    {
-      if (args.length () == 1)
-        {
-          if (args(0).is_string ())
-            {
-              std::string s = args(0).string_value ();
-              
-              if (! error_state)
-                retval = octave_value (new octave_mp (s));
-            }
-          else
-            {
-              double d = args(0).double_value ();
-              
-              if (! error_state)
-                retval = octave_value (new octave_mp (d));
-            }
-        }
-      else
-        usage ("mpv");
-    }
+      if (! error_state)
+        return octave_value (new octave_mp (args(0), prec));
+    } 
   
-  return retval;
+  if (args.length () == 1)
+    return octave_value (new octave_mp (args(0)));
+  
+  usage ("mpv(value, [prec], [rounding])");
+  
 }