diff --git a/inc/addr.h b/inc/addr.h
new file mode 100644
index 0000000..24a910c
--- /dev/null
+++ b/inc/addr.h
@@ -0,0 +1,114 @@
+#ifndef _ADDR_H
+#define _ADDR_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include "arch_addr.h"
+
+/* An opaque type for a physical address. */
+typedef struct {
+	uintpaddr_t pa;
+} paddr_t;
+
+/* An opaque type for an intermediate physical address. */
+typedef struct {
+	uintpaddr_t ipa;
+} ipaddr_t;
+
+/* An opaque type for a virtual address. */
+typedef struct {
+	uintvaddr_t va;
+} vaddr_t;
+
+/**
+ * Initializes a physical address.
+ */
+static inline paddr_t pa_init(uintpaddr_t p)
+{
+	return (paddr_t){.pa = p};
+}
+
+/**
+ * Extracts the absolute physical address.
+ */
+static inline uintpaddr_t pa_addr(paddr_t pa)
+{
+	return pa.pa;
+}
+
+/**
+ * Initializes an intermeditate physical address.
+ */
+static inline ipaddr_t ipa_init(uintvaddr_t v)
+{
+	return (ipaddr_t){.ipa = v};
+}
+
+/**
+ * Extracts the absolute intermediate physical address.
+ */
+static inline uintpaddr_t ipa_addr(ipaddr_t ipa)
+{
+	return ipa.ipa;
+}
+
+/**
+ * Initializes a virtual address.
+ */
+static inline vaddr_t va_init(uintvaddr_t v)
+{
+	return (vaddr_t){.va = v};
+}
+
+/**
+ * Extracts the absolute virtual address.
+ */
+static inline uintvaddr_t va_addr(vaddr_t va)
+{
+	return va.va;
+}
+
+/**
+ * Advances a virtual address.
+ */
+static inline vaddr_t va_add(vaddr_t va, size_t n)
+{
+	return va_init(va_addr(va) + n);
+}
+
+/**
+ * Casts a physical address to a virtual address.
+ */
+static inline vaddr_t va_from_pa(paddr_t pa)
+{
+	return va_init(pa_addr(pa));
+}
+
+/**
+ * Casts a virtual address to a physical address.
+ */
+static inline paddr_t pa_from_va(vaddr_t va)
+{
+	return pa_init(va_addr(va));
+}
+
+/**
+ * Casts a pointer to a virtual address.
+ */
+static inline vaddr_t va_from_ptr(const void *p)
+{
+	return (vaddr_t){.va = (uintvaddr_t)p};
+}
+
+/**
+ * Casts a virtual address to a pointer. Only use when the virtual address is
+ * mapped for the calling context.
+ * TODO: check the mapping for a range and return a memiter?
+ */
+static inline void *ptr_from_va(vaddr_t va)
+{
+	return (void *)va_addr(va);
+}
+
+#endif /* _ADDR_H */
diff --git a/inc/mm.h b/inc/mm.h
index 1e00310..74158a7 100644
--- a/inc/mm.h
+++ b/inc/mm.h
@@ -4,6 +4,7 @@
 #include <stdbool.h>
 #include <stdint.h>
 
+#include "addr.h"
 #include "arch_mm.h"
 
 struct mm_ptable {
@@ -11,11 +12,6 @@
 	uint32_t id;
 };
 
-/* An opaque type for an intermediate physical address from a VM. */
-typedef struct {
-	uintpaddr_t ipa;
-} ipaddr_t;
-
 #define PAGE_SIZE (1 << PAGE_BITS)
 
 /* The following are arch-independent page mapping modes. */
@@ -61,46 +57,12 @@
 void mm_defrag(void);
 
 /**
- * Initializes an intermeditate physical address.
- */
-static inline ipaddr_t ipa_init(uintvaddr_t v)
-{
-	return (ipaddr_t){.ipa = v};
-}
-
-/**
- * Extracts the absolute intermediate physical address.
- */
-static inline uintpaddr_t ipa_addr(ipaddr_t ipa)
-{
-	return ipa.ipa;
-}
-
-/**
- * Converts a physical address to a virtual address. Addresses are currently
- * identity mapped so this is a simple type convertion.
- */
-static inline vaddr_t mm_va_from_pa(paddr_t pa)
-{
-	return va_init(pa_addr(pa));
-}
-
-/**
- * Converts a virtual address to a physical address. Addresses are currently
- * identity mapped so this is a simple type convertion.
- */
-static inline paddr_t mm_pa_from_va(vaddr_t va)
-{
-	return pa_init(va_addr(va));
-}
-
-/**
  * Converts an intermediate physical address to a physical address. Addresses
  * are currently identity mapped so this is a simple type convertion. Returns
  * true if the address was mapped in the table and the address was converted.
  */
