diff --git a/src/mol-io/common/simple-buffer.ts b/src/mol-io/common/simple-buffer.ts
index 45f4d85d5c27b1f023e44bad3af06234ef08d97a..3ecbaecbc5c7498fa901b27d96e38813f80ae49a 100644
--- a/src/mol-io/common/simple-buffer.ts
+++ b/src/mol-io/common/simple-buffer.ts
@@ -4,6 +4,8 @@
  * @author Alexander Rose <alexander.rose@weirdbyte.de>
  */
 
+import { defaults } from 'mol-util';
+
 export interface SimpleBuffer extends Uint8Array {
     readInt8: (offset: number) => number
     readUInt8: (offset: number) => number
@@ -38,6 +40,8 @@ export interface SimpleBuffer extends Uint8Array {
     writeUInt32BE: (value: number, offset: number) => void
     writeFloatBE: (value: number, offset: number) => void
     writeDoubleBE: (value: number, offset: number) => void
+
+    copy: (targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number) => number
 }
 
 export namespace SimpleBuffer {
@@ -76,6 +80,14 @@ export namespace SimpleBuffer {
             writeUInt32BE: (value: number, offset: number) => dv.setUint32(offset, value, false),
             writeFloatBE: (value: number, offset: number) => dv.setFloat32(offset, value, false),
             writeDoubleBE: (value: number, offset: number) => dv.setFloat64(offset, value, false),
+
+            copy: (targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number) => {
+                targetStart = defaults(targetStart, 0)
+                sourceStart = defaults(sourceStart, 0)
+                sourceEnd = defaults(sourceEnd, array.length)
+                targetBuffer.set(array.subarray(sourceStart, sourceEnd), targetStart)
+                return sourceEnd - sourceStart
+            }
         })
     }
 
diff --git a/src/servers/volume/pack/writer.ts b/src/servers/volume/pack/writer.ts
index e63750780a0f9241ce105ad9980a7a0887d98fb7..bdd1348b4f42a02802ddbe546eabfdc8a503580a 100644
--- a/src/servers/volume/pack/writer.ts
+++ b/src/servers/volume/pack/writer.ts
@@ -46,8 +46,7 @@ function fillCubeBuffer(ctx: Data.Context, sampling: Data.Sampling, u: number, v
             for (let k = offsetK; k < maxK; k++) {
                 // copying the bytes direct is faster than using buffer.write* functions.
                 const start = (l * sizeHK + k * sizeH + offsetH) * elementSize;
-                // TODO
-                cubeBuffer.set(src.subarray(start, start + copyH), writeOffset)
+                src.copy(cubeBuffer, writeOffset, start, start + copyH);
                 writeOffset += copyH;
             }
         }