diff --git a/mnemonic-core/src/main/java/org/apache/mnemonic/ChunkBuffer.java b/mnemonic-core/src/main/java/org/apache/mnemonic/ChunkBuffer.java
index 6d79943..a97bd99 100644
--- a/mnemonic-core/src/main/java/org/apache/mnemonic/ChunkBuffer.java
+++ b/mnemonic-core/src/main/java/org/apache/mnemonic/ChunkBuffer.java
@@ -73,13 +73,34 @@
       alloc.syncToNonVolatileMemory(m_dchunk.get() + m_offset, m_size, false);
     } else {
       throw new UnsupportedOperationException("The ChunkBuffer does not backed by a non-volatile allocator");
-      }
     }
+  }
+
+  public void syncToNonVolatileMemory(long offset, int length) {
+    if (offset < 0 || length < 0 || offset + length > this.m_size) {
+      throw new OutOfBoundsException("The requested offset and length are out of bounds for this buffer: length = "
+          + length + " , offset = " + offset);
+    }
+    if (m_dchunk.getAllocator() instanceof NonVolatileMemAllocator) {
+      NonVolatileMemAllocator alloc = (NonVolatileMemAllocator) m_dchunk.getAllocator();
+      alloc.syncToNonVolatileMemory(m_dchunk.get() + m_offset + offset, length, false);
+    } else {
+      throw new UnsupportedOperationException("The ChunkBuffer does not backed by a non-volatile allocator");
+    }
+  }
 
   public void syncToVolatileMemory() {
     m_dchunk.getAllocator().syncToVolatileMemory(m_dchunk.get() + m_offset, m_size, false);
   }
 
+  public void syncToVolatileMemory(long offset, int length) {
+    if (offset < 0 || length < 0 || offset + length > this.m_size) {
+      throw new OutOfBoundsException("The requested offset and length are out of bounds for this buffer: length = "
+          + length + " , offset = " + offset);
+    }
+    m_dchunk.getAllocator().syncToVolatileMemory(m_dchunk.get() + m_offset + offset, length, false);
+  }
+
   public void syncToLocal() {
     if (m_dchunk.getAllocator() instanceof NonVolatileMemAllocator) {
       NonVolatileMemAllocator alloc = (NonVolatileMemAllocator) m_dchunk.getAllocator();
@@ -89,5 +110,18 @@
     }
   }
 
+  public void syncToLocal(long offset, int length) {
+    if (offset < 0 || length < 0 || offset + length > this.m_size) {
+      throw new OutOfBoundsException("The requested offset and length are out of bounds for this buffer: length = "
+          + length + " , offset = " + offset);
+    }
+    if (m_dchunk.getAllocator() instanceof NonVolatileMemAllocator) {
+      NonVolatileMemAllocator alloc = (NonVolatileMemAllocator) m_dchunk.getAllocator();
+      alloc.syncToLocal(m_dchunk.get() + m_offset + offset, length, false);
+    } else {
+      throw new UnsupportedOperationException("The ChunkBuffer does not backed by a non-volatile allocator");
+    }
+  }
+
 }
 
