diff --git a/core/trunk/core/tests/class/DataAccessService_Database.php b/core/trunk/core/tests/class/DataAccessService_Database.php
index c0c215c59ed3bb1ef343687735146b8376cb1c8a..92e7ced6006056bd552c8dbcda6493aece0424f6 100644
--- a/core/trunk/core/tests/class/DataAccessService_Database.php
+++ b/core/trunk/core/tests/class/DataAccessService_Database.php
@@ -1,5 +1,6 @@
 <?php
 class DataAccessService_Database 
+    
 {
 	
     private $connection;
@@ -7,11 +8,13 @@ class DataAccessService_Database
     public $tables = array();
     public $relations = array();
     private $limit;
+    private $db;
     
     public function DataAccessService_Database($schema='public', $limit=500) 
     {
         $this->schema = $schema;
         $this->limit = $limit;
+        $this->db = new dbquery();
     }
     
     public function addTable($tableName) 
@@ -90,11 +93,10 @@ class DataAccessService_Database
         
         //echo "<pre>DAS = " . print_r($this,true) . "</pre>";
         //echo "<pre>QUERY = " . $query . "</pre>";
-        $db = new dbquery();
-        $db->query($query);
+        $this->db->query($query);
         
         $results = array();
-        while($result = $db->fetch_assoc()) {
+        while($result = $this->db->fetch_assoc()) {
             $results[] = $result;
         }
         return $results;
@@ -131,9 +133,8 @@ class DataAccessService_Database
         $query .= " VALUES (" . $insertExpression . ")";
         
         //echo "<pre>DAS = " . print_r($this,true) . "</pre>";
-        //echo "<pre>QUERY = " . $query . "</pre>";
-        $db = new dbquery();
-        $db->query($query);
+        echo "<pre>QUERY = " . $query . "</pre>";
+        //$this->db->query($query);
         
         $this->saveChildObjects($dataObject);
     
@@ -156,9 +157,8 @@ class DataAccessService_Database
         $query .= " WHERE " . $keyExpression;
         
         //echo "<pre>DAS = " . print_r($this,true) . "</pre>";
-        //echo "<pre>QUERY = " . $query . "</pre>";
-        $db = new dbquery();
-        $db->query($query);
+        echo "<pre>QUERY = " . $query . "</pre>";
+        //$this->db->query($query);
         
         $this->saveChildObjects($dataObject);
         
diff --git a/core/trunk/core/tests/class/DataObject.php b/core/trunk/core/tests/class/DataObject.php
index e9a90185ed418f72efccf4f1a49921bbdd796cb2..195298863e750c014af8641d30361e78740c97e9 100644
--- a/core/trunk/core/tests/class/DataObject.php
+++ b/core/trunk/core/tests/class/DataObject.php
@@ -135,11 +135,6 @@ class DataObject
     public function beginLogging()
     {
         $this->changeLog = new DataObjectChangeLog();
-        $childObjects = $this->children;
-        for($i=0; $i<count($childObjects); $i++) {
-            $childObject = $childObjects[$i];
-            $childObject->beginLogging();
-        }
     }
     
     public function logCreation()
@@ -147,6 +142,11 @@ class DataObject
         $this->changeLog->logCreation($this->name);
     }
     
+    public function logRead() 
+    {
+        $this->changeLog->logRead($this->name);
+    }
+    
     //*************************************************************************
     // XML
     //*************************************************************************
@@ -211,7 +211,6 @@ class DataObject
     }
     
     private function formatXmlString($xml) {  
-      
         // add marker linefeeds to aid the pretty-tokeniser (adds a linefeed between all tag-end boundaries)
         $xml = preg_replace('/(>)(<)(\/*)/', "$1\n$2$3", $xml);
         
diff --git a/core/trunk/core/tests/class/DataObjectArray.php b/core/trunk/core/tests/class/DataObjectArray.php
index ceaa87a022dc012df6dd529385b030bbd8172b46..d10bb8e0f70ee3bc6eb4e0b1ea63faa98e0ca6eb 100644
--- a/core/trunk/core/tests/class/DataObjectArray.php
+++ b/core/trunk/core/tests/class/DataObjectArray.php
@@ -76,11 +76,6 @@ class DataObjectArray
     public function beginLogging()
     {
         $this->changeLog = new DataObjectChangeLog();
-        $childObjects = $this->children;
-        for($i=0; $i<count($childObjects); $i++) {
-            $childObject = $childObjects[$i];
-            $childObject->beginLogging();
-        }   
     }
     
     public function logCreation()
diff --git a/core/trunk/core/tests/class/DataObjectChangeLog.php b/core/trunk/core/tests/class/DataObjectChangeLog.php
index 5d7bf8e6ae377d8f461a58e00eb932ef2b66d0f8..d4b75e35b9a2a2eba860a3a52333a378ba6125cb 100644
--- a/core/trunk/core/tests/class/DataObjectChangeLog.php
+++ b/core/trunk/core/tests/class/DataObjectChangeLog.php
@@ -23,6 +23,11 @@ class DataObjectChangeLog
         $this->logChange(DataObjectChange::CREATE, $name);
     }
     
