diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/transformation/TiffCompressorTransformator.java b/datamover/source/java/ch/systemsx/cisd/datamover/transformation/TiffCompressorTransformator.java
index ca591f08a84ca6ec26fb47ce376a5ff7497320c5..41532d2ac033377162635084bf2624fe0e4dc186 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/transformation/TiffCompressorTransformator.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/transformation/TiffCompressorTransformator.java
@@ -17,18 +17,17 @@
 package ch.systemsx.cisd.datamover.transformation;
 
 import java.io.File;
-import java.util.Arrays;
 import java.util.Properties;
 
 import org.apache.log4j.Logger;
 
-import ch.systemsx.cisd.common.compression.file.ICompressionMethod;
-import ch.systemsx.cisd.common.compression.tiff.TiffCompressor;
-import ch.systemsx.cisd.common.compression.tiff.TiffConvertCompressionMethod;
-import ch.systemsx.cisd.common.compression.tiff.TiffCpCompressionMethod;
+import ch.systemsx.cisd.base.exceptions.InterruptedExceptionUnchecked;
 import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.exceptions.Status;
+import ch.systemsx.cisd.common.fileconverter.FileConverter;
+import ch.systemsx.cisd.common.fileconverter.TiffCompressionStrategy;
+import ch.systemsx.cisd.common.fileconverter.TiffCompressionStrategy.TiffCompressionMethod;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.common.utilities.PropertyUtils;
@@ -41,11 +40,11 @@ import ch.systemsx.cisd.common.utilities.PropertyUtils;
 public class TiffCompressorTransformator implements ITransformator
 {
 
-    private static final Logger operationLog =
-            LogFactory.getLogger(LogCategory.OPERATION, TiffCompressorTransformator.class);
+    private static final Logger operationLog = LogFactory.getLogger(LogCategory.OPERATION,
+            TiffCompressorTransformator.class);
 
-    private static final Logger notificationLog =
-            LogFactory.getLogger(LogCategory.NOTIFY, TiffCompressorTransformator.class);
+    private static final Logger notificationLog = LogFactory.getLogger(LogCategory.NOTIFY,
+            TiffCompressorTransformator.class);
 
     private static final String COMPRESSION_COMMAND_KEY = "compression-command";
 
@@ -53,77 +52,64 @@ public class TiffCompressorTransformator implements ITransformator
 
     private static final String THREADS_PER_PROCESSOR_KEY = "threads-per-processor";
 
-    private static final CompressionCommand DEFAULT_COMPRESSION_COMMAND = CompressionCommand.TIFFCP;
+    private static final TiffCompressionMethod DEFAULT_COMPRESSION_METHOD =
+            TiffCompressionMethod.LIBTIFF_TIFFCP;
 
-    private static final int DEFAULT_THREADS_PER_PROCESSOR = 1;
+    private static final double DEFAULT_THREADS_PER_CPU_CORE = 1.0;
 
-    /**
-     * Enumeration of supported methods of compression with names matching transformator property
-     * value.
-     */
-    private enum CompressionCommand
-    {
-        TIFFCP, CONVERT
-    }
-
-    private final ICompressionMethod compressionMethod;
+    private final TiffCompressionStrategy compressionStrategy;
 
-    private final int threadsPerProcessor;
+    private final double threadsPerCpuCore;
 
     public TiffCompressorTransformator(Properties properties)
     {
         operationLog.info("TiffCompressorTransformator created with properties: \n" + properties);
 
-        compressionMethod = extractCompressionMethod(properties);
-        threadsPerProcessor = extractThreadsPerProcessor(properties);
+        compressionStrategy = extractCompressionMethod(properties);
+        threadsPerCpuCore = extractThreadsPerProcessor(properties);
     }
 
-    private int extractThreadsPerProcessor(Properties properties)
+    private double extractThreadsPerProcessor(Properties properties)
     {
-        int result =
-                PropertyUtils.getInt(properties, THREADS_PER_PROCESSOR_KEY,
-                        DEFAULT_THREADS_PER_PROCESSOR);
+        double result =
+                PropertyUtils.getDouble(properties, THREADS_PER_PROCESSOR_KEY,
+                        DEFAULT_THREADS_PER_CPU_CORE);
         if (result > 0)
         {
             return result;
         } else
         {
-            throw ConfigurationFailureException
-                    .fromTemplate(
-                            "Number of threads per processor set for property '%s' is %s but needs to be greater than %s",
-                            THREADS_PER_PROCESSOR_KEY, result, 0);
+            throw ConfigurationFailureException.fromTemplate(
+                    "Number of threads per processor set for property '%s' is %s "
+                            + "but needs to be greater than %s", THREADS_PER_PROCESSOR_KEY, result,
+                    0);
         }
     }
 
-    private ICompressionMethod extractCompressionMethod(Properties properties)
+    private TiffCompressionStrategy extractCompressionMethod(Properties properties)
     {
         final String compressionCommandName =
-                PropertyUtils.getProperty(properties, COMPRESSION_COMMAND_KEY);
-        CompressionCommand compressionCommand = DEFAULT_COMPRESSION_COMMAND;
+                PropertyUtils.getProperty(properties, COMPRESSION_COMMAND_KEY).toUpperCase();
+        TiffCompressionMethod compressionCommand = DEFAULT_COMPRESSION_METHOD;
         if (compressionCommandName != null)
         {
-            try
+            if (compressionCommandName.equals("TIFFCP"))
             {
-                compressionCommand = CompressionCommand.valueOf(compressionCommandName);
-            } catch (IllegalArgumentException ex)
+                compressionCommand = TiffCompressionMethod.LIBTIFF_TIFFCP;
+            } else if (compressionCommandName.equals("CONVERT"))
             {
-                throw ConfigurationFailureException
-                        .fromTemplate(
-                                "Compression command '%s' set for property '%s' is not among supported commands: %s",
-                                compressionCommandName, COMPRESSION_COMMAND_KEY, Arrays
-                                        .toString(CompressionCommand.values()));
+                compressionCommand = TiffCompressionMethod.IMAGEMAGICK_CONVERT;
+            } else
+            {
+                throw ConfigurationFailureException.fromTemplate(
+                        "Compression command '%s' set for property '%s' is not "
+                                + "among supported commands: TIFFCP, CONVERT",
+                        compressionCommandName, COMPRESSION_COMMAND_KEY);
             }
         }
         final String compressionTypeOrNull =
                 PropertyUtils.getProperty(properties, COMPRESSION_TYPE_KEY);
-        switch (compressionCommand)
-        {
-            case CONVERT:
-                return TiffConvertCompressionMethod.create(compressionTypeOrNull);
-            case TIFFCP:
-                return TiffCpCompressionMethod.create(compressionTypeOrNull);
-        }
-        return null; // not possible
+        return new TiffCompressionStrategy(compressionCommand, compressionTypeOrNull);
     }
 
     //
@@ -140,13 +126,13 @@ public class TiffCompressorTransformator implements ITransformator
         try
         {
             errorMsgOrNull =
-                    TiffCompressor.compress(path.getAbsolutePath(), threadsPerProcessor,
-                            compressionMethod);
+                    FileConverter.tryFailuresToString(FileConverter.performConversion(path,
+                            compressionStrategy, threadsPerCpuCore, Integer.MAX_VALUE));
             if (errorMsgOrNull != null)
             {
                 notificationLog.error(errorMsgOrNull);
             }
-        } catch (InterruptedException ex)
+        } catch (InterruptedExceptionUnchecked ex)
         {
             ex.printStackTrace();
             return Status.createError("Tiff compression was interrupted:" + ex.getMessage());