diff --git a/screening/sourceTest/core-plugins/AggregatedFeatureVectorsV2Test/1/dss/reporting-plugins/example-screening-jython-db-modifying-aggregation-service/plugin.properties b/screening/sourceTest/core-plugins/AggregatedFeatureVectorsV2Test/1/dss/reporting-plugins/example-screening-jython-db-modifying-aggregation-service/plugin.properties
new file mode 100644
index 0000000000000000000000000000000000000000..bc318b3ee39239929ac8845ab1cede27033f7c93
--- /dev/null
+++ b/screening/sourceTest/core-plugins/AggregatedFeatureVectorsV2Test/1/dss/reporting-plugins/example-screening-jython-db-modifying-aggregation-service/plugin.properties
@@ -0,0 +1,3 @@
+label = Test Screening Db Modifying Jython Aggregation Reporting
+class = ch.systemsx.cisd.openbis.dss.screening.server.plugins.jython.ScreeningJythonBasedDbModifyingAggregationServiceReportingPlugin
+script-path = script.py
\ No newline at end of file
diff --git a/screening/sourceTest/core-plugins/AggregatedFeatureVectorsV2Test/1/dss/reporting-plugins/example-screening-jython-db-modifying-aggregation-service/script.py b/screening/sourceTest/core-plugins/AggregatedFeatureVectorsV2Test/1/dss/reporting-plugins/example-screening-jython-db-modifying-aggregation-service/script.py
new file mode 100644
index 0000000000000000000000000000000000000000..facf1b55cafd31cd4462b8e9030da79dd344a5f5
--- /dev/null
+++ b/screening/sourceTest/core-plugins/AggregatedFeatureVectorsV2Test/1/dss/reporting-plugins/example-screening-jython-db-modifying-aggregation-service/script.py
@@ -0,0 +1,88 @@
+from ch.systemsx.cisd.openbis.dss.etl.dto.api.v2 import SimpleFeatureVectorDataConfig 
+
+PLATE_GEOMETRY_PROPERTY_CODE = "$PLATE_GEOMETRY"
+PLATE_GEOMETRY = "384_WELLS_16X24"
+
+def create_experiment(tr):
+  space = tr.getSpace("TEST")
+  if space == None:
+      space = tr.createNewSpace("TEST", "etlserver")
+  project = tr.getProject("/TEST/TEST-PROJECT")
+  if project == None:
+      project = tr.createNewProject("/TEST/TEST-PROJECT")
+  expid = "/TEST/TEST-PROJECT/AGGREGATED_FEATURES_EXP"
+
+  exp = tr.createNewExperiment(expid, 'SIRNA_HCS')
+  exp.setPropertyValue("DESCRIPTION", "Test experiment")
+    
+  return exp
+
+def create_plate(tr, experiment, plateCode, gene):
+  plateId = "/TEST/" + plateCode
+  plate = tr.createNewSample(plateId, 'PLATE')
+  plate.setPropertyValue(PLATE_GEOMETRY_PROPERTY_CODE, PLATE_GEOMETRY)
+  plate.setExperiment(experiment)
+
+  wellA1 = tr.createNewSample(plate.getSampleIdentifier() + ":A1", "SIRNA_WELL")
+  wellA1.setPropertyValue("GENE", gene.getMaterialIdentifier())
+  wellA1.setContainer(plate)
+
+  wellA2 = tr.createNewSample(plate.getSampleIdentifier() + ":A2", "SIRNA_WELL")
+  wellA2.setPropertyValue("GENE", gene.getMaterialIdentifier())
+  wellA2.setContainer(plate)
+
+  return plate
+
+
+def create_analysis_data_set(tr, plate, config, analysis_procedure, ds_file):
+  analysis_data_set = tr.createNewFeatureVectorDataSet(config, None)
+  analysis_data_set.setSample(plate)
+  analysis_data_set.setAnalysisProcedure(analysis_procedure)
+  tr.createNewFile(analysis_data_set, ds_file)
+
+def create_dataset_with_features1(tr, experiment, gene):
+  plate1 = create_plate(tr, experiment, "PLATE1", gene)
+  config = SimpleFeatureVectorDataConfig()
+  builder = config.featuresBuilder
+
+  featureX = builder.defineFeature("X")
+  featureX.addValue(1, 1, "1")
+  featureX.addValue(1, 2, "2")
+
+  featureY = builder.defineFeature("Y")
+  featureY.addValue(1, 1, "3")
+  featureY.addValue(1, 2, "2")
+
+  create_analysis_data_set(tr, plate1, config, "p1", "data-set-1.csv")    
+
+def create_dataset_with_features2(tr, experiment, gene):
+  plate2 = create_plate(tr, experiment, "PLATE2", gene)
+  config = SimpleFeatureVectorDataConfig()
+  builder = config.featuresBuilder
+
+  featureA = builder.defineFeature("A")
+  featureA.addValue(1, 1, "10")
+  featureA.addValue(1, 2, "20")
+
+  featureB = builder.defineFeature("B")
+  featureB.addValue(1, 1, "2")
+  featureB.addValue(1, 2, "NaN")
+
+  featureX = builder.defineFeature("X")
+  featureX.addValue(1, 1, "5")
+  featureX.addValue(1, 2, "6")
+
+  create_analysis_data_set(tr, plate2, config, "p2", "data-set-2.file")    
+
+def process(transaction, parameters, tableBuilder):
+  experiment = create_experiment(transaction)
+  geneCode = "G"
+  geneG = transaction.createNewMaterial(geneCode, "GENE") 
+  create_dataset_with_features1(transaction, experiment, geneG)
+  create_dataset_with_features2(transaction, experiment, geneG)
+  
+  tableBuilder.addHeader("CODE")  
+  tableBuilder.addHeader("IDENTIFIER")
+  row = tableBuilder.addRow()
+  row.setCell("CODE", geneCode)
+  row.setCell("IDENTIFIER", geneCode)
diff --git a/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AggregationServiceAggregatedFeatureVectorsTest.java b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AggregationServiceAggregatedFeatureVectorsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1bbbbceb663d00dcb4e0860cb9d0189dafa2e972
--- /dev/null
+++ b/screening/sourceTest/java/ch/systemsx/cisd/openbis/screening/systemtests/AggregationServiceAggregatedFeatureVectorsTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.screening.systemtests;
+
+import java.util.HashMap;
+
+import org.springframework.mock.web.MockHttpServletRequest;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.common.servlet.SpringRequestContextProvider;
+import ch.systemsx.cisd.openbis.plugin.query.server.api.v1.ResourceNames;
+import ch.systemsx.cisd.openbis.plugin.query.shared.api.v1.IQueryApiServer;
+import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.IScreeningClientService;
+
+/**
+ * @author Chandrasekhar Ramakrishnan
+ */
+@Test(groups =
+    { "slow", "systemtest" })
+public class AggregationServiceAggregatedFeatureVectorsTest extends AbstractScreeningSystemTestCase
+{
+    private IQueryApiServer queryApi;
+
+    private IScreeningClientService screeningClientService;
+
+    private MockHttpServletRequest request;
+
+    private String sessionToken;
+
+    @BeforeMethod
+    public void setUp() throws Exception
+    {
+        screeningClientService =
+                (IScreeningClientService) applicationContext
+                        .getBean(ch.systemsx.cisd.openbis.plugin.screening.shared.ResourceNames.SCREENING_PLUGIN_SERVICE);
+        request = new MockHttpServletRequest();
+        ((SpringRequestContextProvider) applicationContext.getBean("request-context-provider"))
+                .setRequest(request);
+        sessionToken = screeningClientService.tryToLogin("admin", "a").getSessionID();
+    }
+
+    @Test
+    public void testRegisteringFeatureVectors() throws Exception
+    {
+        queryApi = (IQueryApiServer) applicationContext.getBean(ResourceNames.QUERY_PLUGIN_SERVER);
+        queryApi.createReportFromAggregationService(sessionToken, "DSS-SCREENING",
+                "example-screening-jython-db-modifying-aggregation-service",
+                new HashMap<String, Object>());
+    }
+
+}