diff --git a/integration-tests/templates/data-ibrain2/scripts/commonDropbox.py b/integration-tests/templates/data-ibrain2/scripts/commonDropbox.py
index 75ae339ff3c67c35f8d3ab60246940c0ce692aa6..c6ddb2ffa478b74b2738ffadbd24f921c92fb68c 100755
--- a/integration-tests/templates/data-ibrain2/scripts/commonDropbox.py
+++ b/integration-tests/templates/data-ibrain2/scripts/commonDropbox.py
@@ -184,7 +184,7 @@ class RegistrationConfirmationUtils:
 
 # --------------
 
-def setPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory):
+def setImageDatasetPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory):
     imageRegistrationDetails = factory.createImageRegistrationDetails(imageDataset, incoming)
     for propertyCode, value in metadataParser.getDatasetPropertiesIter():
         imageRegistrationDetails.setPropertyValue(propertyCode, value)
@@ -193,11 +193,31 @@ def setPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, inc
     dataset = tr.createNewDataSet(imageRegistrationDetails)
     dataset.setParentDatasets([metadataParser.getParentDatasetPermId()])
     imageDataSetFolder = tr.moveFile(incoming.getPath(), dataset)
-    ok = tr.commit()
-    if ok:
-		print "success", iBrain2DatasetId
+    if tr.commit():
 		createSuccessStatus(iBrain2DatasetId, dataset, incoming.getPath())
+
+def registerDerivedBlackBoxDataset(state, service, factory, incoming, metadataParser, datasetType, fileFormatType):
+    iBrain2DatasetId = metadataParser.getIBrain2DatasetId()
+    openbisDatasetParent = metadataParser.getParentDatasetPermId()
+
+    (space, plate) = tryGetConnectedPlate(state, openbisDatasetParent, iBrain2DatasetId, incoming.getPath())
+    if plate == None:
+        return
+    transaction = service.transaction(incoming, factory)
     
+    dataset = transaction.createNewDataSet()
+    dataset.setDataSetType(datasetType)
+    dataset.setFileFormatType(fileFormatType)
+    dataset.setSample(transaction.getSample('/'+space+'/'+plate))
+    dataset.setMeasuredData(False)
+    for propertyCode, value in metadataParser.getDatasetPropertiesIter():
+        dataset.setPropertyValue(propertyCode, value)
+    dataset.setParentDatasets([metadataParser.getParentDatasetPermId()])
+
+    transaction.moveFile(incoming.getPath(), dataset)
+    if transaction.commit():
+        createSuccessStatus(iBrain2DatasetId, dataset, incoming.getPath())
+
 """
 Returns:
    (plateSpace, plateCode) tuple for the plate connected with the specified dataset
@@ -214,6 +234,7 @@ def tryGetConnectedPlate(state, openbisDatasetId, iBrain2DatasetId, incomingPath
 			errorMsg = "No plate is connected to the dataset: "+openbisDatasetId+"."
 	else:
 		errorMsg = "Dataset does not exist or is not accessible: "+openbisDatasetId+". Maybe the dataset has not been registered yet. Try again later."
+	print errorMsg
 	RegistrationConfirmationUtils().createFailureStatus(iBrain2DatasetId, errorMsg, incomingPath)
 	return (None, None)
 
diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_csv.py b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_csv.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a3276bb96e4c3c9f038c501d56d9eb33110e95f4 100755
--- a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_csv.py
+++ b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_csv.py
@@ -0,0 +1,19 @@
+#! /usr/bin/env python
+
+import commonImageDropbox
+import commonDropbox
+
+reload(commonImageDropbox)
+reload(commonDropbox)
+
+# Global variable where we set the iBrain2 id of the dataset at the beginning, 
+# so that the rollback can use it as well.
+iBrain2DatasetId = None
+
+def rollback_transaction(service, transaction, algorithmRunner, throwable):
+    commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
+            
+if incoming.isDirectory():
+    metadataParser = commonDropbox.DerivedDatasetMetadataParser(incoming.getPath())
+    iBrain2DatasetId = metadataParser.getIBrain2DatasetId()
+    commonDropbox.registerDerivedBlackBoxDataset(state, service, factory, incoming, metadataParser, 'HCS_ANALYSIS_CELL_FEATURES_CSV', 'CSV')
\ No newline at end of file
diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_mat.py b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_mat.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..aafd2dce1758da6e868e4c6d2076667a9f2238fa 100755
--- a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_mat.py
+++ b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_cell_features_mat.py
@@ -0,0 +1,19 @@
+#! /usr/bin/env python
+
+import commonImageDropbox
+import commonDropbox
+
+reload(commonImageDropbox)
+reload(commonDropbox)
+
+# Global variable where we set the iBrain2 id of the dataset at the beginning, 
+# so that the rollback can use it as well.
+iBrain2DatasetId = None
+
+def rollback_transaction(service, transaction, algorithmRunner, throwable):
+    commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
+
+if incoming.isDirectory():
+    metadataParser = commonDropbox.DerivedDatasetMetadataParser(incoming.getPath())
+    iBrain2DatasetId = metadataParser.getIBrain2DatasetId()
+    commonDropbox.registerDerivedBlackBoxDataset(state, service, factory, incoming, metadataParser, 'HCS_ANALYSIS_CELL_FEATURES_MAT', 'MAT')
diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_quality.py b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_quality.py
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f78ec67e6c3506a3a3ba7ea1a06c7998fe8c805d 100755
--- a/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_quality.py
+++ b/integration-tests/templates/data-ibrain2/scripts/hcs_analysis_well_quality.py
@@ -0,0 +1,37 @@
+#! /usr/bin/env python
+
+import commonImageDropbox
+import commonDropbox
+
+reload(commonImageDropbox)
+reload(commonDropbox)
+
+# Global variable where we set the iBrain2 id of the dataset at the beginning, 
+# so that the rollback can use it as well.
+iBrain2DatasetId = None
+
+def register(incomingPath):
+    metadataParser = commonDropbox.DerivedDatasetMetadataParser(incomingPath)
+    iBrain2DatasetId = metadataParser.getIBrain2DatasetId()
+    openbisDatasetParent = metadataParser.getParentDatasetPermId()
+
+    (space, plate) = commonDropbox.tryGetConnectedPlate(state, openbisDatasetParent, iBrain2DatasetId, incomingPath)
+    if plate == None:
+        return
+    
+    imageDataset = commonImageDropbox.IBrain2ImageDataSetConfig()
+    imageDataset.setOverviewImageDatasetType()
+    imageDataset.setPlate(space, plate)
+    imageDataset.setFileFormatType("JPG")
+    imageDataset.setRecognizedImageExtensions(["jpg", "jpeg", "png", "gif"])    
+    imageDataset.setStoreChannelsOnExperimentLevel(False)
+    imageDataset.setGenerateThumbnails(True)
+    imageDataset.setMaxThumbnailWidthAndHeight(imageDataset.THUMBANAIL_SIZE)
+
+    commonDropbox.setPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory)
+
+def rollback_transaction(service, transaction, algorithmRunner, throwable):
+    commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
+            
+if incoming.isDirectory():
+    register(incoming.getPath())
\ No newline at end of file
diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_image_overview.py b/integration-tests/templates/data-ibrain2/scripts/hcs_image_overview.py
index 40ea989248d019d60f59a70bdbf90a379a2d8d61..500dc57059e20890a77f0965563cc074064a2cf2 100755
--- a/integration-tests/templates/data-ibrain2/scripts/hcs_image_overview.py
+++ b/integration-tests/templates/data-ibrain2/scripts/hcs_image_overview.py
@@ -12,6 +12,7 @@ iBrain2DatasetId = None
 
 def register(incomingPath):
     metadataParser = commonDropbox.DerivedDatasetMetadataParser(incomingPath)
+    global iBrain2DatasetId
     iBrain2DatasetId = metadataParser.getIBrain2DatasetId()
     openbisDatasetParent = metadataParser.getParentDatasetPermId()
 
@@ -28,7 +29,7 @@ def register(incomingPath):
     imageDataset.setGenerateThumbnails(True)
     imageDataset.setMaxThumbnailWidthAndHeight(imageDataset.THUMBANAIL_SIZE)
 
-    commonDropbox.setPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory)
+    commonDropbox.setImageDatasetPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory)
 
 def rollback_transaction(service, transaction, algorithmRunner, throwable):
     commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
diff --git a/integration-tests/templates/data-ibrain2/scripts/hcs_image_segmentation.py b/integration-tests/templates/data-ibrain2/scripts/hcs_image_segmentation.py
index 3f728a455a90e997444ff0cd7f0ca50fb75a2b50..b514027f8a30d12935478509b093be9d96b50feb 100755
--- a/integration-tests/templates/data-ibrain2/scripts/hcs_image_segmentation.py
+++ b/integration-tests/templates/data-ibrain2/scripts/hcs_image_segmentation.py
@@ -33,10 +33,9 @@ def register(incomingPath):
     imageDataset.setStoreChannelsOnExperimentLevel(False)
     imageDataset.setOriginalDataStorageFormat(OriginalDataStorageFormat.HDF5)
   
-    commonDropbox.setPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory)
+    commonDropbox.setImageDatasetPropertiesAndRegister(imageDataset, iBrain2DatasetId, metadataParser, incoming, service, factory)
 
 def rollback_transaction(service, transaction, algorithmRunner, throwable):
-    print 'failure', iBrain2DatasetId
     commonDropbox.createFailureStatus(iBrain2DatasetId, throwable, incoming)
             
 if incoming.isDirectory():