diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
index ec8c4335e3aab3044a70610ecd344a23ebeae5c0..ee847a3cd71a6a0868bb1115b5b05348cfc54cff 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
@@ -71,8 +71,10 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.IHibernateSearchDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IRoleAssignmentDAO;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.HibernateSearchDataProvider;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.DynamicPropertyEvaluator;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.IDynamicPropertyEvaluator;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.calculator.DynamicPropertyCalculator;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.calculator.EntityAdaptorFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.calculator.IEntityAdaptor;
 import ch.systemsx.cisd.openbis.generic.server.plugin.IDataSetTypeSlaveServerPlugin;
 import ch.systemsx.cisd.openbis.generic.server.util.GroupIdentifierHelper;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicEntityInformationHolder;
@@ -2059,8 +2061,9 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
         {
             DynamicPropertyCalculator calculator =
                     DynamicPropertyCalculator.create(info.getScript());
-            calculator.setEntity(EntityAdaptorFactory
-                    .create(entity, new DynamicPropertyEvaluator()));
+            IDynamicPropertyEvaluator evaluator = new DynamicPropertyEvaluator(getDAOFactory());
+            IEntityAdaptor adaptor = EntityAdaptorFactory.create(entity, evaluator);
+            calculator.setEntity(adaptor);
             return calculator.evalAsString();
         } catch (Throwable e)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DefaultBatchDynamicPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DefaultBatchDynamicPropertyEvaluator.java
index d444b36f6a9dedf43114b27bc4164a9a50828d87..06f8bb4e04f22d05f20372e15fe17d69cffd635e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DefaultBatchDynamicPropertyEvaluator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DefaultBatchDynamicPropertyEvaluator.java
@@ -33,6 +33,7 @@ import org.springframework.dao.DataAccessException;
 
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExternalDataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder;
@@ -66,10 +67,18 @@ final class DefaultBatchDynamicPropertyEvaluator implements IBatchDynamicPropert
 
     private final int batchSize;
 
-    DefaultBatchDynamicPropertyEvaluator(final int batchSize)
+    private final IDAOFactory daoFactory;
+
+    DefaultBatchDynamicPropertyEvaluator(final int batchSize, IDAOFactory daoFactory)
     {
         assert batchSize > -1 : "Batch size can not be negative.";
         this.batchSize = batchSize;
+        this.daoFactory = daoFactory;
+    }
+
+    private DynamicPropertyEvaluator createEvaluator()
+    {
+        return new DynamicPropertyEvaluator(daoFactory);
     }
 
     //
@@ -82,7 +91,7 @@ final class DefaultBatchDynamicPropertyEvaluator implements IBatchDynamicPropert
         operationLog.info(String.format("Evaluating dynamic properties for all %ss...",
                 clazz.getSimpleName()));
 
-        final IDynamicPropertyEvaluator evaluator = new DynamicPropertyEvaluator();
+        final IDynamicPropertyEvaluator evaluator = createEvaluator();
 
         Transaction transaction = null;
         try
@@ -137,7 +146,7 @@ final class DefaultBatchDynamicPropertyEvaluator implements IBatchDynamicPropert
         operationLog.info(String.format("Evaluating dynamic properties for %ss...",
                 clazz.getSimpleName()));
 
-        final IDynamicPropertyEvaluator evaluator = new DynamicPropertyEvaluator();
+        final IDynamicPropertyEvaluator evaluator = createEvaluator();
 
         Transaction transaction = null;
         try
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluationRunnable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluationRunnable.java
index 27ac5ae5671941776add531213915435106c0c9d..6db9d24fb72224873a9abb6393e1771eae965713 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluationRunnable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluationRunnable.java
@@ -30,6 +30,7 @@ import ch.systemsx.cisd.common.collections.ExtendedBlockingQueueFactory;
 import ch.systemsx.cisd.common.collections.IExtendedBlockingQueue;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation;
 import ch.systemsx.cisd.openbis.generic.shared.dto.IEntityInformationWithPropertiesHolder;