-static inline bool mm_pa_from_ipa(struct mm_ptable *t, ipaddr_t ipa,
-				  paddr_t *pa)
+static inline bool mm_ptable_translate_ipa(struct mm_ptable *t, ipaddr_t ipa,
+					   paddr_t *pa)
 {
 	/* TODO: the ptable functions map physical to virtual addresses but they
 	 * should really be mapping to intermediate physical addresses.
@@ -115,13 +77,4 @@
 	return false;
 }
 
-/**
- * Converts a virtual address to a pointer. Only use when the virtual address
- * is mapped for the calling context.
- */
-static inline void *mm_ptr_from_va(vaddr_t va)
-{
-	return (void *)va_addr(va);
-}
-
 #endif /* _MM_H */
diff --git a/src/api.c b/src/api.c
index e860e11..fd8f06d 100644
--- a/src/api.c
+++ b/src/api.c
@@ -142,15 +142,15 @@
 	 * provided the address was acessible from the VM which ensures that the
 	 * caller isn't trying to use another VM's memory.
 	 */
-	if (!mm_pa_from_ipa(&vm->ptable, send, &pa_send) ||
-	    !mm_pa_from_ipa(&vm->ptable, recv, &pa_recv)) {
+	if (!mm_ptable_translate_ipa(&vm->ptable, send, &pa_send) ||
+	    !mm_ptable_translate_ipa(&vm->ptable, recv, &pa_recv)) {
 		ret = -1;
 		goto exit;
 	}
 
-	send_begin = mm_va_from_pa(pa_send);
+	send_begin = va_from_pa(pa_send);
 	send_end = va_add(send_begin, PAGE_SIZE);
-	recv_begin = mm_va_from_pa(pa_recv);
+	recv_begin = va_from_pa(pa_recv);
 	recv_end = va_add(recv_begin, PAGE_SIZE);
 
 	/* Map the send page as read-only in the hypervisor address space. */
@@ -170,8 +170,8 @@
 	}
 
 	/* Save pointers to the pages. */
-	vm->rpc.send = mm_ptr_from_va(send_begin);
-	vm->rpc.recv = mm_ptr_from_va(recv_begin);
+	vm->rpc.send = ptr_from_va(send_begin);
+	vm->rpc.recv = ptr_from_va(recv_begin);
 
 	/* TODO: Notify any waiters. */
 
diff --git a/src/arch/aarch64/inc/arch_addr.h b/src/arch/aarch64/inc/arch_addr.h
new file mode 100644
index 0000000..92bc2fa
--- /dev/null
+++ b/src/arch/aarch64/inc/arch_addr.h
@@ -0,0 +1,18 @@
+#ifndef _ARCH_ADDR_H
+#define _ARCH_ADDR_H
+
+#include <stdint.h>
+
+#define PAGE_LEVEL_BITS 9
+#define PAGE_BITS 12
+
+/* Integer type large enough to hold a physical address. */
+typedef uintptr_t uintpaddr_t;
+
+/* Integer type large enough to hold a virtual address. */
+typedef uintptr_t uintvaddr_t;
+
+/* A page table entry. */
+typedef uint64_t pte_t;
+
+#endif /* _ARCH_ADDR_H */
diff --git a/src/arch/aarch64/inc/arch_mm.h b/src/arch/aarch64/inc/arch_mm.h
index ba44387..2bd80f2 100644
--- a/src/arch/aarch64/inc/arch_mm.h
+++ b/src/arch/aarch64/inc/arch_mm.h
@@ -3,69 +3,8 @@
 
 #include <stdbool.h>
 #include <stddef.h>
-#include <stdint.h>
 
-/* Integer type large enough to hold a physical address. */
-typedef uintptr_t uintpaddr_t;
-
-/* Integer type large enough to hold a virtual address. */
-typedef uintptr_t uintvaddr_t;
-
-/* A page table entry. */
-typedef uint64_t pte_t;
-
-/* An opaque type for a physical address. */
-typedef struct {
-	uintpaddr_t pa;
-} paddr_t;
-
-/* An opaque type for a virtual address. */
-typedef struct {
-	uintvaddr_t va;
-} vaddr_t;
-
-/**
- * Initializes a physical address.
- */
-static inline paddr_t pa_init(uintpaddr_t p)
-{
-	return (paddr_t){.pa = p};
-}
-
-/**
- * Extracts the absolute physical address.
- */
-static inline uintpaddr_t pa_addr(paddr_t pa)
-{
-	return pa.pa;
-}
-
-/**
- * Initializes a virtual address.
- */
-static inline vaddr_t va_init(uintvaddr_t v)
-{
-	return (vaddr_t){.va = v};
-}
-
-/**
- * Extracts the absolute virtual address.
- */
-static inline uintvaddr_t va_addr(vaddr_t va)
-{
-	return va.va;
-}
-
-/**
- * Advances a virtual address.
- */
-static inline vaddr_t va_add(vaddr_t va, size_t n)
-{
-	return va_init(va_addr(va) + n);
-}
-
-#define PAGE_LEVEL_BITS 9
-#define PAGE_BITS 12
+#include "addr.h"
 
 /**
  * Converts a physical address to a table PTE.
diff --git a/src/fdt_handler.c b/src/fdt_handler.c
index 8121790..99ea4d4 100644
--- a/src/fdt_handler.c
+++ b/src/fdt_handler.c
@@ -174,14 +174,14 @@
 	bool ret = false;
 
 	/* Map the fdt header in. */
-	if (!mm_identity_map(mm_va_from_pa(fdt_addr),
-			     va_init(pa_addr(fdt_addr) + fdt_header_size()),
+	if (!mm_identity_map(va_from_pa(fdt_addr),
+			     va_add(va_from_pa(fdt_addr), fdt_header_size()),
 			     MM_MODE_R)) {
 		dlog("Unable to map FDT header.\n");
 		goto err_unmap_fdt_header;
 	}
 
-	fdt = mm_ptr_from_va(mm_va_from_pa(fdt_addr));
+	fdt = ptr_from_va(va_from_pa(fdt_addr));
 
 	if (!fdt_root_node(&n, fdt)) {
 		dlog("FDT failed validation.\n");
@@ -189,8 +189,8 @@
 	}
 
 	/* Map the rest of the fdt in. */
-	if (!mm_identity_map(mm_va_from_pa(fdt_addr),
-			     va_init(pa_addr(fdt_addr) + fdt_total_size(fdt)),
+	if (!mm_identity_map(va_from_pa(fdt_addr),
+			     va_add(va_from_pa(fdt_addr), fdt_total_size(fdt)),
 			     MM_MODE_R)) {
 		dlog("Unable to map full FDT.\n");
 		goto err_unmap_fdt_header;
@@ -213,13 +213,13 @@
 	ret = true;
 
 out_unmap_fdt:
-	mm_unmap(mm_va_from_pa(fdt_addr),
-		 va_init(pa_addr(fdt_addr) + fdt_total_size(fdt)), 0);
+	mm_unmap(va_from_pa(fdt_addr),
+		 va_add(va_from_pa(fdt_addr), fdt_total_size(fdt)), 0);
 	return ret;
 
 err_unmap_fdt_header:
-	mm_unmap(mm_va_from_pa(fdt_addr),
-		 va_init(pa_addr(fdt_addr) + fdt_header_size()), 0);
+	mm_unmap(va_from_pa(fdt_addr),
+		 va_add(va_from_pa(fdt_addr), fdt_header_size()), 0);
 	return false;
 }
 
@@ -230,14 +230,14 @@
 	bool ret = false;
 
 	/* Map the fdt header in. */
-	if (!mm_identity_map(mm_va_from_pa(fdt_addr),
-			     va_init(pa_addr(fdt_addr) + fdt_header_size()),
+	if (!mm_identity_map(va_from_pa(fdt_addr),
+			     va_add(va_from_pa(fdt_addr), fdt_header_size()),
 			     MM_MODE_R)) {
 		dlog("Unable to map FDT header.\n");
 		return false;
 	}
 
-	fdt = mm_ptr_from_va(mm_va_from_pa(fdt_addr));
+	fdt = ptr_from_va(va_from_pa(fdt_addr));
 
 	if (!fdt_root_node(&n, fdt)) {
 		dlog("FDT failed validation.\n");
@@ -245,9 +245,9 @@
 	}
 
 	/* Map the fdt (+ a page) in r/w mode in preparation for updating it. */
-	if (!mm_identity_map(mm_va_from_pa(fdt_addr),
-			     va_init(pa_addr(fdt_addr) + fdt_total_size(fdt) +
-				     PAGE_SIZE),
+	if (!mm_identity_map(va_from_pa(fdt_addr),
+			     va_add(va_from_pa(fdt_addr),
+				    fdt_total_size(fdt) + PAGE_SIZE),
 			     MM_MODE_R | MM_MODE_W)) {
 		dlog("Unable to map FDT in r/w mode.\n");
 		goto err_unmap_fdt_header;
@@ -291,9 +291,9 @@
 
 out_unmap_fdt:
 	/* Unmap FDT. */
-	if (!mm_unmap(mm_va_from_pa(fdt_addr),
-		      va_init(pa_addr(fdt_addr) + fdt_total_size(fdt) +
-			      PAGE_SIZE),
+	if (!mm_unmap(va_from_pa(fdt_addr),
+		      va_add(va_from_pa(fdt_addr),
+			     fdt_total_size(fdt) + PAGE_SIZE),
 		      0)) {
 		dlog("Unable to unmap writable FDT.\n");
 		return false;
@@ -301,7 +301,7 @@
 	return ret;
 
 err_unmap_fdt_header:
-	mm_unmap(mm_va_from_pa(fdt_addr),
-		 va_init(pa_addr(fdt_addr) + fdt_header_size()), 0);
+	mm_unmap(va_from_pa(fdt_addr),
+		 va_add(va_from_pa(fdt_addr), fdt_header_size()), 0);
 	return false;
 }
diff --git a/src/load.c b/src/load.c
index d36ac21..6fb7f82 100644
--- a/src/load.c
+++ b/src/load.c
@@ -15,14 +15,14 @@
  */
 static bool copy_to_unmaped(paddr_t to, const void *from, size_t size)
 {
-	vaddr_t begin = mm_va_from_pa(to);
+	vaddr_t begin = va_from_pa(to);
 	vaddr_t end = va_add(begin, size);
 
 	if (!mm_identity_map(begin, end, MM_MODE_W)) {
 		return false;
 	}
 
-	memcpy(mm_ptr_from_va(begin), from, size);
+	memcpy(ptr_from_va(begin), from, size);
 
 	mm_unmap(begin, end, 0);
 
@@ -211,20 +211,18 @@
 						    MM_MODE_NOINVALIDATE);
 
 		/* Grant the VM access to the memory. */
-		if (!mm_ptable_identity_map(
-			    &secondary_vm[count].ptable,
-			    mm_va_from_pa(*mem_end),
-			    va_add(mm_va_from_pa(*mem_end), mem),
-			    MM_MODE_R | MM_MODE_W | MM_MODE_X |
-				    MM_MODE_NOINVALIDATE)) {
+		if (!mm_ptable_identity_map(&secondary_vm[count].ptable,
+					    va_from_pa(*mem_end),
+					    va_add(va_from_pa(*mem_end), mem),
+					    MM_MODE_R | MM_MODE_W | MM_MODE_X |
+						    MM_MODE_NOINVALIDATE)) {
 			dlog("Unable to initialise memory for vm %u\n", count);
 			continue;
 		}
 
 		/* Deny the primary VM access to this memory. */
-		if (!mm_ptable_unmap(&primary_vm.ptable,
-				     mm_va_from_pa(*mem_end),
-				     va_add(mm_va_from_pa(*mem_end), mem),
+		if (!mm_ptable_unmap(&primary_vm.ptable, va_from_pa(*mem_end),
+				     va_add(va_from_pa(*mem_end), mem),
 				     MM_MODE_NOINVALIDATE)) {
 			dlog("Unable to unmap secondary VM from primary VM\n");
 			return false;
diff --git a/src/main.c b/src/main.c
index 5f81a89..d41b1b3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -68,12 +68,12 @@
 	     pa_addr(params.initrd_end) - 1);
 
 	/* Map initrd in, and initialise cpio parser. */
-	if (!mm_identity_map(mm_va_from_pa(params.initrd_begin),
-			     mm_va_from_pa(params.initrd_end), MM_MODE_R)) {
+	if (!mm_identity_map(va_from_pa(params.initrd_begin),
+			     va_from_pa(params.initrd_end), MM_MODE_R)) {
 		panic("unable to map initrd in");
 	}
 
-	memiter_init(&cpio, mm_ptr_from_va(mm_va_from_pa(params.initrd_begin)),
+	memiter_init(&cpio, ptr_from_va(va_from_pa(params.initrd_begin)),
 		     pa_addr(params.initrd_end) - pa_addr(params.initrd_begin));
 
 	/* Load all VMs. */
@@ -87,10 +87,8 @@
 	}
 
 	/* Prepare to run by updating bootparams as seens by primary VM. */
-	update.initrd_begin =
-		mm_pa_from_va(va_init((uintvaddr_t)primary_initrd.next));
-	update.initrd_end =
-		mm_pa_from_va(va_init((uintvaddr_t)primary_initrd.limit));
+	update.initrd_begin = pa_from_va(va_from_ptr(primary_initrd.next));
+	update.initrd_end = pa_from_va(va_from_ptr(primary_initrd.limit));
 	update.reserved_begin = new_mem_end;
 	update.reserved_end =
 		pa_init(pa_addr(params.mem_end) - pa_addr(new_mem_end));
diff --git a/src/mm.c b/src/mm.c
index 9ecc313..d240c55 100644
--- a/src/mm.c
+++ b/src/mm.c
@@ -207,8 +207,8 @@
 	uint64_t attrs = arch_mm_mode_to_attrs(mode);
 	int flags = (mode & MM_MODE_NOSYNC) ? 0 : MAP_FLAG_SYNC;
 	int level = arch_mm_max_level(mode);
-	pte_t *table = mm_ptr_from_va(mm_va_from_pa(t->table));
-	paddr_t paddr = arch_mm_clear_pa(mm_pa_from_va(begin));
+	pte_t *table = ptr_from_va(va_from_pa(t->table));
+	paddr_t paddr = arch_mm_clear_pa(pa_from_va(begin));
 
 	begin = arch_mm_clear_va(begin);
 	end = arch_mm_clear_va(va_add(end, PAGE_SIZE - 1));
@@ -241,18 +241,18 @@
 {
 	int flags = (mode & MM_MODE_NOSYNC) ? 0 : MAP_FLAG_SYNC;
 	int level = arch_mm_max_level(mode);
-	pte_t *table = mm_ptr_from_va(mm_va_from_pa(t->table));
+	pte_t *table = ptr_from_va(va_from_pa(t->table));
 
 	begin = arch_mm_clear_va(begin);
 	end = arch_mm_clear_va(va_add(end, PAGE_SIZE - 1));
 
 	/* Also do updates in two steps, similarly to mm_ptable_identity_map. */
-	if (!mm_map_level(begin, end, mm_pa_from_va(begin), 0, table, level,
+	if (!mm_map_level(begin, end, pa_from_va(begin), 0, table, level,
 			  flags)) {
 		return false;
 	}
 
-	mm_map_level(begin, end, mm_pa_from_va(begin), 0, table, level,
+	mm_map_level(begin, end, pa_from_va(begin), 0, table, level,
 		     flags | MAP_FLAG_COMMIT);
 
 	/* Invalidate the tlb. */
@@ -272,9 +272,9 @@
 {
 	size_t i;
 	uint64_t attrs = arch_mm_mode_to_attrs(mode);
-	pte_t *table = mm_ptr_from_va(mm_va_from_pa(t->table));
+	pte_t *table = ptr_from_va(va_from_pa(t->table));
 	bool sync = !(mode & MM_MODE_NOSYNC);
-	paddr_t pa = arch_mm_clear_pa(mm_pa_from_va(va));
+	paddr_t pa = arch_mm_clear_pa(pa_from_va(va));
 
 	va = arch_mm_clear_va(va);
 
@@ -319,7 +319,7 @@
  */
 void mm_ptable_dump(struct mm_ptable *t, int mode)
 {
-	pte_t *table = mm_ptr_from_va(mm_va_from_pa(t->table));
+	pte_t *table = ptr_from_va(va_from_pa(t->table));
 	int max_level = arch_mm_max_level(mode);
 	mm_dump_table_recursive(table, max_level, max_level);
 }
@@ -386,7 +386,7 @@
  */
 bool mm_ptable_is_mapped(struct mm_ptable *t, vaddr_t addr, int mode)
 {
-	pte_t *table = mm_ptr_from_va(mm_va_from_pa(t->table));
+	pte_t *table = ptr_from_va(va_from_pa(t->table));
 	int level = arch_mm_max_level(mode);
 
 	addr = arch_mm_clear_va(addr);
