diff --git a/mps/code/range.c b/mps/code/range.c
new file mode 100644
index 00000000000..a714b515cd6
--- /dev/null
+++ b/mps/code/range.c
@@ -0,0 +1,112 @@
+/* range.c: ADDRESS RANGE IMPLEMENTATION
+ *
+ * $Id$
+ * Copyright (c) 2013 Ravenbrook Limited. See end of file for license.
+ */
+
+#include "range.h"
+
+SRCID(range, "$Id$");
+
+
+Bool RangeCheck(Range range)
+{
+ CHECKS(Range, range);
+ CHECKL(range != NULL);
+ CHECKL(RangeBase(range) != NULL);
+ CHECKL(RangeBase(range) <= RangeLimit(range));
+
+ return TRUE;
+}
+
+Res RangeInit(Range range, Addr base, Addr limit)
+{
+ AVER(range != NULL);
+ AVER(base != NULL);
+ AVER(base <= limit);
+
+ range->sig = RangeSig;
+ range->base = base;
+ range->limit = limit;
+
+ AVERT(Range, range);
+ return ResOK;
+}
+
+void RangeFinish(Range range)
+{
+ AVERT(Range, range);
+
+ range->base = range->limit = NULL;
+ range->sig = SigInvalid;
+}
+
+Res RangeDescribe(Range range, mps_lib_FILE *stream)
+{
+ Res res;
+
+ AVERT(Range, range);
+ AVER(stream != NULL);
+
+ res = WriteF(stream,
+ "Range $P\n{\n", (WriteFP)range,
+ " base: $P \n", (WriteFP)RangeBase(range),
+ " limit: $P \n", (WriteFP)RangeLimit(range),
+ "}\n", NULL);
+ if (res != ResOK) {
+ return res;
+ }
+
+ return ResOK;
+}
+
+Bool RangeOverlap(Range range1, Range range2)
+{
+ AVERT(Range, range1);
+ AVERT(Range, range2);
+
+ return RangeBase(range1) < RangeLimit(range2)
+ && RangeBase(range2) < RangeLimit(range1);
+}
+
+
+/* C. COPYRIGHT AND LICENSE
+ *
+ * Copyright (C) 2013 Ravenbrook Limited .
+ * All rights reserved. This is an open source license. Contact
+ * Ravenbrook for commercial licensing options.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Redistributions in any form must be accompanied by information on how
+ * to obtain complete source code for this software and any accompanying
+ * software that uses this software. The source code must either be
+ * included in the distribution or be available for no more than the cost
+ * of distribution plus a nominal fee, and must be freely redistributable
+ * under reasonable conditions. For an executable file, complete source
+ * code means the source code for all modules it contains. It does not
+ * include source code for modules or files that typically accompany the
+ * major components of the operating system on which the executable file
+ * runs.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ * PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
diff --git a/mps/code/range.h b/mps/code/range.h
new file mode 100644
index 00000000000..24c1ca39e2d
--- /dev/null
+++ b/mps/code/range.h
@@ -0,0 +1,85 @@
+/* range.h: ADDRESS RANGE INTERFACE
+ *
+ * $Id$
+ * Copyright (c) 2013 Ravenbrook Limited. See end of file for license.
+ *
+ * .purpose: Representation of address ranges.
+ */
+
+#ifndef range_h
+#define range_h
+
+#include "mpmtypes.h"
+
+
+/* Signatures */
+
+#define RangeSig ((Sig)0x5196A493) /* SIGnature RANGE */
+
+
+/* Prototypes */
+
+typedef struct RangeStruct *Range;
+
+#define RangeBase(range) ((range)->base)
+#define RangeLimit(range) ((range)->limit)
+#define RangeSize(range) (AddrOffset(RangeBase(range), RangeLimit(range)))
+
+extern Res RangeInit(Range range, Addr base, Addr limit);
+extern void RangeFinish(Range range);
+extern Res RangeDescribe(Range range, mps_lib_FILE *stream);
+extern Bool RangeCheck(Range range);
+extern Bool RangeOverlap(Range range1, Range range2);
+
+
+/* Types */
+
+typedef struct RangeStruct {
+ Sig sig;
+ Addr base;
+ Addr limit;
+} RangeStruct;
+
+#endif /* range_h */
+
+
+/* C. COPYRIGHT AND LICENSE
+ *
+ * Copyright (C) 2013 Ravenbrook Limited .
+ * All rights reserved. This is an open source license. Contact
+ * Ravenbrook for commercial licensing options.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * 3. Redistributions in any form must be accompanied by information on how
+ * to obtain complete source code for this software and any accompanying
+ * software that uses this software. The source code must either be
+ * included in the distribution or be available for no more than the cost
+ * of distribution plus a nominal fee, and must be freely redistributable
+ * under reasonable conditions. For an executable file, complete source
+ * code means the source code for all modules it contains. It does not
+ * include source code for modules or files that typically accompany the
+ * major components of the operating system on which the executable file
+ * runs.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ * PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */