diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/IImagingDataSetRegistrationTransactionV2.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/IImagingDataSetRegistrationTransactionV2.java
new file mode 100644
index 0000000000000000000000000000000000000000..df5939b0cb690e1c3cebadf59b86f57ee9ba7773
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/IImagingDataSetRegistrationTransactionV2.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2012 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.dss.etl.jython.v2;
+
+import java.io.File;
+
+import ch.systemsx.cisd.etlserver.registrator.api.v2.IDataSetRegistrationTransactionV2;
+import ch.systemsx.cisd.openbis.dss.etl.dto.api.v1.IImageDataSet;
+import ch.systemsx.cisd.openbis.dss.etl.dto.api.v1.SimpleImageDataConfig;
+
+/**
+ * 
+ *
+ * @author Jakub Straszewski
+ */
+public interface IImagingDataSetRegistrationTransactionV2 extends
+ IDataSetRegistrationTransactionV2
+{
+    /**
+     * Creates a new image dataset. See {@link SimpleImageDataConfig} documentation for
+     * configuration details.
+     */
+    IImageDataSet createNewImageDataSet(SimpleImageDataConfig imageDataSet,
+            File incomingFolderWithImages);
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransactionV2Delegate.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransactionV2Delegate.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3fb113dd72e3e0a58b7fc5868d6a503f0baff56
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/ImagingDataSetRegistrationTransactionV2Delegate.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2012 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.dss.etl.jython.v2;
+
+import java.io.File;
+
+import net.lemnik.eodsql.DynamicTransactionQuery;
+
+import ch.systemsx.cisd.etlserver.TopLevelDataSetRegistratorGlobalState;
+import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationPersistentMap;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSet;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetUpdatable;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.IExperiment;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.IMaterial;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.IProject;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.ISample;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.ISpace;
+import ch.systemsx.cisd.openbis.dss.etl.dto.api.v1.IImageDataSet;
+import ch.systemsx.cisd.openbis.dss.etl.dto.api.v1.SimpleImageDataConfig;
+import ch.systemsx.cisd.openbis.dss.etl.jython.ImagingDataSetRegistrationTransaction;
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IDataSetImmutable;
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IExperimentImmutable;
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IMaterialImmutable;
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.IProjectImmutable;
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISampleImmutable;
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISearchService;
+import ch.systemsx.cisd.openbis.dss.generic.shared.api.internal.v1.ISpaceImmutable;
+
+/**
+ * @author Jakub Straszewski
+ */
+public class ImagingDataSetRegistrationTransactionV2Delegate implements
+        IImagingDataSetRegistrationTransactionV2
+{
+    public ImagingDataSetRegistrationTransactionV2Delegate(
+            ImagingDataSetRegistrationTransaction transaction)
+    {
+        this.transaction = transaction;
+    }
+
+    private final ImagingDataSetRegistrationTransaction transaction;
+
+    @Override
+    public IImageDataSet createNewImageDataSet(SimpleImageDataConfig imageDataSet,
+            File incomingFolderWithImages)
+    {
+        return transaction.createNewImageDataSet(imageDataSet, incomingFolderWithImages);
+    }
+
+    @Override
+    public IDataSet createNewDataSet()
+    {
+        return transaction.createNewDataSet();
+    }
+
+    @Override
+    public IDataSet createNewDataSet(String dataSetType)
+    {
+        return transaction.createNewDataSet(dataSetType);
+    }
+
+    @Override
+    public IDataSet createNewDataSet(String dataSetType, String dataSetCode)
+    {
+        return transaction.createNewDataSet(dataSetType, dataSetCode);
+    }
+
+    @Override
+    public IDataSetImmutable getDataSet(String dataSetCode)
+    {
+        return transaction.getDataSet(dataSetCode);
+    }
+
+    @Override
+    public IDataSetUpdatable getDataSetForUpdate(String dataSetCode)
+    {
+        return transaction.getDataSetForUpdate(dataSetCode);
+    }
+
+    @Override
+    public IDataSetUpdatable makeDataSetMutable(IDataSetImmutable dataSet)
+    {
+        return transaction.makeDataSetMutable(dataSet);
+    }
+
+    @Override
+    public ISampleImmutable getSample(String sampleIdentifierString)
+    {
+        return transaction.getSample(sampleIdentifierString);
+    }
+
+    @Override
+    public ISample getSampleForUpdate(String sampleIdentifierString)
+    {
+        return transaction.getSampleForUpdate(sampleIdentifierString);
+    }
+
+    @Override
+    public ISample makeSampleMutable(ISampleImmutable sample)
+    {
+        return transaction.makeSampleMutable(sample);
+    }
+
+    @Override
+    public ISample createNewSample(String sampleIdentifierString, String sampleTypeCode)
+    {
+        return transaction.createNewSample(sampleIdentifierString, sampleTypeCode);
+    }
+
+    @Override
+    public IExperimentImmutable getExperiment(String experimentIdentifierString)
+    {
+        return transaction.getExperiment(experimentIdentifierString);
+    }
+
+    @Override
+    public IExperiment getExperimentForUpdate(String experimentIdentifierString)
+    {
+        return transaction.getExperimentForUpdate(experimentIdentifierString);
+    }
+
+    @Override
+    public IExperiment createNewExperiment(String experimentIdentifierString,
+            String experimentTypeCode)
+    {
+        return transaction.createNewExperiment(experimentIdentifierString, experimentTypeCode);
+    }
+
+    @Override
+    public IProject createNewProject(String projectIdentifier)
+    {
+        return transaction.createNewProject(projectIdentifier);
+    }
+
+    @Override
+    public IProjectImmutable getProject(String projectIdentifier)
+    {
+        return transaction.getProject(projectIdentifier);
+    }
+
+    @Override
+    public ISpace createNewSpace(String spaceCode, String spaceAdminUserIdOrNull)
+    {
+        return transaction.createNewSpace(spaceCode, spaceAdminUserIdOrNull);
+    }
+
+    @Override
+    public ISpaceImmutable getSpace(String spaceCode)
+    {
+        return transaction.getSpace(spaceCode);
+    }
+
+    @Override
+    public IMaterialImmutable getMaterial(String materialCode, String materialType)
+    {
+        return transaction.getMaterial(materialCode, materialType);
+    }
+
+    @Override
+    public IMaterial createNewMaterial(String materialCode, String materialType)
+    {
+        return transaction.createNewMaterial(materialCode, materialType);
+    }
+
+    @Override
+    public String moveFile(String src, IDataSet dst)
+    {
+        return transaction.moveFile(src, dst);
+    }
+
+    @Override
+    public String moveFile(String src, IDataSet dst, String dstInDataset)
+    {
+        return transaction.moveFile(src, dst, dstInDataset);
+    }
+
+    @Override
+    public String createNewDirectory(IDataSet dst, String dirName)
+    {
+        return transaction.createNewDirectory(dst, dirName);
+    }
+
+    @Override
+    public String createNewFile(IDataSet dst, String fileName)
+    {
+        return transaction.createNewFile(dst, fileName);
+    }
+
+    @Override
+    public String createNewFile(IDataSet dst, String dstInDataset, String fileName)
+    {
+        return transaction.createNewFile(dst, dstInDataset, fileName);
+    }
+
+    @Override
+    public ISearchService getSearchService()
+    {
+        return transaction.getSearchService();
+    }
+
+    @Override
+    public DynamicTransactionQuery getDatabaseQuery(String dataSourceName)
+            throws IllegalArgumentException
+    {
+        return transaction.getDatabaseQuery(dataSourceName);
+    }
+
+    @Override
+    public DataSetRegistrationPersistentMap getRegistrationContext()
+    {
+        return transaction.getRegistrationContext();
+    }
+
+    @Override
+    public TopLevelDataSetRegistratorGlobalState getGlobalState()
+    {
+        return transaction.getGlobalState();
+    }
+
+    @Override
+    public File getIncoming()
+    {
+        return transaction.getIncoming();
+    }
+
+}
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/JythonPlateDataSetHandlerV2.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/JythonPlateDataSetHandlerV2.java
index 21336ee67c0c1f6c28df1de1febeff7d9c1f1e0b..3445ee6d0f90890d505ed06f0703236ea218271d 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/JythonPlateDataSetHandlerV2.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/jython/v2/JythonPlateDataSetHandlerV2.java
@@ -27,7 +27,9 @@ import ch.systemsx.cisd.etlserver.TopLevelDataSetRegistratorGlobalState;
 import ch.systemsx.cisd.etlserver.registrator.DataSetFile;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationService;
 import ch.systemsx.cisd.etlserver.registrator.IDataSetRegistrationDetailsFactory;
+import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetRegistrationTransaction;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.DataSetRegistrationTransaction;
+import ch.systemsx.cisd.etlserver.registrator.api.v2.IDataSetRegistrationTransactionV2;
 import ch.systemsx.cisd.etlserver.registrator.api.v2.JythonDataSetRegistrationServiceV2;
 import ch.systemsx.cisd.etlserver.registrator.api.v2.JythonTopLevelDataSetHandlerV2;
 import ch.systemsx.cisd.etlserver.registrator.recovery.AutoRecoverySettings;
@@ -92,4 +94,12 @@ public class JythonPlateDataSetHandlerV2 extends JythonTopLevelDataSetHandlerV2<
                 }
             };
     }
