diff -rup mediatomb-0.12.1/src/scripting/js_functions.cc ../mediatomb-0.12.1/src/scripting/js_functions.cc
--- mediatomb-0.12.1/src/scripting/js_functions.cc	2011-06-29 21:51:13.641025479 -0400
+++ ../mediatomb-0.12.1/src/scripting/js_functions.cc	2011-06-29 21:49:21.071800273 -0400
@@ -51,15 +51,28 @@ extern "C" {
 JSBool 
 js_print(JSContext *cx, uintN argc, jsval *argv)
 {
-    uintN i;
+    uintN i, j;
     JSString *str;
 
     for (i = 0; i < argc; i++) 
     {
-        str = JS_ValueToString(cx, argv[i]);
+    	String fmtStr;
+    	for (j = 0; j < argc; j++)
+    	{
+    		if (j == i)
+    			fmtStr = fmtStr + "S";
+    		else
+    			fmtStr = fmtStr + "*";
+    	}
+    	if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), fmtStr.c_str(), &str))
+		{
+			log_debug("Could not parse input arguments\n");
+			return JS_TRUE;
+		}
+
         if (!str)
             return JS_TRUE;
-        argv[i] = STRING_TO_JSVAL(str);
+
         char * log_str = JS_EncodeString(cx, str);
         log_js("%s\n", log_str);
         JS_free(cx, log_str);
@@ -116,24 +129,54 @@ js_addCdsObject(JSContext *cx, uintN arg
 {
     try
     {
-        jsval arg;
-        JSString *str;
-        String path;
-        String containerclass;
+    	// Inputs from native code
+        JSObject *js_cds_obj = NULL;
+        JSString *str =  NULL;
+        JSString *cont = NULL;
 
-        JSObject *js_cds_obj;
+        String path = nil;
+        String containerclass = nil;
+
+        JSObject *obj = JS_THIS_OBJECT(cx, argv);
         JSObject *js_orig_obj = NULL;
         Ref<CdsObject> orig_object;
 
         Ref<StringConverter> p2i;
         Ref<StringConverter> i2i;
+        switch (argc)
+        {
+        case 0:
+        	log_debug("No input arguments given\n");
+        	return JS_FALSE;
+        case 1:
+			if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), "o", &js_cds_obj))
+			{
+				log_debug("Could not parse input arguments\n");
+				return JS_TRUE;
+			}
+			break;
+        case 2:
+        	if(!JS_ConvertArguments(cx, 2, JS_ARGV(cx, argv), "oS", &js_cds_obj, &str))
+			{
+				log_debug("Could not parse input arguments\n");
+				return JS_TRUE;
+			}
+			break;
+        default:
+        	if(!JS_ConvertArguments(cx, 3, JS_ARGV(cx, argv), "oSS", &js_cds_obj, &str, &cont))
+			{
+				log_debug("Could not parse input arguments\n");
+				return JS_TRUE;
+			}
+			break;
+        }
 
-        Script *self = (Script *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
+        Script *self = (Script *)JS_GetPrivate(cx, obj);
 
         if (self == NULL)
         {
             log_debug("Could not retrieve class instance from global object\n");
-            return JS_FALSE;
+            return JS_TRUE;
         }
 
         if (self->whoami() == S_PLAYLIST)
@@ -144,23 +187,14 @@ js_addCdsObject(JSContext *cx, uintN arg
         {
             i2i = StringConverter::i2i();
         }
- 
-        arg = argv[0];
-        if (!JSVAL_IS_OBJECT(arg))
-            return JS_TRUE;
-        if (!JS_ValueToObject(cx, arg, &js_cds_obj))
-            return JS_TRUE;
 
-        // root it
-        argv[0] = OBJECT_TO_JSVAL(js_cds_obj);
 
-        str = JS_ValueToString(cx, argv[1]);
         if (!str)
             path = _("/");
         else
             path = JS_EncodeString(cx, str);
 
-        JSString *cont = JS_ValueToString(cx, argv[2]);
+
         if (cont)
         {
             containerclass = JS_EncodeString(cx, cont);
@@ -169,9 +203,9 @@ js_addCdsObject(JSContext *cx, uintN arg
         }
 
         if (self->whoami() == S_PLAYLIST)
-            js_orig_obj = self->getObjectProperty(JS_THIS_OBJECT(cx, argv), _("playlist"));
+            js_orig_obj = self->getObjectProperty(obj, _("playlist"));
         else if (self->whoami() == S_IMPORT)
-            js_orig_obj = self->getObjectProperty(JS_THIS_OBJECT(cx, argv), _("orig"));
+            js_orig_obj = self->getObjectProperty(obj, _("orig"));
         
         if (js_orig_obj == NULL)
         {
@@ -179,9 +213,6 @@ js_addCdsObject(JSContext *cx, uintN arg
             return JS_TRUE;
         }
 
-        // root it
-        argv[1] = OBJECT_TO_JSVAL(js_orig_obj);
-
         orig_object = self->jsObject2cdsObject(js_orig_obj, self->getProcessedObject());
         if (orig_object == nil)
             return JS_TRUE;