diff --git a/jsre/jsre.go b/jsre/jsre.go
index 6a7cb1b837fe470767654247d6c4bc87d90cbdc4..a6dd117a3968be60e910850c69b74c80e19f4d85 100644
--- a/jsre/jsre.go
+++ b/jsre/jsre.go
@@ -286,7 +286,7 @@ func (self *JSRE) loadScript(call otto.FunctionCall) otto.Value {
 // uses the "prettyPrint" JS function to format a value
 func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
 	var method otto.Value
-	v, err = self.vm.ToValue(v)
+	v, err = self.ToValue(v)
 	if err != nil {
 		return
 	}
@@ -297,8 +297,23 @@ func (self *JSRE) PrettyPrint(v interface{}) (val otto.Value, err error) {
 	return method.Call(method, v)
 }
 
-// creates an otto value from a go type
+// creates an otto value from a go type (serialized version)
+func (self *JSRE) ToValue(v interface{}) (otto.Value, error) {
+	done := make(chan bool)
+	req := &evalReq{
+		fn: func(res *evalResult) {
+			res.result, res.err = self.vm.ToValue(v)
+		},
+		done: done,
+	}
+	self.evalQueue <- req
+	<-done
+	return req.res.result, req.res.err
+}
+
+// creates an otto value from a go type (non-serialized version)
 func (self *JSRE) ToVal(v interface{}) otto.Value {
+
 	result, err := self.vm.ToValue(v)
 	if err != nil {
 		fmt.Println("Value unknown:", err)