@@ -59,11 +60,12 @@ public final class DynamicPropertyEvaluationRunnable extends HibernateDaoSupport
     private final IFullTextIndexUpdateScheduler fullTextIndexUpdateScheduler;
 
     public DynamicPropertyEvaluationRunnable(final SessionFactory sessionFactory,
+            final IDAOFactory daoFactory,
             final IFullTextIndexUpdateScheduler fullTextIndexUpdateScheduler)
     {
         this.fullTextIndexUpdateScheduler = fullTextIndexUpdateScheduler;
         setSessionFactory(sessionFactory);
-        evaluator = new DefaultBatchDynamicPropertyEvaluator(BATCH_SIZE);
+        evaluator = new DefaultBatchDynamicPropertyEvaluator(BATCH_SIZE, daoFactory);
 
         final File queueFile = getEvaluatorQueueFile();
         operationLog.info(String.format("Evaluator queue file: %s.", queueFile.getAbsolutePath()));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluator.java
index bd532f7e3b32c512c07b40b4bb578790a50a1b09..fe956bbf3b9a363d20bdc9ecd47fea206bbba95f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluator.java
@@ -25,6 +25,7 @@ import org.apache.log4j.Logger;
 
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IPropertyValueValidator;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.PropertyValidator;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.calculator.DynamicPropertyCalculator;
@@ -59,6 +60,14 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator
     private final List<EntityTypePropertyTypePE> evaluationPath =
             new ArrayList<EntityTypePropertyTypePE>();
 
+    private final IDAOFactory daoFactory;
+
+    public DynamicPropertyEvaluator(IDAOFactory daoFactory)
+    {
+        assert daoFactory != null;
+        this.daoFactory = daoFactory;
+    }
+
     /** Returns a calculator for given script (creates a new one if nothing is found in cache). */
     private DynamicPropertyCalculator getCalculator(ScriptPE scriptPE)
     {
@@ -87,7 +96,14 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator
             if (etpt.isDynamic())
             {
                 final String dynamicValue = evaluateProperty(entityAdaptor, etpt, true);
-                property.setValue(dynamicValue);
+
+                if (dynamicValue.startsWith(BasicConstant.ERROR_PROPERTY_PREFIX))
+                {
+                    property.setValue(dynamicValue);
+                } else
+                {
+                    property.setUntypedValue(dynamicValue, null, null);
+                }
             }
         }
     }
@@ -102,7 +118,7 @@ public class DynamicPropertyEvaluator implements IDynamicPropertyEvaluator
         return evaluateProperty(entityAdaptor, etpt, false);
     }
 
-    public String evaluateProperty(IEntityAdaptor entityAdaptor, EntityTypePropertyTypePE etpt,
+    private String evaluateProperty(IEntityAdaptor entityAdaptor, EntityTypePropertyTypePE etpt,
             boolean startPath)
     {
         assert etpt.isDynamic() == true : "expected dynamic property";
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluatorDbTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluatorDbTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..48841b537e0e8020a3b010c497d065fb8ea537b2
--- /dev/null
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluatorDbTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2009 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property;
+
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.AbstractDAOTest;
+
+/**
+ * @author Piotr Buczek
+ */
+@Test(groups = "db")
+public class DynamicPropertyEvaluatorDbTest extends AbstractDAOTest
+{
+
+    DynamicPropertyEvaluator evaluator;
+
+    @BeforeMethod
+    public void beforeClass() throws Exception
+    {
+        evaluator = new DynamicPropertyEvaluator(daoFactory);
+    }
+
+}
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluatorTest.java
index 4658bfbc16e57ef0748fad73ed11bd8e56ab5d00..6e8d78a817a44189db4f2c5d5b66cafc73983cf4 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluatorTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/dynamic_property/DynamicPropertyEvaluatorTest.java
@@ -22,9 +22,12 @@ import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
+import org.jmock.Mockery;
 import org.testng.AssertJUnit;
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.calculator.AbstractEntityAdaptor;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.calculator.BasicPropertyAdaptor;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.dynamic_property.calculator.IEntityAdaptor;
@@ -43,15 +46,24 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.ScriptPE;
 /**
  * @author Piotr Buczek
  */
-// TODO 2010-11-19, Piotr Buczek: extend AbstractDAOTest
 public class DynamicPropertyEvaluatorTest extends AssertJUnit
 {
 
+    private DynamicPropertyEvaluator evaluator;
+
+    private IDAOFactory daoFactory;
+
+    @BeforeMethod
+    public void setUp()
+    {
+        daoFactory = new Mockery().mock(IDAOFactory.class);
+        evaluator = new DynamicPropertyEvaluator(daoFactory);
+    }
+
     @Test
     public void testEvaluateProperty()
     {
         // test evaluation of a single dynamic property
-        final DynamicPropertyEvaluator evaluator = new DynamicPropertyEvaluator();
 
         IEntityPropertyAdaptor p1 = createProperty("p1", "v1");
         IEntityPropertyAdaptor p2 = createProperty("p2", "v2");
@@ -78,7 +90,6 @@ public class DynamicPropertyEvaluatorTest extends AssertJUnit
         // - error handling (error messages are stored as property values)
         // -- storing validation error when script evaluates to string instead of expected integer
         // -- storing python error when script tries to invoke nonexisting method
-        final DynamicPropertyEvaluator evaluator = new DynamicPropertyEvaluator();
 
         Set<SamplePropertyPE> properties = new HashSet<SamplePropertyPE>();
         // create normal properties
@@ -130,7 +141,6 @@ public class DynamicPropertyEvaluatorTest extends AssertJUnit
     {
         // check evaluation of dynamic properties that depend on other dynamic properties
         // (with and without cyclic dependencies)
-        final DynamicPropertyEvaluator evaluator = new DynamicPropertyEvaluator();
 
         final SamplePropertyPE p1 = createSampleProperty("p1", "v1"); // normal property
         final ScriptPE scriptP1 = createScript("get p1", "entity.propertyValue('p1')");