diff --git a/CEP/CPA/AppAgent/MeqServer/TODO b/CEP/CPA/AppAgent/MeqServer/TODO
index 44c9f7d6f3a58fe4518d0d6dfbca36fcc2a89a8b..f8b0819e133f7c6e8756ea4367de57e56370222a 100644
--- a/CEP/CPA/AppAgent/MeqServer/TODO
+++ b/CEP/CPA/AppAgent/MeqServer/TODO
@@ -1,20 +1,21 @@
 MEQ in general:
 
+    - Specify child labels in node constructor; check them in init().
+      Process named children properly.
+      01/01/04: done, need to test w/glish (glish not working on my laptop)
+  
+    - Persistent nodes: Save.Forest, Load.Forest, Clear.Cache commands
+      01/01/04: done, need to test w/glish (glish not working on my laptop)
+      
+    - Clear.Forest command 
+      04/01/04: done, need to test w/glish (glish not working on my laptop)
+  
   * reconsider order or events in execute(): should cache be checked
     only after node_state and rider have been processed? Note that for
     repeated requests, this step is skipped, regardless. 
-    
-  * Specify child labels in node constructor; check them in init().
-    Process named children properly.
-  
-  * Delete.All.Nodes command
-  
-  * Persistent nodes
   
   * Implement request ID hierarchy
       
-  * Keep thinking about COWs. 
-  
         + Document the two types of node_state lookups
         + Document pollChildren()
         12/12/03
@@ -39,17 +40,13 @@ MEQ in general:
           implement simple copy-on-write as the default policy in DMI?
           27/11/03: good to go for now. Still thinking about COW.
 
-Result:
-
-  * Check for USE_THREADS when playing with mutexes (or improve the definition
-    of mutexes for when not using threads)
-
 Spigot:
 
-  * Allow string specification for correlations
-  
   * In deliver, just stick the result in the cache and let the caching code
     take care of everything else. 
+    
+        + Allow string specification for correlations
+          09/01/04: no need, now that Spigots output all correlations at once.
 
 Parm:
 
@@ -57,15 +54,13 @@ Parm:
 
 Request: 
 
-
-  * Figure out why state_test() (meqtest.g) causes Requests to be fail to
+  * BUG: Figure out why state_test() (meqtest.g) causes Requests to be fail to
     unpack upon the first invocation. Possibly related to problem below.
     See details in report 1 below.
     
-  * when Jan supplied an illegal request (wrong fields, unmatched IDs), the 
+  * Buglet: when Jan supplied an illegal request (wrong fields, unmatched IDs), the 
     error message was not exactly descriptive
 
-
 Vells:
 
   * Vells(DataArray*) constructor: if rank<2 but nelements==1, reform the 
@@ -75,19 +70,27 @@ Function:
   
         + Allow cases where a Result has 1 plane and another has N planes: treat
           the single-plane result as a scalar
-          12/12/03
+          12/12/03 done
 
 General:
 
-  * MSOutputSink: output to new column doesn't work, column stays 'dummy'
+  * Keep thinking about COWs. Perhaps make hooks implicitl-COW? This would 
+    mean declaring an operator [] on CountedRefs? 
+  
+  * Bug: MSOutputSink: output to new column doesn't work, column stays 'dummy'.
+    Ask Ger for help, since I'm obviously misusing tables somehow.
   
-  * Check how a zero-length string or hiid array from Glish shows up in
+  * Bug: Check how a zero-length string or hiid array from Glish shows up in
     AppAgent -- because it looked like a 1-element DataField when 
     processing child specs.
     
-  * Ditto for zero-length arrays ('[]'), i.e., uninitialized domain, etc.
+  * Bug: Ditto for zero-length arrays ('[]'), i.e., uninitialized domain, etc.
+
+  * Check for USE_THREADS when playing with mutexes (or improve the definition
+    of mutexes when compiling without threads: declare constructors for
+    Mutex::Lock and all that crap)
     
-  * Figure out why the hell it freezes on a single-CPU machine sometimes. A
+  * Bug: Figure out why the hell it freezes on a single-CPU machine sometimes. A
     race condition somewhere? NB: a sure way to do it (on zeppelin) seems to
     enable wait_reply=T in the Resolve.Children calls in meqtest.g.
 
