diff --git a/src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java b/src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java
index 1ef3ccd85f488d1f080369df93751daf2b77811f..60d9698410895daddc2c5321cb6b58fd79f39c42 100644
--- a/src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java
+++ b/src/main/java/cz/it4i/qcmp/io/loader/BasicLoader.java
@@ -37,18 +37,20 @@ public abstract class BasicLoader {
      */
     public abstract int[] loadPlaneData(final int plane) throws IOException;
 
-    /**
-     * Read value from plane at specified offset.
-     *
-     * @param plane  Zero based plane index.
-     * @param offset Offset on flattened plane data.
-     * @return Plane value at the index.
-     */
-    protected int valueAt(final int plane, final int offset) {
-        new Exception().printStackTrace(System.err);
-        assert (false) : "Unimplemented overload of BasicLoader::valueAt()";
-        return Integer.MIN_VALUE;
-    }
+    //    /**
+    //     * Read value from plane at specified offset.
+    //     *
+    //     * @param plane  Zero based plane index.
+    //     * @param offset Offset on flattened plane data.
+    //     * @return Plane value at the index.
+    //     */
+    //    protected int valueAt(final int plane, final int offset) {
+    //        new Exception().printStackTrace(System.err);
+    //        assert (false) : "Unimplemented overload of BasicLoader::valueAt()";
+    //        return Integer.MIN_VALUE;
+    //    }
+
+    protected abstract int valueAt(final int plane, final int x, final int y, final int width);
 
     /**
      * Wrap column (x) index based on specified wrapping strategy.
@@ -149,7 +151,9 @@ public abstract class BasicLoader {
                                 break;
                             srcX = wrapColumnIndex(srcX);
                         }
-                        rowVectors[vectorIndex][vectorX] = valueAt(plane, Block.index(srcX, row, dims.getY()));
+
+                        // TODO(Moravec): dims.getY() should probably be dims.getX()! Check this!
+                        rowVectors[vectorIndex][vectorX] = valueAt(plane, srcX, row, dims.getY());
                     }
                     ++vectorIndex;
                 }
@@ -217,7 +221,8 @@ public abstract class BasicLoader {
                     }
                     srcX = wrapColumnIndex(srcX);
                 }
-                block[Block.index(x, y, blockDim.getX())] = valueAt(planeIndex, Block.index(srcX, srcY, dims.getX()));
+
+                block[Block.index(x, y, blockDim.getX())] = valueAt(planeIndex, srcX, srcY, dims.getX());
             }
         }
     }
@@ -284,7 +289,7 @@ public abstract class BasicLoader {
                         srcX = wrapColumnIndex(srcX);
                     }
 
-                    voxel[Voxel.dataIndex(x, y, z, voxelDim)] = valueAt(srcZ, Block.index(srcX, srcY, dims.getX()));
+                    voxel[Voxel.dataIndex(x, y, z, voxelDim)] = valueAt(srcZ, srcX, srcY, dims.getX());
                 }
             }
         }
diff --git a/src/main/java/cz/it4i/qcmp/io/loader/FlatBufferLoader.java b/src/main/java/cz/it4i/qcmp/io/loader/FlatBufferLoader.java
index 023c76d42417aa131412f1c5bcbf9a93bb7274d0..a5b60bb7760ce1da573da626625eeb9c6212cfc4 100644
--- a/src/main/java/cz/it4i/qcmp/io/loader/FlatBufferLoader.java
+++ b/src/main/java/cz/it4i/qcmp/io/loader/FlatBufferLoader.java
@@ -1,5 +1,6 @@
 package cz.it4i.qcmp.io.loader;
 
+import cz.it4i.qcmp.data.Block;
 import cz.it4i.qcmp.data.Range;
 import cz.it4i.qcmp.data.V2i;
 import cz.it4i.qcmp.data.V3i;
@@ -44,9 +45,10 @@ public class FlatBufferLoader extends BasicLoader implements IPlaneLoader {
         }
     }
 
+
     @Override
-    protected int valueAt(final int plane, final int offset) {
-        return TypeConverter.shortToInt(((short[]) bufferInputData.getPixelBuffer())[(plane * planePixelCount) + offset]);
+    protected int valueAt(final int plane, final int x, final int y, final int width) {
+        return TypeConverter.shortToInt(((short[]) bufferInputData.getPixelBuffer())[(plane * planePixelCount) + Block.index(x, y, width)]);
     }
 
     @Override
diff --git a/src/main/java/cz/it4i/qcmp/io/loader/ImageJBufferLoader.java b/src/main/java/cz/it4i/qcmp/io/loader/ImageJBufferLoader.java
index 259964b0fd87c59fb69304a6e9e6ab3ba7257c3f..a0b8e7eb21759e5c539fc6a686c0cba4c5ccd7e4 100644
--- a/src/main/java/cz/it4i/qcmp/io/loader/ImageJBufferLoader.java
+++ b/src/main/java/cz/it4i/qcmp/io/loader/ImageJBufferLoader.java
@@ -1,5 +1,6 @@
 package cz.it4i.qcmp.io.loader;
 
+import cz.it4i.qcmp.data.Block;
 import cz.it4i.qcmp.data.Range;
 import cz.it4i.qcmp.data.V2i;
 import cz.it4i.qcmp.data.V3i;
@@ -36,11 +37,10 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade
         final short[] srcBuffer = (short[]) bufferInputData.getPixelBuffer(plane);
         return TypeConverter.shortArrayToIntArray(srcBuffer);
     }
-
-
+    
     @Override
-    protected int valueAt(final int plane, final int offset) {
-        return TypeConverter.shortToInt(((short[]) bufferInputData.getPixelBuffer(plane))[offset]);
+    protected int valueAt(int plane, int x, int y, int width) {
+        return TypeConverter.shortToInt(((short[]) bufferInputData.getPixelBuffer(plane))[Block.index(x, y, width)]);
     }
 
     @Override
diff --git a/src/main/java/cz/it4i/qcmp/io/loader/RawDataLoader.java b/src/main/java/cz/it4i/qcmp/io/loader/RawDataLoader.java
index b699e3a4e81cdd8fd29be414355967d5d3327092..c226a72f176d5a95500ebadcfb940a80073d93c3 100644
--- a/src/main/java/cz/it4i/qcmp/io/loader/RawDataLoader.java
+++ b/src/main/java/cz/it4i/qcmp/io/loader/RawDataLoader.java
@@ -20,6 +20,13 @@ public final class RawDataLoader extends BasicLoader implements IPlaneLoader {
         this.inputDataInfo = inputDataInfo;
     }
 
+    @Override
+    protected int valueAt(final int plane, final int x, final int y, final int width) {
+        new Exception().printStackTrace(System.err);
+        assert (false) : "RawDataLoader shouldn't use valueAt impl methods!";
+        return -1;
+    }
+
     @Override
     public int[] loadPlaneData(final int plane) throws IOException {
         final byte[] buffer;
diff --git a/src/main/java/cz/it4i/qcmp/io/loader/SCIFIOLoader.java b/src/main/java/cz/it4i/qcmp/io/loader/SCIFIOLoader.java
index aaf7e86d9440257819a850ae0be3219e84cfdc48..a253532c640cdd23692cbfd6104815280f951911 100644
--- a/src/main/java/cz/it4i/qcmp/io/loader/SCIFIOLoader.java
+++ b/src/main/java/cz/it4i/qcmp/io/loader/SCIFIOLoader.java
@@ -29,6 +29,13 @@ public final class SCIFIOLoader extends BasicLoader implements IPlaneLoader {
         this.reader = ScifioWrapper.getReader(this.inputDataInfo.getFilePath());
     }
 
+    @Override
+    protected int valueAt(final int plane, final int x, final int y, final int width) {
+        new Exception().printStackTrace(System.err);
+        assert (false) : "SCIFIOLoader shouldn't use valueAt impl methods!";
+        return -1;
+    }
+
     @Override
     public int[] loadPlaneData(final int plane) throws IOException {
         final byte[] planeBytes;