Index: trunk/FACT++/src/InterpreterV8.cc
===================================================================
--- trunk/FACT++/src/InterpreterV8.cc	(revision 16917)
+++ trunk/FACT++/src/InterpreterV8.cc	(revision 16936)
@@ -2360,4 +2360,12 @@
         V8::SetFlagsFromString(argv.c_str(), argv.size());
     }
+
+    /*
+     const string argv1 = "--prof";
+     const string argv2 = "--noprof-lazy";
+
+     V8::SetFlagsFromString(argv1.c_str(), argv1.size());
+     V8::SetFlagsFromString(argv2.c_str(), argv2.size());
+     */
 
     This = this;
@@ -2672,5 +2680,5 @@
 
 #ifdef HAVE_SQL
-    // ...and close all database  handles
+    // ...and close all database handles
     for (auto it=fDatabases.begin(); it!=fDatabases.end(); it++)
         delete *it;
@@ -2693,5 +2701,151 @@
 }
 
+vector<string> InterpreterV8::JsGetCommandList(const char *, int) const
+{
+    vector<string> rc;
+
+    rc.emplace_back("for (");
+    rc.emplace_back("while (");
+    rc.emplace_back("if (");
+    rc.emplace_back("switch (");
+    rc.emplace_back("case ");
+    rc.emplace_back("var ");
+    rc.emplace_back("function ");
+    rc.emplace_back("Date(");
+    rc.emplace_back("new Date(");
+    rc.emplace_back("'use strict';");
+
+
+    rc.emplace_back("dim.log(");
+    rc.emplace_back("dim.alarm(");
+    rc.emplace_back("dim.wait(");
+    rc.emplace_back("dim.send(");
+    rc.emplace_back("dim.state(");
+    rc.emplace_back("dim.version");
+    rc.emplace_back("dim.getStates(");
+    rc.emplace_back("dim.getDescription(");
+    rc.emplace_back("dim.getServices(");
+
+    rc.emplace_back("dimctrl.defineState(");
+    rc.emplace_back("dimctrl.setState(");
+    rc.emplace_back("dimctrl.getState(");
+    rc.emplace_back("dimctrl.setInterruptHandler(");
+    rc.emplace_back("dimctrl.triggerInterrupt(");
+
+    rc.emplace_back("v8.sleep(");
+    rc.emplace_back("v8.timeout(");
+    rc.emplace_back("v8.version()");
+
+    rc.emplace_back("console.out(");
+    rc.emplace_back("console.warn(");
+
+    rc.emplace_back("include(");
+    rc.emplace_back("exit()");
+
+#ifdef HAVE_SQL
+    rc.emplace_back("Database(");
+    rc.emplace_back("new Database(");
+
+    rc.emplace_back(".table");
+    rc.emplace_back(".user");
+    rc.emplace_back(".database");
+    rc.emplace_back(".port");
+    rc.emplace_back(".query");
 #endif
 
+    rc.emplace_back("Subscription(");
+    rc.emplace_back("new Subscription(");
+
+    rc.emplace_back("Thread(");
+    rc.emplace_back("new Thread(");
+
+    rc.emplace_back("File(");
+    rc.emplace_back("new File(");
+
+    rc.emplace_back("Event(");
+    rc.emplace_back("new Event(");
+
+    rc.emplace_back("Description(");
+    rc.emplace_back("new Description(");
+
+#ifdef HAVE_MAILX
+    rc.emplace_back("Mail(");
+    rc.emplace_back("new Mail(");
+
+    rc.emplace_back(".subject");
+    rc.emplace_back(".receipients");
+    rc.emplace_back(".attachments");
+    rc.emplace_back(".bcc");
+    rc.emplace_back(".cc");
+    rc.emplace_back(".text");
+    rc.emplace_back(".send(");
+#endif
+
+#ifdef HAVE_NOVA
+    rc.emplace_back("Sky(");
+    rc.emplace_back("new Sky(");
+
+    rc.emplace_back("Sky.dist");
+    rc.emplace_back("Local(");
+
+    rc.emplace_back("new Local(");
+    rc.emplace_back("Local.dist");
+
+    rc.emplace_back("Moon(");
+    rc.emplace_back("new Moon(");
+    rc.emplace_back("Moon.disk(");
+    rc.emplace_back("Moon.horizon(");
+
+    rc.emplace_back("Sun.horizon(");
+
+    rc.emplace_back(".zd");
+    rc.emplace_back(".az");
+    rc.emplace_back(".ra");
+    rc.emplace_back(".dec");
+
+    rc.emplace_back(".toLocal(");
+    rc.emplace_back(".toSky(");
+    rc.emplace_back(".rise");
+    rc.emplace_back(".set");
+    rc.emplace_back(".transit");
+    rc.emplace_back(".isUp");
+
+    rc.emplace_back("horizon");
+    rc.emplace_back("civil");
+    rc.emplace_back("nautical");
+    rc.emplace_back("astronomical");
+#endif
+
+    rc.emplace_back(".server");
+    rc.emplace_back(".service");
+    rc.emplace_back(".name");
+    rc.emplace_back(".isCommand");
+    rc.emplace_back(".format");
+    rc.emplace_back(".description");
+    rc.emplace_back(".unit");
+    rc.emplace_back(".delim");
+    rc.emplace_back(".isOpen");
+
+    rc.emplace_back(".qos");
+    rc.emplace_back(".size");
+    rc.emplace_back(".counter");
+    rc.emplace_back(".type");
+    rc.emplace_back(".obj");
+    rc.emplace_back(".data");
+    rc.emplace_back(".comment");
+    rc.emplace_back(".index");
+    rc.emplace_back(".time");
+    rc.emplace_back(".close()");
+    rc.emplace_back(".onchange");
+    rc.emplace_back(".get(");
+
+
+    rc.emplace_back("__DATE__");
+    rc.emplace_back("__FILE__");
+
+    return rc;
+}
+
+#endif
+
 InterpreterV8 *InterpreterV8::This = 0;
Index: trunk/FACT++/src/InterpreterV8.h
===================================================================
--- trunk/FACT++/src/InterpreterV8.h	(revision 16917)
+++ trunk/FACT++/src/InterpreterV8.h	(revision 16936)
@@ -187,4 +187,6 @@
     }
 
+    std::vector<std::string> JsGetCommandList(const char *, int) const;
+
     virtual void  JsLoad(const std::string & = "");
     virtual void  JsStart(const std::string &) { }
Index: trunk/FACT++/src/RemoteControl.h
===================================================================
--- trunk/FACT++/src/RemoteControl.h	(revision 16917)
+++ trunk/FACT++/src/RemoteControl.h	(revision 16936)
@@ -95,8 +95,13 @@
 
     // This funtion defines which generator should be called.
-    // If it returns 0 the standard reaqdline generator are called.
+    // If it returns 0 the standard readline generator are called.
     // Otherwise set the right generator with rl_completion_matches.
     char **Completion(const char *text, int start, int)
     {
+        if (T::fScript=="java")
+        {
+            return T::Complete(JsGetCommandList(text, start), text);
+        }
+
         // Get the whole buffer before the tab-position
         const string b = string(T::GetBuffer());
@@ -456,4 +461,6 @@
             T::Unlock();
 
+            T::fScript = "";
+
             return true;
         }
