diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSDatasetUploader.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSDatasetUploader.java
index 48063b947adce612ed95fd2df53a39301ba8f0ce..ce64fe2ca038bac48f22e900ab134c06a3728a0f 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSDatasetUploader.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSDatasetUploader.java
@@ -42,7 +42,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConst
 /**
  * @author Tomasz Pylak
  */
-class HCSDatasetUploader
+public class HCSDatasetUploader
 {
     public static void upload(IImagingUploadDAO dao, ScreeningContainerDatasetInfo info,
             List<AcquiredPlateImage> images, Set<HCSImageFileExtractionResult.Channel> channels)
@@ -132,17 +132,17 @@ class HCSDatasetUploader
             throw createInvalidNewChannelException(expId, existingChannels, channelName);
         }
         // a channel with a specified name already exists for an experiment, its description
-            // will be updated
+        // will be updated
         if (existingChannel.getWavelength().equals(channelDTO.getWavelength()) == false)
-            {
+        {
             throw UserFailureException.fromTemplate(
-                                "There are already datasets registered for the experiment "
-                                        + "which use the same channel name, but with a different wavelength! "
+                    "There are already datasets registered for the experiment "
+                            + "which use the same channel name, but with a different wavelength! "
                             + "Channel %s, old wavelength %d, new wavelength %d.", channelName,
                     existingChannel.getWavelength(), channelDTO.getWavelength());
-            }
-            channelDTO.setId(existingChannel.getId());
-            dao.updateChannel(channelDTO);
+        }
+        channelDTO.setId(existingChannel.getId());
+        dao.updateChannel(channelDTO);
         return channelDTO;
     }
 
@@ -158,18 +158,18 @@ class HCSDatasetUploader
     }
 
     private ImgChannelDTO createChannel(long expId, HCSImageFileExtractionResult.Channel channel)
-        {
+    {
         ImgChannelDTO channelDTO = makeChannelDTO(channel, expId);
-            long channelId = dao.addChannel(channelDTO);
-            channelDTO.setId(channelId);
+        long channelId = dao.addChannel(channelDTO);
+        channelDTO.setId(channelId);
         return channelDTO;
     }
 
     private static ImgChannelDTO makeChannelDTO(HCSImageFileExtractionResult.Channel channel,
             long expId)
     {
-        return ImgChannelDTO.createExperimentChannel(channel.getName(), channel.getDescription(),
-                channel.getWavelength(), expId);
+        return ImgChannelDTO.createExperimentChannel(channel.getName(), channel.tryGetDescription(),
+                channel.tryGetWavelength(), expId);
     }
 
     private static class AcquiredImageInStack
@@ -330,14 +330,14 @@ class HCSDatasetUploader
                 ScreeningConstants.OLIGO_WELL_TYPE_CODE);
     }
 
-    String createCoordinate(ImgSpotDTO spot)
+    private static String createCoordinate(ImgSpotDTO spot)
     {
         return Location.tryCreateMatrixCoordinateFromLocation(new Location(spot.getColumn(), spot
                 .getRow()));
     }
 
-    private static Boolean[][] extractNewSpots(int rows, int columns, List<AcquiredPlateImage> images,
-            List<ImgSpotDTO> existingSpots)
+    private static Boolean[][] extractNewSpots(int rows, int columns,
+            List<AcquiredPlateImage> images, List<ImgSpotDTO> existingSpots)
     {
         Boolean[][] spots = extractExistingSpots(rows, columns, images);
         unmarkSpots(existingSpots, spots);
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageFileExtractionResult.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageFileExtractionResult.java
index 25d3cd0ece4d0c2d710d7b944170136e848d52d9..5144c71ff54df321ef0c6a3f62cb7f9fc652c83b 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageFileExtractionResult.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/HCSImageFileExtractionResult.java
@@ -72,14 +72,14 @@ public final class HCSImageFileExtractionResult
 
         private final String description;
 
-        private final int wavelength;
+        private final Integer wavelength;
 
-        public Channel(String name, String description, int wavelength)
+        public Channel(String name, String descriptionOrNull, Integer wavelengthOrNull)
         {
             assert name != null : "name is null";
             this.name = name;
-            this.description = description;
-            this.wavelength = wavelength;
+            this.description = descriptionOrNull;
+            this.wavelength = wavelengthOrNull;
         }
 
         public String getName()
@@ -87,12 +87,12 @@ public final class HCSImageFileExtractionResult
             return name;
         }
 
-        public String getDescription()
+        public String tryGetDescription()
         {
             return description;
         }
 
-        public int getWavelength()
+        public Integer tryGetWavelength()
         {
             return wavelength;
         }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PlateStorageProcessor.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PlateStorageProcessor.java
index 1f549d6f7af962b3a7dcbc782cab34fa0a94ac25..261d03e4891c38d24dc18291de33ceca21a96037 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PlateStorageProcessor.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/PlateStorageProcessor.java
@@ -130,13 +130,13 @@ public final class PlateStorageProcessor extends AbstractStorageProcessor
         this.currentTransaction = null;
     }
 
-    private static String[] extractChannelNames(Properties properties)
+    public static String[] extractChannelNames(Properties properties)
     {
         String names = PropertyUtils.getMandatoryProperty(properties, CHANNEL_NAMES);
         String[] channelNames = names.split(CHANNEL_SEPARATOR);
         for (int i = 0; i < channelNames.length; i++)
         {
-            channelNames[i] = channelNames[i].trim();
+            channelNames[i] = channelNames[i].trim().toLowerCase();
         }
         return channelNames;
     }
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ScreeningContainerDatasetInfo.java b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ScreeningContainerDatasetInfo.java
index 8c2de3f9987c3f2ca76926c96028eba4e978c0da..33b0b20009890aeace71d106fb95b4d7a0bbf29b 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ScreeningContainerDatasetInfo.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/dss/etl/ScreeningContainerDatasetInfo.java
@@ -21,7 +21,7 @@ package ch.systemsx.cisd.openbis.dss.etl;
  * 
  * @author Tomasz Pylak
  */
-class ScreeningContainerDatasetInfo
+public class ScreeningContainerDatasetInfo
 {
     private String experimentPermId;