diff --git a/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer-Registry.cc b/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer-Registry.cc
index c23d428e9a642797e277101600c92c5801ae01a5..4d1098b21f53912404178bd0b3f940f78bc8177c 100644
--- a/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer-Registry.cc
+++ b/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer-Registry.cc
@@ -38,6 +38,7 @@ BlockableObject * __construct_MeqSpigot (int n) { return n>0 ? new Meq::Spigot [
         AtomicID::registerId(-1045,"message")+
         AtomicID::registerId(-1164,"code")+
         AtomicID::registerId(-1372,"execute")+
+        AtomicID::registerId(-1386,"addstate")+
         AtomicID::registerId(-1126,"station")+
         AtomicID::registerId(-1051,"index")+
         AtomicID::registerId(-1280,"tile")+
diff --git a/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer.h b/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer.h
index 722a46ef00ad65997c48b4a0350094fe656e66af..3d306af0958a1dfc4438a39311b813f29362ca7d 100644
--- a/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer.h
+++ b/CEP/CPA/AppAgent/MeqServer/src/AID-MeqServer.h
@@ -213,6 +213,11 @@ const int AidTile_int = -1280;
 const AtomicID AidVisHandlerNode(-1329);          // from /home/oms/LOFAR/CEP/CPA/AppAgent/MeqServer/src/VisHandlerNode.h:7
 const int AidVisHandlerNode_int = -1329;
 #endif
+#ifndef _defined_id_Aidaddstate
+#define _defined_id_Aidaddstate 1
+const AtomicID Aidaddstate(-1386);                // from /home/oms/LOFAR/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h:14
+const int Aidaddstate_int = -1386;
+#endif
 
 
 #endif
diff --git a/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h b/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h
index 5f25d0f41a4443917d2013358f63000b09ae3a92..9636e5fd83953a01d3a24f79ac3a3a36853ca165 100644
--- a/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h
+++ b/CEP/CPA/AppAgent/MeqServer/src/MeqServer.h
@@ -11,6 +11,7 @@
 #pragma aid Create Delete Get Set State Request Resolve Child Children List
 #pragma aid App Command Args Result Data Processing Error Message Code
 #pragma aid Execute
+#pragma aid addstate
     
 namespace Meq
 {
diff --git a/CEP/CPA/AppAgent/MeqServer/test/meqtest.g b/CEP/CPA/AppAgent/MeqServer/test/meqtest.g
index c9fae03290bf6461bc071bc225502dcbb90fde5c..c7389c2833b9a9befb36729045be252b999d5074 100644
--- a/CEP/CPA/AppAgent/MeqServer/test/meqtest.g
+++ b/CEP/CPA/AppAgent/MeqServer/test/meqtest.g
@@ -1,4 +1,4 @@
-# use_suspend  := T;
+ use_suspend  := T;
 # use_nostart  := T;
 # use_valgrind := T;
 # "--skin=helgrind --logfile=hg.meqserver";
@@ -132,9 +132,9 @@ const state_test_init := function ()
     }
   }
   # set verbose debugging messages
-  mqs.setdebug("MeqNode MeqForest MeqSink MeqSpigot",5);
-  mqs.setdebug("MeqNode MeqForest MeqSink MeqSpigot",5);
-  mqs.setdebug("MeqServ MeqVisHandler",5);
+  mqs.setdebug("MeqNode MeqForest MeqSink MeqSpigot",1);
+  mqs.setdebug("MeqNode MeqForest MeqSink MeqSpigot",1);
+  mqs.setdebug("MeqServ MeqVisHandler",1);
   mqs.setdebug("Glish",5);
   mqs.setdebug("meqserver",1);
   # initialize meqserver
@@ -241,10 +241,10 @@ const solver_test := function ()
   mqs.init([output_col="PREDICT"],wait=T);
   
   # create parms and condeq
-  defval1 := array([1.,2.,1.5,0.2,1.3,0.5],2,3);
-  defval2 := array([2.,10.,2.,10.,2.,10],2,3);
+  defval1 := array([3.,0.5,0.5,0.1],2,2);
+  defval2 := array([2.,10.,2.,10. ],2,2);
   print mqs.meq('Create.Node',meqparm('parm1',defval1,config_groups='Solvable.Parm'));
-  print mqs.meq('Create.Node',meqparm('parm2',defval1,config_groups='Solvable.Parm'));
+  print mqs.meq('Create.Node',meqparm('parm2',defval2,config_groups='Solvable.Parm'));
   print mqs.meq('Create.Node',meqnode('MeqCondeq','condeq1',children=[a='parm1',b='parm2']));
   # create solver
   global rec;