diff --git a/libsel4vm/include/sel4vm/guest_ram.h b/libsel4vm/include/sel4vm/guest_ram.h
index f2a4c5f..be8cf5e 100644
--- a/libsel4vm/include/sel4vm/guest_ram.h
+++ b/libsel4vm/include/sel4vm/guest_ram.h
@@ -102,6 +102,19 @@
 int vm_ram_register_at(vm_t *vm, uintptr_t start, size_t bytes, bool untyped);
 
 /***
+ * @function vm_ram_register_at(vm, start, bytes, untyped)
+ * Reserve a region of memory for RAM in the guest VM at a starting guest physical address with a custom memory iterator
+ * @param {vm_t *} vm                           A handle to the VM that ram needs to be allocated for
+ * @param {uintptr_t} start                     Starting guest physical address of the ram region being allocated
+ * @param {size_t} size                         The size of the RAM region to be allocated
+ * @param {memory_map_iterator_fn} map_iterator Iterator function
+ * @param {void *} cookie                       Iterator cookie
+ * @return                      0 on success, -1 on error
+ */
+int vm_ram_register_at_custom_iterator(vm_t *vm, uintptr_t start, size_t bytes, memory_map_iterator_fn map_iterator,
+                                       void *cookie);
+
+/***
  * @function vm_ram_mark_allocated(vm, start, bytes)
  * Mark a registered region of RAM as allocated
  * @param {vm_t *} vm               A handle to the VM
diff --git a/libsel4vm/src/guest_ram.c b/libsel4vm/src/guest_ram.c
index 22d0da4..9b7887b 100644
--- a/libsel4vm/src/guest_ram.c
+++ b/libsel4vm/src/guest_ram.c
@@ -375,6 +375,32 @@
     return 0;
 }
 
+int vm_ram_register_at_custom_iterator(vm_t *vm, uintptr_t start, size_t bytes, memory_map_iterator_fn map_iterator,
+                                       void *cookie)
+{
+    vm_memory_reservation_t *ram_reservation;
+    int err;
+
+    ram_reservation = vm_reserve_memory_at(vm, start, bytes, default_ram_fault_callback,
+                                           NULL);
+    if (!ram_reservation) {
+        ZF_LOGE("Unable to reserve ram region at addr 0x%x of size 0x%x", start, bytes);
+        return -1;
+    }
+    err = map_vm_memory_reservation(vm, ram_reservation, map_iterator, cookie);
+    if (err) {
+        ZF_LOGE("failed to map vm memory reservation to dataport\n");
+        return -1;
+    }
+    err = expand_guest_ram_region(vm, start, bytes);
+    if (err) {
+        ZF_LOGE("Failed to register new ram region");
+        vm_free_reserved_memory(vm, ram_reservation);
+        return -1;
+    }
+    return 0;
+}
+
 void vm_ram_free(vm_t *vm, uintptr_t start, size_t bytes)
 {
     return;