+
+    @Override
+    protected IDataSetRegistrationTransactionV2 wrapTransaction(
+            IDataSetRegistrationTransaction transaction)
+    {
+        return new ImagingDataSetRegistrationTransactionV2Delegate(
+                (ImagingDataSetRegistrationTransaction) transaction);
+    }
 }
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/dropbox/hcs-simple-test.py b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/dropbox/hcs-simple-test.py
index e420301432a60407f7c447499387dea481432497..4e760cacd0ec2c5fb01f81a8c92e48718b7c343d 100644
--- a/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/dropbox/hcs-simple-test.py
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/dss/screening/server/dropbox/hcs-simple-test.py
@@ -57,15 +57,15 @@ class MyImageDataSetConfig(SimpleImageDataConfig):
     def getTileGeometry(self, imageTokens, maxTileNumber):
         return Geometry.createFromRowColDimensions(maxTileNumber / 3, 3)    
 
-def process():
+def process(transaction):
+  incoming = transaction.getIncoming()
   if incoming.isDirectory():
     imageDataset = MyImageDataSetConfig()
     imageDataset.setRawImageDatasetType()
     imageDataset.setGenerateThumbnails(True)
     imageDataset.setUseImageMagicToGenerateThumbnails(False)
     imageDataset.setPlate(SPACE_CODE, PLATE_CODE)
-    registrationDetails = factory.createImageRegistrationDetails(imageDataset, incoming)  
     plate = create_plate_if_needed(transaction)
-    dataset = transaction.createNewDataSet(registrationDetails);
+    dataset = transaction.createNewImageDataSet(imageDataset, incoming);
     dataset.setSample(plate)
     transaction.moveFile(incoming.getPath(), dataset);