diff --git a/CEP/BB/BBSControl/sql/create_blackboard_functions.sql b/CEP/BB/BBSControl/sql/create_blackboard_functions.sql
index 3f980fbf513c70940d0988cc7384cc6438cc76de..691c2049a3b593212bec59c38bc9ef9d1e33be9e 100644
--- a/CEP/BB/BBSControl/sql/create_blackboard_functions.sql
+++ b/CEP/BB/BBSControl/sql/create_blackboard_functions.sql
@@ -32,7 +32,7 @@ $$
                     SELECT COUNT(1)
                         FROM
                         (
-                            SELECT COUNT(1)
+                            SELECT 1
                                 FROM blackboard.result
                                 WHERE node = inet_client_addr()
                                 LIMIT 1
@@ -45,40 +45,51 @@ $$
 LANGUAGE plpgsql;
 
 
-CREATE OR REPLACE FUNCTION blackboard.command_queue_empty()
-RETURNS BOOL AS
-$$
-    SELECT
-        (
-            SELECT COUNT(1)
-                FROM
-                (
-                    SELECT 1
-                        FROM blackboard.command
-                        LIMIT 1
-                )
-                AS tmp
-        ) = 0;
-$$
-LANGUAGE SQL;
+--CREATE OR REPLACE FUNCTION blackboard.command_queue_empty()
+--RETURNS BOOL AS
+--$$
+--    SELECT
+--        (
+--            SELECT COUNT(1)
+--                FROM
+--                (
+--                    SELECT 1
+--                        FROM blackboard.command
+--                        LIMIT 1
+--                )
+--                AS tmp
+--        ) = 0;
+--$$
+--LANGUAGE SQL;
 
 
 -- (PRIVATE FUNCTION, DO NOT CALL FROM C++)
 CREATE OR REPLACE FUNCTION blackboard.get_next_command_id()
 RETURNS INTEGER AS
 $$
-    SELECT id
-        FROM blackboard.command
-        WHERE id NOT IN
-            (
-                SELECT command_id
-                    FROM blackboard.result
-                    WHERE node = inet_client_addr()
-            )
-        ORDER BY id
-        LIMIT 1;
+    DECLARE
+        _id INTEGER;
+    BEGIN
+        SELECT id
+            INTO _id
+            FROM blackboard.command
+            WHERE id NOT IN
+                (
+                    SELECT command_id
+                        FROM blackboard.result
+                        WHERE node = inet_client_addr()
+                )
+            ORDER BY id
+            LIMIT 1;
+        
+        IF FOUND THEN
+            RETURN _id;
+        END IF;
+        
+        RETURN 0;
+    END;        
 $$
-LANGUAGE SQL;
+LANGUAGE plpgsql;
 
 
 CREATE OR REPLACE FUNCTION blackboard.get_next_command()
@@ -110,7 +121,7 @@ CREATE OR REPLACE FUNCTION blackboard.set_strategy
 RETURNS BOOLEAN AS
 $$
     BEGIN
-        IF (SELECT COUNT(*) FROM blackboard.strategy) <> 0 THEN
+        IF (SELECT COUNT(1) FROM blackboard.strategy) <> 0 THEN
             RETURN FALSE;
         END IF;
 
@@ -268,13 +279,6 @@ $$
 LANGUAGE SQL;
 
 
-CREATE OR REPLACE FUNCTION blackboard.get_nextchunk_args(_command_id INTEGER)
-RETURNS VOID AS
-$$
-$$
-LANGUAGE SQL;
-
-
 CREATE OR REPLACE FUNCTION blackboard.add_nextchunk_command()
 RETURNS VOID AS
 $$
@@ -285,6 +289,13 @@ $$
 LANGUAGE plpgsql;
 
 
+CREATE OR REPLACE FUNCTION blackboard.get_nextchunk_args(_command_id INTEGER)
+RETURNS VOID AS
+$$
+$$
+LANGUAGE SQL;
+
+
 CREATE OR REPLACE FUNCTION blackboard.add_predict_command
     (command_args blackboard.iface_predict_args)
 RETURNS VOID AS
@@ -425,20 +436,19 @@ CREATE OR REPLACE FUNCTION blackboard.add_result
     (_command_id INTEGER,
     _result_code INTEGER,
     _message TEXT)
-RETURNS VOID AS
+RETURNS BOOL AS
 $$
-    DECLARE
-        last_id INTEGER;
     BEGIN
-        IF blackboard.command_queue_empty()
-            OR _command_id != blackboard.get_next_command_id()
+        IF _command_id > 0
+            AND _command_id = blackboard.get_next_command_id()
         THEN
-            RAISE EXCEPTION
-                'Attempt to add result for a command that is not current';
+            INSERT INTO blackboard.result(command_id, result_code, message)
+                VALUES (_command_id, _result_code, _message);
+            
+            RETURN FOUND;
         END IF;
-
-        INSERT INTO blackboard.result(command_id, result_code, message)
-            VALUES (_command_id, _result_code, _message);
+        
+        RETURN FALSE;
     END;
 $$
 LANGUAGE plpgsql;
diff --git a/CEP/BB/BBSControl/sql/create_blackboard_tables.sql b/CEP/BB/BBSControl/sql/create_blackboard_tables.sql
index f7a43f025e34b782719f203a5765a4bad6901863..ade881aa26ee8a2bcc1875553d977c8d138c1a4a 100644
--- a/CEP/BB/BBSControl/sql/create_blackboard_tables.sql
+++ b/CEP/BB/BBSControl/sql/create_blackboard_tables.sql
@@ -82,7 +82,9 @@ CREATE TABLE blackboard.result
     timestamp       TIMESTAMP WITH TIME ZONE    DEFAULT now(),
     node            INET                        DEFAULT inet_client_addr(),
     result_code     INTEGER                     NOT NULL,
-    message         TEXT                        NOT NULL
+    message         TEXT                        NOT NULL,
+    
+    UNIQUE (command_id, node)
 );
 
 
