diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/EntitySynchronizer.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/EntitySynchronizer.java
index 76c95d810dfae5764be0929ace774f3488a9175f..cf24d9d655289340726e29f4c558aab53fbef00f 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/EntitySynchronizer.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/EntitySynchronizer.java
@@ -31,7 +31,6 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Properties;
 import java.util.Set;
 
 import org.apache.commons.codec.binary.Hex;
@@ -76,12 +75,16 @@ import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronize
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.ResourceListParserData.MaterialWithLastModificationDate;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.datasourceconnector.DataSourceConnector;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.datasourceconnector.IDataSourceConnector;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor.AttachmentSynchronizationSummary;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor.AttachmentSynchronizationTaskExecutor;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor.DataSetRegistrationTaskExecutor;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor.DataSetSynchronizationSummary;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.translator.INameTranslator;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.translator.PrefixBasedNameTranslator;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util.DSPropertyUtils;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util.V3Utils;
 import ch.systemsx.cisd.cifex.shared.basic.UserFailureException;
-import ch.systemsx.cisd.common.concurrent.ITaskExecutor;
 import ch.systemsx.cisd.common.concurrent.ParallelizedExecutor;
-import ch.systemsx.cisd.common.exceptions.Status;
 import ch.systemsx.cisd.common.filesystem.FileUtilities;
 import ch.systemsx.cisd.common.logging.Log4jSimpleLogger;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.ConversionUtils;
@@ -114,8 +117,6 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Project;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationDetails;
 import ch.systemsx.cisd.openbis.generic.shared.dto.AtomicEntityOperationResult;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetBatchUpdatesDTO;
@@ -633,7 +634,8 @@ public class EntitySynchronizer
         // and the dependencies are established later on in the sync process.
         ParallelizedExecutionPreferences preferences = config.getParallelizedExecutionPrefs();
 
-        ParallelizedExecutor.process(dsList, new DataSetRegistrationTaskExecutor(dataSetSynchronizationSummary),
+        ParallelizedExecutor.process(dsList, new DataSetRegistrationTaskExecutor(dataSetSynchronizationSummary, operationLog, storeRoot, context,
+                config),
                 preferences.getMachineLoad(), preferences.getMaxThreads(), "register data sets", preferences.getRetriesOnFail(),
                 preferences.isStopOnFailure());
 
@@ -1324,62 +1326,6 @@ public class EntitySynchronizer
         return null;
     }
 
-    private final class DataSetRegistrationTaskExecutor implements ITaskExecutor<IncomingDataSet>
-    {
-        private DataSetSynchronizationSummary dsRegistrationSummary;
-
-        public DataSetRegistrationTaskExecutor(DataSetSynchronizationSummary dsRegSummary)
-        {
-            this.dsRegistrationSummary = dsRegSummary;
-        }
-
-        @Override
-        public Status execute(IncomingDataSet dataSet)
-        {
-            Properties props = setProperties();
-
-            DataSetRegistrationIngestionService ingestionService =
-                    new DataSetRegistrationIngestionService(props, storeRoot, dataSet.getDataSet(), operationLog);
-            TableModel resultTable = ingestionService.createAggregationReport(new HashMap<String, Object>(), context);
-            if (resultTable != null)
-            {
-                List<TableModelColumnHeader> headers = resultTable.getHeader();
-                String[] stringArray = new String[headers.size()];
-                for (int i = 0; i < stringArray.length; i++)
-                {
-                    if (headers.get(i).getTitle().startsWith("Error"))
-                    {
-                        String message = resultTable.getRows().get(0).getValues().toString();
-                        dsRegistrationSummary.notRegisteredDataSetCodes.add(dataSet.getDataSet().getCode());
-                        operationLog.error(message);
-                        return Status.createError(message);
-                    }
-                    else if (headers.get(i).getTitle().startsWith("Added"))
-                    {
-                        dsRegistrationSummary.addedDsCount.getAndIncrement();
-                    }
-                    else if (headers.get(i).getTitle().startsWith("Updated"))
-                    {
-                        dsRegistrationSummary.updatedDsCount.getAndIncrement();
-                    }
-                }
-            }
-            return Status.OK;
-        }
-
-        private Properties setProperties()
-        {
-            Properties props = new Properties();
-            props.setProperty("user", EntitySynchronizer.this.config.getUser());
-            props.setProperty("pass", EntitySynchronizer.this.config.getPassword());
-            props.setProperty("as-url", EntitySynchronizer.this.config.getDataSourceOpenbisURL());
-            props.setProperty("dss-url", EntitySynchronizer.this.config.getDataSourceDSSURL());
-            props.setProperty("harvester-temp-dir", EntitySynchronizer.this.config.getHarvesterTempDir());
-            props.setProperty("do-not-create-original-dir", "true");
-            return props;
-        }
-    }
-
     private boolean deepCompareDataSets(String dataSetCode)
             throws NoSuchAlgorithmException, UnsupportedEncodingException
     {
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/ResourceListParserData.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/ResourceListParserData.java
index b7a1220c21c7d1e626dccf89812bdd7906fd4aad..8097f7d399023d8eedf7a2506b5b8de42f6ff047 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/ResourceListParserData.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/ResourceListParserData.java
@@ -189,7 +189,7 @@ public class ResourceListParserData
         return dsMap;
     }
 
