diff --git a/src/main/java/azgracompress/data/Voxel.java b/src/main/java/azgracompress/data/Voxel.java
index 7a5944505738c86ee697b34457ab620f059bcc77..ecdd9b18dfacf8084882a0f292701f47b05cc119 100644
--- a/src/main/java/azgracompress/data/Voxel.java
+++ b/src/main/java/azgracompress/data/Voxel.java
@@ -45,7 +45,7 @@ public final class Voxel {
      * @param voxelDims Chunk dimensions.
      * @return Index inside chunk dimension data array.
      */
-    public int dataIndex(final int x, final int y, final int z, final V3i voxelDims) {
+    public static int dataIndex(final int x, final int y, final int z, final V3i voxelDims) {
         return (z * (voxelDims.getX() * voxelDims.getY())) + (y * voxelDims.getX()) + x;
     }
 
diff --git a/src/main/java/azgracompress/io/loader/BasicLoader.java b/src/main/java/azgracompress/io/loader/BasicLoader.java
index e6260031365d5aeb133aaff742a0d1183fa477bd..65bcda50d0646d92eef41357464fe980d76f6971 100644
--- a/src/main/java/azgracompress/io/loader/BasicLoader.java
+++ b/src/main/java/azgracompress/io/loader/BasicLoader.java
@@ -2,7 +2,6 @@ package azgracompress.io.loader;
 
 import azgracompress.data.*;
 
-import javax.print.attribute.standard.RequestingUserName;
 import java.io.IOException;
 
 public abstract class BasicLoader {
@@ -249,6 +248,55 @@ public abstract class BasicLoader {
         }
     }
 
+    private void loadVoxel(final int[] voxel,
+                           final int voxelXOffset,
+                           final int voxelYOffset,
+                           final int voxelZOffset,
+                           final V3i voxelDim) {
+        int srcX, srcY, srcZ;
+        for (int z = 0; z < voxelDim.getZ(); z++) {
+            srcZ = voxelZOffset + z;
+            if (srcZ >= dims.getZ()) {
+                // Handle plane overflow.
+                break;
+            }
+            for (int y = 0; y < voxelDim.getY(); y++) {
+                srcY = voxelYOffset + y;
+                if (srcY >= dims.getY()) {
+                    // Handle row overflow.
+                    break;
+                }
+                for (int x = 0; x < voxelDim.getX(); x++) {
+                    srcX = voxelXOffset + x;
+                    if (srcX >= dims.getX()) {
+                        // Handle column overflow
+                        break;
+                    }
+
+                    voxel[Voxel.dataIndex(x, y, z, voxelDim)] = valueAt(srcZ, Block.index(x, y, dims.getX()));
+                }
+            }
+        }
+
+    }
+
+    protected int[][] experimentalLoadVoxelsImplByValueAt(final V3i voxelDim, final Range<Integer> planeRange) {
+        System.out.println("experimentalLoadVoxelsImplByValueAt");
+        final int voxelCount = Voxel.calculateRequiredVoxelCount(dims, voxelDim);
+        final int voxelElementCount = (int) voxelDim.multiplyTogether();
+        int[][] voxels = new int[voxelCount][voxelElementCount];
+        int voxelIndex = 0;
+        for (int voxelZOffset = planeRange.getFrom(); voxelZOffset < planeRange.getTo(); voxelZOffset += voxelDim.getZ()) {
+            for (int voxelYOffset = 0; voxelYOffset < dims.getY(); voxelYOffset += voxelDim.getY()) {
+                for (int voxelXOffset = 0; voxelXOffset < dims.getX(); voxelXOffset += voxelDim.getX()) {
+                    loadVoxel(voxels[voxelIndex++], voxelXOffset, voxelYOffset, voxelZOffset, voxelDim);
+                }
+            }
+        }
+        return voxels;
+    }
+
+
     /**
      * Load specified planes from dataset to voxel of specified dimensions.
      * This overload uses the loadPlaneData function to read src data.
diff --git a/src/main/java/azgracompress/io/loader/FlatBufferLoader.java b/src/main/java/azgracompress/io/loader/FlatBufferLoader.java
index 81e5d6c013bf7fc08bbed8cdee4589360f93718f..8dec2acc21a8820cd8e083477a9ef5aadcf689d9 100644
--- a/src/main/java/azgracompress/io/loader/FlatBufferLoader.java
+++ b/src/main/java/azgracompress/io/loader/FlatBufferLoader.java
@@ -105,6 +105,7 @@ public class FlatBufferLoader extends BasicLoader implements IPlaneLoader {
 
     @Override
     public int[][] loadVoxels(final V3i voxelDim, final Range<Integer> planeRange) throws IOException {
-        return loadVoxelsImplByValueAt(voxelDim, planeRange);
+//        return loadVoxelsImplByValueAt(voxelDim, planeRange);
+        return experimentalLoadVoxelsImplByValueAt(voxelDim, planeRange);
     }
 }
diff --git a/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java b/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java
index c5fde4d5e57291d3ff78d784cd19bd0e1e1eae3f..83b6f4d44b17c86c044f65570ec0620241482517 100644
--- a/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java
+++ b/src/main/java/azgracompress/io/loader/ImageJBufferLoader.java
@@ -104,7 +104,8 @@ public final class ImageJBufferLoader extends BasicLoader implements IPlaneLoade
 
     @Override
     public int[][] loadVoxels(final V3i voxelDim, final Range<Integer> planeRange) throws IOException {
-        return loadVoxelsImplByValueAt(voxelDim, planeRange);
+//        return loadVoxelsImplByValueAt(voxelDim, planeRange);
+        return experimentalLoadVoxelsImplByValueAt(voxelDim, planeRange);
     }
 }