diff --git a/CEP/BB/BBSControl/sql/create_blackboard_triggers.sql b/CEP/BB/BBSControl/sql/create_blackboard_triggers.sql
index cb06d623a96d2a93911b7b05df04caa56e594aab..1310e5bee5ecee911022597dbecbbfb7afa4d498 100644
--- a/CEP/BB/BBSControl/sql/create_blackboard_triggers.sql
+++ b/CEP/BB/BBSControl/sql/create_blackboard_triggers.sql
@@ -1,4 +1,4 @@
-CREATE OR REPLACE FUNCTION blackboard.notify_client() RETURNS TRIGGER AS
+CREATE OR REPLACE FUNCTION blackboard.notify() RETURNS TRIGGER AS
 $$
     BEGIN
         EXECUTE 'NOTIFY ' || quote_ident(TG_NAME);
@@ -7,10 +7,27 @@ $$
 $$
 LANGUAGE plpgsql;
 
+CREATE OR REPLACE FUNCTION blackboard.notify_result() RETURNS TRIGGER AS
+$$
+    DECLARE
+        cmd_type    TEXT;
+    BEGIN
+        cmd_type := "Type" FROM blackboard.command WHERE id = NEW.command_id;
+        
+        IF cmd_type ~ 'initialize|finalize|nextchunk' THEN
+--            RAISE NOTICE 'NOTIFY %', quote_ident(TG_NAME) || '_' || cmd_type;
+            EXECUTE 'NOTIFY ' || quote_ident(TG_NAME) || '_' || cmd_type;    
+        END IF;
+
+        RETURN NULL;
+    END;
+$$
+LANGUAGE plpgsql;
+
 CREATE TRIGGER insert_command
     AFTER INSERT ON blackboard.command
-    FOR EACH STATEMENT EXECUTE PROCEDURE blackboard.notify_client();
+    FOR EACH STATEMENT EXECUTE PROCEDURE blackboard.notify();
 
 CREATE TRIGGER insert_result
     AFTER INSERT ON blackboard.result
-    FOR EACH STATEMENT EXECUTE PROCEDURE blackboard.notify_client();
+    FOR EACH ROW EXECUTE PROCEDURE blackboard.notify_result();
diff --git a/CEP/BB/BBSControl/sql/create_blackboard_types.sql b/CEP/BB/BBSControl/sql/create_blackboard_types.sql
index e4712cb0f8fb64c81a3183fdf897dbfe516f1915..d6d198a070ca90fe64bc19e0afb238f9e4ef3154 100644
--- a/CEP/BB/BBSControl/sql/create_blackboard_types.sql
+++ b/CEP/BB/BBSControl/sql/create_blackboard_types.sql
@@ -61,11 +61,11 @@ CREATE TYPE blackboard.iface_solve_args AS
     "Sources"               TEXT,
     "InstrumentModel"       TEXT,
     "OutputData"            TEXT,
-    "Solve.MaxIter"               INTEGER,
-    "Solve.Epsilon"               DOUBLE PRECISION,
-    "Solve.MinConverged"          DOUBLE PRECISION,
-    "Solve.Parms"                 TEXT,
-    "Solve.ExclParms"             TEXT,
-    "Solve.DomainSize.Freq"       DOUBLE PRECISION,
-    "Solve.DomainSize.Time"       DOUBLE PRECISION
+    "Solve.MaxIter"         INTEGER,
+    "Solve.Epsilon"         DOUBLE PRECISION,
+    "Solve.MinConverged"    DOUBLE PRECISION,
+    "Solve.Parms"           TEXT,
+    "Solve.ExclParms"       TEXT,
+    "Solve.DomainSize.Freq" DOUBLE PRECISION,
+    "Solve.DomainSize.Time" DOUBLE PRECISION
 );