-    class IncomingEntity<T extends Identifier<T>>
+    public class IncomingEntity<T extends Identifier<T>>
     {
         private final Identifier<T> entity;
 
@@ -298,7 +298,7 @@ public class ResourceListParserData
         }
     }
 
-    class IncomingDataSet implements Serializable
+    public class IncomingDataSet implements Serializable
     {
         private static final long serialVersionUID = 1L;
         private final NewExternalData dataSet;
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/AttachmentSynchronizationSummary.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/AttachmentSynchronizationSummary.java
similarity index 67%
rename from datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/AttachmentSynchronizationSummary.java
rename to datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/AttachmentSynchronizationSummary.java
index d30f01df7a24d74ca8a078fcf9a971c3019c0205..c93089185d56e93e3def52e59bb177c4ba0b95d7 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/AttachmentSynchronizationSummary.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/AttachmentSynchronizationSummary.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer;
+package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -26,13 +26,13 @@ import java.util.concurrent.atomic.AtomicInteger;
  *
  * @author Ganime Betul Akin
  */
-class AttachmentSynchronizationSummary
+public class AttachmentSynchronizationSummary
 {
-    final List<String> notRegisteredAttachmentHolderCodes = Collections.synchronizedList(new ArrayList<String>());
+    public final List<String> notRegisteredAttachmentHolderCodes = Collections.synchronizedList(new ArrayList<String>());
 
-    final AtomicInteger addedCount = new AtomicInteger(0);
+    public final AtomicInteger addedCount = new AtomicInteger(0);
 
-    final AtomicInteger updatedCount = new AtomicInteger(0);
+    public final AtomicInteger updatedCount = new AtomicInteger(0);
 
-    final AtomicInteger deletedCount = new AtomicInteger(0);
+    public final AtomicInteger deletedCount = new AtomicInteger(0);
 }
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/AttachmentSynchronizationTaskExecutor.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/AttachmentSynchronizationTaskExecutor.java
similarity index 98%
rename from datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/AttachmentSynchronizationTaskExecutor.java
rename to datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/AttachmentSynchronizationTaskExecutor.java
index 323f6627be8cd8122db051a2b0b11488cc4f9f05..24735667cc357fc51bee082a99815202067ee359 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/AttachmentSynchronizationTaskExecutor.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/AttachmentSynchronizationTaskExecutor.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer;
+package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor;
 
 import java.util.ArrayDeque;
 import java.util.ArrayList;
@@ -33,6 +33,7 @@ import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.common.ServiceFinderU
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.common.SyncEntityKind;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.config.SyncConfig;
 import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.ResourceListParserData.IncomingEntity;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util.V3Utils;
 import ch.systemsx.cisd.cifex.shared.basic.UserFailureException;
 import ch.systemsx.cisd.common.concurrent.ITaskExecutor;
 import ch.systemsx.cisd.common.exceptions.Status;
@@ -53,7 +54,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifierF
  *
  * @author Ganime Betul Akin
  */
-final class AttachmentSynchronizationTaskExecutor implements ITaskExecutor<IncomingEntity<?>>
+public final class AttachmentSynchronizationTaskExecutor implements ITaskExecutor<IncomingEntity<?>>
 {
     private final Date lastSyncTimestamp;
 
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetRegistrationIngestionService.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationIngestionService.java
similarity index 97%
rename from datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetRegistrationIngestionService.java
rename to datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationIngestionService.java
index d0e73beb8495803691a3c50ffe60637869260543..bd75844598f1e83a0b02a9a19fc3c64117f3d45c 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetRegistrationIngestionService.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationIngestionService.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer;
+package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor;
 
 import java.io.File;
 import java.io.InputStream;
@@ -39,6 +39,8 @@ import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.download.DataSetFil
 import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.fetchoptions.DataSetFileFetchOptions;
 import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.id.DataSetFilePermId;
 import ch.ethz.sis.openbis.generic.dssapi.v3.dto.datasetfile.id.IDataSetFileId;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util.DSPropertyUtils;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util.V3Utils;
 import ch.systemsx.cisd.common.io.IOUtilities;
 import ch.systemsx.cisd.etlserver.registrator.api.v2.IDataSet;
 import ch.systemsx.cisd.etlserver.registrator.api.v2.IDataSetRegistrationTransactionV2;
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationTaskExecutor.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationTaskExecutor.java
new file mode 100644
index 0000000000000000000000000000000000000000..921ca0a3de99ad75651a95fce22d3345d2f1c0a9
--- /dev/null
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetRegistrationTaskExecutor.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2017 ETH Zuerich, SIS
+ *
+ * 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.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.log4j.Logger;
+
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.config.SyncConfig;
+import ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.ResourceListParserData.IncomingDataSet;
+import ch.systemsx.cisd.common.concurrent.ITaskExecutor;
+import ch.systemsx.cisd.common.exceptions.Status;
+import ch.systemsx.cisd.openbis.dss.generic.shared.DataSetProcessingContext;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader;
+
+/**
+ * 
+ *
+ * @author Ganime Betul Akin
+ */
+public final class DataSetRegistrationTaskExecutor implements ITaskExecutor<IncomingDataSet>
+{
+    private final File storeRoot;
+
+    private final DataSetProcessingContext context;
+
+    private final Logger operationLog;
+
+    private DataSetSynchronizationSummary dsRegistrationSummary;
+
+    private final SyncConfig config;
+
+    public DataSetRegistrationTaskExecutor(DataSetSynchronizationSummary dsRegSummary, Logger operationLog, File storeRoot,
+            DataSetProcessingContext context, SyncConfig config)
+    {
+        this.dsRegistrationSummary = dsRegSummary;
+        this.operationLog = operationLog;
+        this.storeRoot = storeRoot;
+        this.context = context;
+        this.config = config;
+    }
+
+    @Override
+    public Status execute(IncomingDataSet dataSet)
+    {
+        Properties props = setProperties();
+
+        DataSetRegistrationIngestionService ingestionService =
+                new DataSetRegistrationIngestionService(props, storeRoot, dataSet.getDataSet(), operationLog);
+        TableModel resultTable = ingestionService.createAggregationReport(new HashMap<String, Object>(), context);
+        if (resultTable != null)
+        {
+            List<TableModelColumnHeader> headers = resultTable.getHeader();
+            String[] stringArray = new String[headers.size()];
+            for (int i = 0; i < stringArray.length; i++)
+            {
+                if (headers.get(i).getTitle().startsWith("Error"))
+                {
+                    String message = resultTable.getRows().get(0).getValues().toString();
+                    dsRegistrationSummary.notRegisteredDataSetCodes.add(dataSet.getDataSet().getCode());
+                    operationLog.error(message);
+                    return Status.createError(message);
+                }
+                else if (headers.get(i).getTitle().startsWith("Added"))
+                {
+                    dsRegistrationSummary.addedDsCount.getAndIncrement();
+                }
+                else if (headers.get(i).getTitle().startsWith("Updated"))
+                {
+                    dsRegistrationSummary.updatedDsCount.getAndIncrement();
+                }
+            }
+        }
+        return Status.OK;
+    }
+
+    private Properties setProperties()
+    {
+        Properties props = new Properties();
+        props.setProperty("user", config.getUser());
+        props.setProperty("pass", config.getPassword());
+        props.setProperty("as-url", config.getDataSourceOpenbisURL());
+        props.setProperty("dss-url", config.getDataSourceDSSURL());
+        props.setProperty("harvester-temp-dir", config.getHarvesterTempDir());
+        props.setProperty("do-not-create-original-dir", "true");
+        return props;
+    }
+}
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetSynchronizationSummary.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetSynchronizationSummary.java
similarity index 71%
rename from datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetSynchronizationSummary.java
rename to datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetSynchronizationSummary.java
index b0a2c66e0ea408a697b02b786cc1eac58a42dcda..67544bac4d439f7c51d13d345525117af24d32c0 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DataSetSynchronizationSummary.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/parallelizedExecutor/DataSetSynchronizationSummary.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer;
+package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.parallelizedExecutor;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -26,11 +26,11 @@ import java.util.concurrent.atomic.AtomicInteger;
  *
  * @author Ganime Betul Akin
  */
-class DataSetSynchronizationSummary
+public class DataSetSynchronizationSummary
 {
-    final List<String> notRegisteredDataSetCodes = Collections.synchronizedList(new ArrayList<String>());
+    public final List<String> notRegisteredDataSetCodes = Collections.synchronizedList(new ArrayList<String>());
 
-    final AtomicInteger addedDsCount = new AtomicInteger(0);
+    public final AtomicInteger addedDsCount = new AtomicInteger(0);
 
-    final AtomicInteger updatedDsCount = new AtomicInteger(0);
+    public final AtomicInteger updatedDsCount = new AtomicInteger(0);
 }
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DSPropertyUtils.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/util/DSPropertyUtils.java
similarity index 89%
rename from datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DSPropertyUtils.java
rename to datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/util/DSPropertyUtils.java
index e2721b73d57c9ab3eacba839bbcabaa5939a0266..6093c10f917bbbe8cada52ef3ec15db5a2fea173 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/DSPropertyUtils.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/util/DSPropertyUtils.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer;
+package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -32,7 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.NewProperty;
  */
 public class DSPropertyUtils
 {
-    static Set<String> extractPropertyNames(List<NewProperty> dataSetProperties)
+    public static Set<String> extractPropertyNames(List<NewProperty> dataSetProperties)
     {
         Set<String> existingPropertyNames = new HashSet<String>();
         for (NewProperty prop : dataSetProperties)
@@ -42,7 +42,7 @@ public class DSPropertyUtils
         return existingPropertyNames;
     }
 
-    static IEntityProperty[] convertToEntityProperty(List<NewProperty> dataSetProperties)
+    public static IEntityProperty[] convertToEntityProperty(List<NewProperty> dataSetProperties)
     {
         ArrayList<IEntityProperty> list = new ArrayList<IEntityProperty>();
         for (NewProperty prop : dataSetProperties)
diff --git a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/V3Utils.java b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/util/V3Utils.java
similarity index 99%
rename from datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/V3Utils.java
rename to datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/util/V3Utils.java
index 8e75f7d9cd76f31ab8e5c0662817ea342117704e..a8f5d4e012e34d79b4aadb652541a4454e95cf53 100644
--- a/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/V3Utils.java
+++ b/datastore_server/source/java/ch/ethz/sis/openbis/generic/server/dss/plugins/sync/harvester/synchronizer/util/V3Utils.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer;
+package ch.ethz.sis.openbis.generic.server.dss.plugins.sync.harvester.synchronizer.util;
 
 import java.io.InputStream;
 import java.util.Arrays;