Index: trunk/FACT++/src/InterpreterV8.cc
===================================================================
--- trunk/FACT++/src/InterpreterV8.cc	(revision 14083)
+++ trunk/FACT++/src/InterpreterV8.cc	(revision 14084)
@@ -204,22 +204,17 @@
         return ThrowException(String::New("Argument 1 must be a string."));
 
-    const HandleScope handle_scope;
+    // Return state.name/state.index
+
+    HandleScope handle_scope;
 
     const String::Utf8Value str(args[0]);
-    return Integer::New(JsState(*str));
-}
-
-Handle<Value> InterpreterV8::FuncName(const Arguments& args)
-{
-    if (args.Length()!=1)
-        return ThrowException(String::New("Number of arguments must be exactly 1."));
-
-    if (!args[0]->IsString())
-        return ThrowException(String::New("Argument 1 must be a string."));
-
-    const HandleScope handle_scope;
-
-    const String::Utf8Value str(args[0]);
-    return String::New(JsName(*str).c_str());
+
+    const pair<int32_t, string> rc = JsState(*str);
+
+    Handle<ObjectTemplate> obj = ObjectTemplate::New();
+    obj->Set(String::New("index"), rc.first <=-256?Undefined():Integer::New(rc.first),          ReadOnly);
+    obj->Set(String::New("name"),  rc.first <=-256?Undefined():String::New (rc.second.c_str()), ReadOnly);
+ 
+    return handle_scope.Close(obj->NewInstance());
 }
 
@@ -281,6 +276,4 @@
     return String::New(V8::GetVersion());
 }
-
-#include <iostream>
 
 bool InterpreterV8::JsRun(const string &filename, const map<string, string> &map)
@@ -299,5 +292,4 @@
     dim->Set(String::New("send"),    FunctionTemplate::New(WrapSend),    ReadOnly);
     dim->Set(String::New("state"),   FunctionTemplate::New(WrapState),   ReadOnly);
-    dim->Set(String::New("name"),    FunctionTemplate::New(WrapName),    ReadOnly);
     dim->Set(String::New("sleep"),   FunctionTemplate::New(WrapSleep),   ReadOnly);
 
@@ -331,4 +323,6 @@
     v8::Locker::StopPreemption();
     //context->Exit();
+
+    //context.Dispose();
 
     JsEnd(filename);
@@ -348,2 +342,3 @@
 
 #endif
+
Index: trunk/FACT++/src/InterpreterV8.h
===================================================================
--- trunk/FACT++/src/InterpreterV8.h	(revision 14083)
+++ trunk/FACT++/src/InterpreterV8.h	(revision 14084)
@@ -29,5 +29,5 @@
     v8::Handle<v8::Value> FuncExit(const v8::Arguments& args);
     v8::Handle<v8::Value> FuncState(const v8::Arguments& args);
-    v8::Handle<v8::Value> FuncName(const v8::Arguments& args);
+    v8::Handle<v8::Value> FuncInfo(const v8::Arguments& args);
 
     static v8::Handle<v8::Value> FuncVersion(const v8::Arguments&);
@@ -39,5 +39,5 @@
     static v8::Handle<v8::Value> WrapExit(const v8::Arguments &args)    { if (This) return This->FuncExit(args);    else return v8::Undefined(); }
     static v8::Handle<v8::Value> WrapState(const v8::Arguments &args)   { if (This) return This->FuncState(args);   else return v8::Undefined(); }
-    static v8::Handle<v8::Value> WrapName(const v8::Arguments &args)    { if (This) return This->FuncName(args);   else return v8::Undefined(); }
+    static v8::Handle<v8::Value> WrapInfo(const v8::Arguments &args)    { if (This) return This->FuncInfo(args);    else return v8::Undefined(); }
 #endif
 
@@ -53,15 +53,15 @@
     }
 
-    virtual void JsLoad(const std::string &) { }
-    virtual void JsStart(const std::string &) { }
-    virtual void JsEnd(const std::string &) { }
-    virtual void JsPrint(const std::string &) { }
-    virtual void JsResult(const std::string &) { }
-    virtual void JsException(const std::string &) { }
-    virtual bool JsSend(const std::string &) { return true; }
-    virtual void JsSleep(uint32_t) { }
-    virtual int  JsWait(const std::string &, int32_t, uint32_t) { return -1; };
-    virtual int  JsState(const std::string &) { return -3; };
-    virtual std::string JsName(const std::string &) { return ""; };
+    virtual void  JsLoad(const std::string &) { }
+    virtual void  JsStart(const std::string &) { }
+    virtual void  JsEnd(const std::string &) { }
+    virtual void  JsPrint(const std::string &) { }
+    virtual void  JsResult(const std::string &) { }
+    virtual void  JsException(const std::string &) { }
+    virtual bool  JsSend(const std::string &) { return true; }
+    virtual void  JsSleep(uint32_t) { }
+    virtual int   JsWait(const std::string &, int32_t, uint32_t) { return -1; };
+    virtual std::pair<int32_t, std::string>  JsState(const std::string &) { return std::make_pair(-256, ""); };
+    virtual void *JsSubscribe(const std::string &) { return 0; };
 
     bool JsRun(const std::string &, const std::map<std::string,std::string> & = std::map<std::string,std::string>());
