Index: /trunk/FACT++/src/InterpreterV8.cc
===================================================================
--- /trunk/FACT++/src/InterpreterV8.cc	(revision 14640)
+++ /trunk/FACT++/src/InterpreterV8.cc	(revision 14641)
@@ -1116,6 +1116,9 @@
 }*/
 
-Handle<Value> InterpreterV8::FuncSubscribe(const Arguments &args)
-{
+Handle<Value> InterpreterV8::FuncSubscription(const Arguments &args)
+{
+    if (!args.IsConstructCall())
+        return ThrowException(String::New("Subscription must be calles as constructor."));
+
     if (args.Length()!=1)
         return ThrowException(String::New("Number of arguments must be exactly 1."));
@@ -1123,7 +1126,4 @@
     if (!args[0]->IsString())
         return ThrowException(String::New("Argument 1 must be a string."));
-
-    //if (!args.IsConstructCall())
-    //    return ThrowException(String::New("Must be used as constructor."));
 
     const String::Utf8Value str(args[0]);
@@ -1139,21 +1139,14 @@
     HandleScope handle_scope;
 
-    Handle<ObjectTemplate> tem = ObjectTemplate::New();
-    tem->Set(String::New("get"),    FunctionTemplate::New(WrapGetData),  ReadOnly);
-    tem->Set(String::New("close"),  FunctionTemplate::New(WrapClose),    ReadOnly);
-    tem->Set(String::New("name"),   String::New(*str), ReadOnly);
-    tem->Set(String::New("isOpen"), Boolean::New(true));
-    tem->SetInternalFieldCount(1);
-    //tem->Set(String::New("toString"), String::New(("[object Dim "+string(*str)+"]").c_str()), ReadOnly);
-
-    Handle<Object> obj = tem->NewInstance();
-    if (obj.IsEmpty())
-        return Undefined();
-
-    obj->SetInternalField(0, External::New(ptr));
-
-    fReverseMap[*str] = Persistent<Object>::New(obj);
-
-    return handle_scope.Close(obj);
+    Handle<Object> This = args.This();
+    This->Set(String::New("get"),    FunctionTemplate::New(WrapGetData)->GetFunction(),  ReadOnly);
+    This->Set(String::New("close"),  FunctionTemplate::New(WrapClose)->GetFunction(),    ReadOnly);
+    This->Set(String::New("name"),   String::New(*str), ReadOnly);
+    This->Set(String::New("isOpen"), Boolean::New(true));
+    This->SetInternalField(0, External::New(ptr));
+
+    fReverseMap[*str] = Persistent<Object>::New(This);
+
+    return Undefined();//handle_scope.Close(obj);
 
     // Persistent<Object> p = Persistent<Object>::New(obj->NewInstance());
@@ -1698,10 +1691,6 @@
     dim->Set(String::New("getState"),  FunctionTemplate::New(WrapGetState),  ReadOnly);
     dim->Set(String::New("sleep"),     FunctionTemplate::New(WrapSleep),     ReadOnly);
-    dim->Set(String::New("kill"),      FunctionTemplate::New(WrapKill),      ReadOnly);
-    dim->Set(String::New("subscribe"), FunctionTemplate::New(WrapSubscribe), ReadOnly);
     dim->Set(String::New("file"),      FunctionTemplate::New(WrapFile),      ReadOnly);
 
-    // timeout   -> Thread  - class?
-    // subscribe -> Service - class?
     // file      -> File    - class?
     // new class State ?
@@ -1719,4 +1708,9 @@
     global->Set(String::New("exit"),     FunctionTemplate::New(WrapExit),                   ReadOnly);
     global->Set(String::New("version"),  FunctionTemplate::New(InterpreterV8::FuncVersion), ReadOnly);
+
+    Handle<FunctionTemplate> sub = FunctionTemplate::New(WrapSubscription);
+    sub->SetClassName(String::New("Subscription"));
+    sub->InstanceTemplate()->SetInternalFieldCount(1);
+    global->Set(String::New("Subscription"), sub, ReadOnly);
 
     Handle<FunctionTemplate> db = FunctionTemplate::New(WrapDatabase);
Index: /trunk/FACT++/src/InterpreterV8.h
===================================================================
--- /trunk/FACT++/src/InterpreterV8.h	(revision 14640)
+++ /trunk/FACT++/src/InterpreterV8.h	(revision 14641)
@@ -73,5 +73,5 @@
     v8::Handle<v8::Value> FuncNewState(const v8::Arguments& args);
     //v8::Handle<v8::Value> FuncOpen(const v8::Arguments& args);
-    v8::Handle<v8::Value> FuncSubscribe(const v8::Arguments& args);
+    v8::Handle<v8::Value> FuncSubscription(const v8::Arguments& args);
     v8::Handle<v8::Value> FuncGetData(const v8::Arguments &args);
     v8::Handle<v8::Value> FuncClose(const v8::Arguments &args);
@@ -114,5 +114,5 @@
     static v8::Handle<v8::Value> WrapGetState(const v8::Arguments &args) { if (This) return This->FuncGetState(args); else return v8::Undefined(); }
     //static v8::Handle<v8::Value> WrapOpen(const v8::Arguments &args)     { if (This) return This->FuncOpen(args);     else return v8::Undefined(); }
-    static v8::Handle<v8::Value> WrapSubscribe(const v8::Arguments &args){ if (This) return This->FuncSubscribe(args);else return v8::Undefined(); }
+    static v8::Handle<v8::Value> WrapSubscription(const v8::Arguments &args){ if (This) return This->FuncSubscription(args);else return v8::Undefined(); }
     static v8::Handle<v8::Value> WrapGetData(const v8::Arguments &args)  { if (This) return This->FuncGetData(args);  else return v8::Undefined(); }
     static v8::Handle<v8::Value> WrapClose(const v8::Arguments &args)    { if (This) return This->FuncClose(args);    else return v8::Undefined(); }