+    public function logRead($name) 
+    {
+        $this->logChange(DataObjectChange::READ, $name);
+    }
+    
     public function __get($name)
     {
         switch($name) {
diff --git a/core/trunk/core/tests/class/DataObjectController.php b/core/trunk/core/tests/class/DataObjectController.php
index 59f6c8cbb3014f048c7341ccb919e314b047622d..b2e3bd26abc1b6c728c176e810e9b367d764387a 100644
--- a/core/trunk/core/tests/class/DataObjectController.php
+++ b/core/trunk/core/tests/class/DataObjectController.php
@@ -11,19 +11,22 @@ class dataObjectController extends DOMDocument
     
     public function dataObjectController() 
     {
+        // DataObject classes
         require_once 'core/tests/class/DataObjectSchema.php';
         require_once 'core/tests/class/DataObjectArray.php';
         require_once 'core/tests/class/DataObject.php';
         require_once 'core/tests/class/DataObjectProperty.php';
+        
+        // ChangeLog classes
         require_once 'core/tests/class/DataObjectChangeLog.php';
         require_once 'core/tests/class/DataObjectChange.php';
         
+        // DataAccessService / PDO classes
         require_once 'core/tests/class/DataAccessService_Database.php';
-        $this->dataAccessService_Database = new dataAccessService_Database();
         require_once 'core/tests/class/DataAccessService_XML.php';
-                
+        
+        // Validator classes
         require_once 'core/tests/class/DataObjectValidator.php';
-        $this->dataObjectValidator = new DataObjectValidator();
         
     }
     
@@ -32,12 +35,16 @@ class dataObjectController extends DOMDocument
         $this->schema = new DataObjectSchema();
         $this->schema->loadSchema($xsdFile);
         
+        $this->dataAccessService_Database = new dataAccessService_Database();
+        
         $objectSchemas = $this->schema->getObjectSchemas();
         for($i=0; $i<$objectSchemas->length; $i++) {
             $objectSchema = $objectSchemas->item($i);
             $this->prototypeDataObject($objectSchema);
         }
         
+        $this->dataObjectValidator = new DataObjectValidator();
+        
     }
     
     //*************************************************************************
@@ -81,6 +88,7 @@ class dataObjectController extends DOMDocument
         $dataObject = $this->instanciateDataObject($objectSchema);
         $this->loadDataObject($dataObject);
         $dataObject->beginLogging();
+        $dataObject->logRead();
         return $dataObject;
     }
     
@@ -113,7 +121,7 @@ class dataObjectController extends DOMDocument
     
     }
     
-    public function copy($dataObject)
+    public function copy($dataObject, $keepParent=true)
     {
         $dataObject = unserialize(serialize($dataObject));
 
@@ -129,6 +137,8 @@ class dataObjectController extends DOMDocument
             $children[$i]->clear();
         }
         
+        if(!$keepParent) $dataObject->parentObject = false;
+        
         $dataObject->beginLogging();
         $dataObject->logCreation();
                 
@@ -313,6 +323,8 @@ class dataObjectController extends DOMDocument
         for($i=0; $i<count($objectDatas); $i++) {
             $objectData = $objectDatas[$i];
             $dataObject = $this->instanciateDataObject($objectSchema);
+            $dataObject->beginLogging();
+            $dataObject->logRead();
             $arrayDataObject->append($dataObject);          
             $this->loadProperties($dataObject, $objectData);
             $this->loadChildren($dataObject);
diff --git a/core/trunk/core/tests/class/DataObjectSchema.php b/core/trunk/core/tests/class/DataObjectSchema.php
index 0fb96281a96723f804cb96f78e5407314be349ab..3ef561b2b6f31dd0415dde26dc1947a52434be87 100644
--- a/core/trunk/core/tests/class/DataObjectSchema.php
+++ b/core/trunk/core/tests/class/DataObjectSchema.php
@@ -62,6 +62,15 @@ class DataObjectSchema extends DOMDocument {
         return $this->xpath->query($query, $contextElement);
     }
     
+    public function getDataSources()
+    {
+        $DSnodes = $this->xpath('/xsd:schema/xsd:annotation/xsd:appinfo/das:datasource');
+        for($i=0; $i<$DSnodes->length; $i++) {
+            $DS[] = $DSnodes->item($i);
+        }
+        return $DS;
+    }
+    
     public function getObjectSchemas() 
     {
         return $this->xpath('/xsd:schema/xsd:element');