Index: src/test/java/org/crosswire/jsword/versification/VersificationTest.java
===================================================================
--- src/test/java/org/crosswire/jsword/versification/VersificationTest.java	(revision 2266)
+++ src/test/java/org/crosswire/jsword/versification/VersificationTest.java	(working copy)
@@ -78,7 +78,7 @@
             for (int c = 0; c <= cib; c++) {
                 int vic = v11n.getLastVerse(b, c);
                 for (int v = 0; v <= vic; v++) {
-                    Verse verse = new Verse(b, c, v);
+                    Verse verse = new Verse(b, c, v, v11n);
                     assertEquals(verse.getOsisID(), ordinal++, v11n.getOrdinal(verse));
                 }
             }
@@ -92,7 +92,7 @@
             for (int c = 0; c <= cib; c++) {
                 int vic = v11n.getLastVerse(b, c);
                 for (int v = 0; v <= vic; v++) {
-                    Verse verse = new Verse(b, c, v);
+                    Verse verse = new Verse(b, c, v, v11n);
                     assertEquals(verse.getOsisID(), verse, v11n.decodeOrdinal(ordinal++));
                 }
             }
@@ -156,7 +156,7 @@
             }
         }
 
-        Verse gen11 = new Verse(BibleBook.GEN, 1, 1);
+        Verse gen11 = new Verse(BibleBook.GEN, 1, 1, v11n);
         assertEquals(gen11, v11n.patch(BibleBook.GEN, 1, 1));
         assertEquals(gen11, v11n.patch(BibleBook.GEN, 0, 2));
         assertEquals(gen11, v11n.patch(null, 3, 1));
@@ -165,16 +165,16 @@
 
     public void testVerseCount() throws Exception {
         int count_up = 0;
-        Verse firstVerse = new Verse(v11n.getBooks().getFirstBook(), 0, 0);
+        Verse firstVerse = new Verse(v11n.getBooks().getFirstBook(), 0, 0, v11n);
         BibleBook lastBook = v11n.getBooks().getLastBook();
         int lastChapter = v11n.getLastChapter(lastBook);
-        Verse lastVerse = new Verse(lastBook, lastChapter, v11n.getLastVerse(lastBook, lastChapter));
+        Verse lastVerse = new Verse(lastBook, lastChapter, v11n.getLastVerse(lastBook, lastChapter), v11n);
         for (BibleBook b : v11n.getBooks()) {
             int cib = v11n.getLastChapter(b);
             for (int c = 0; c <= cib; c++) {
                 int vic = v11n.getLastVerse(b, c);
                 for (int v = 0; v <= vic; v++) {
-                    Verse curVerse = new Verse(b, c, v);
+                    Verse curVerse = new Verse(b, c, v, v11n);
                     int up = v11n.distance(firstVerse, curVerse) + 1;
                     assertEquals(++count_up, up);
 //                    assertEquals(verseCountSlow(gen00, curVerse), up);
@@ -189,7 +189,7 @@
             for (int c = 0; c <= cib; c++) {
                 int vic = v11n.getLastVerse(b, c);
                 for (int v = 0; v <= vic; v++) {
-                    Verse curVerse = new Verse(b, c, v);
+                    Verse curVerse = new Verse(b, c, v, v11n);
                     int down = v11n.distance(curVerse, lastVerse);
                     assertEquals(count_down--, down);
                 }
Index: src/test/java/org/crosswire/jsword/book/sword/RawFileBackendTest.java
===================================================================
--- src/test/java/org/crosswire/jsword/book/sword/RawFileBackendTest.java	(revision 2266)
+++ src/test/java/org/crosswire/jsword/book/sword/RawFileBackendTest.java	(working copy)
@@ -58,14 +58,17 @@
     }
 
     public void testSetRawText() throws NoSuchVerseException, IOException, BookException {
-        Verse otVerse = new Verse(BibleBook.GEN, 3, 1);
-        Verse otVerse2 = new Verse(BibleBook.LEV, 3, 5);
-        Verse otVerse3 = new Verse(BibleBook.EXOD, 6, 4);
-        Verse otVerse4 = new Verse(BibleBook.JUDG, 3, 1);
-        Verse ntVerse = new Verse(BibleBook.PET2, 1, 2);
-        Verse ntVerse2 = new Verse(BibleBook.PET1, 1, 2);
-        Verse ntVerse3 = new Verse(BibleBook.REV, 22, 21);
-        Verse ntVerse4 = new Verse(BibleBook.JOHN3, 1, 2);
+        
+        Versification v11n = Versifications.instance().getDefaultVersification();
+        
+        Verse otVerse = new Verse(BibleBook.GEN, 3, 1, v11n);
+        Verse otVerse2 = new Verse(BibleBook.LEV, 3, 5, v11n);
+        Verse otVerse3 = new Verse(BibleBook.EXOD, 6, 4, v11n);
+        Verse otVerse4 = new Verse(BibleBook.JUDG, 3, 1, v11n);
+        Verse ntVerse = new Verse(BibleBook.PET2, 1, 2, v11n);
+        Verse ntVerse2 = new Verse(BibleBook.PET1, 1, 2, v11n);
+        Verse ntVerse3 = new Verse(BibleBook.REV, 22, 21, v11n);
+        Verse ntVerse4 = new Verse(BibleBook.JOHN3, 1, 2, v11n);
 
         backend.setRawText(otVerse, "Hello OT");
         backend.setRawText(otVerse2, "Hello OT2");
Index: src/test/java/org/crosswire/jsword/passage/VerseRangeTest.java
===================================================================
--- src/test/java/org/crosswire/jsword/passage/VerseRangeTest.java	(revision 2266)
+++ src/test/java/org/crosswire/jsword/passage/VerseRangeTest.java	(working copy)
@@ -88,36 +88,36 @@
         // AV11N(DMS): Update test to test all V11Ns
         v11n = Versifications.instance().getDefaultVersification();
 
-        gen10_9 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 0), 32);
-        gen10_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 0), 2);
-        gen11_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 1);
-        gen10_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 0), 3);
-        gen11_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 2);
-        gen11_9 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 31);
-        gen10_a = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 0), 34);
-        gen11_a = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 33);
-        gen12_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 2), 1);
-        gen_all = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 0, 0), 1584);
-        gen_ex1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 0, 0), 1587);
-        gen_exo = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 0, 0), 2838);
-        gen_rev = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 32356);
-        rev99_9 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.REV, 22, 0), 22);
-        rev11_9 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.REV, 0, 0), 428);
-        rev99_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.REV, 22, 21), 1);
+        gen10_9 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 0, v11n), 32);
+        gen10_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 0, v11n), 2);
+        gen11_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 1);
+        gen10_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 0, v11n), 3);
+        gen11_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 2);
+        gen11_9 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 31);
+        gen10_a = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 0, v11n), 34);
+        gen11_a = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 33);
+        gen12_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 2, v11n), 1);
+        gen_all = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 0, 0, v11n), 1584);
+        gen_ex1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 0, 0, v11n), 1587);
+        gen_exo = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 0, 0, v11n), 2838);
+        gen_rev = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 32356);
+        rev99_9 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.REV, 22, 0, v11n), 22);
+        rev11_9 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.REV, 0, 0, v11n), 428);
+        rev99_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.REV, 22, 21, v11n), 1);
 
-        gen00 = new Verse(BibleBook.GEN, 0, 0);
-        gen11 = new Verse(BibleBook.GEN, 1, 1);
-        gen12 = new Verse(BibleBook.GEN, 1, 2);
-        gen19 = new Verse(BibleBook.GEN, 1, 31);
-        gen21 = new Verse(BibleBook.GEN, 2, 1);
-        gen99 = new Verse(BibleBook.GEN, 50, 26);
-        exo11 = new Verse(BibleBook.EXOD, 1, 1);
-        rev00 = new Verse(BibleBook.REV, 0, 0);
-        rev11 = new Verse(BibleBook.REV, 1, 1);
-        rev12 = new Verse(BibleBook.REV, 1, 2);
-        rev99 = new Verse(BibleBook.REV, 22, 21);
-        rev90 = new Verse(BibleBook.REV, 22, 0);
-        rev91 = new Verse(BibleBook.REV, 22, 1);
+        gen00 = new Verse(BibleBook.GEN, 0, 0, v11n);
+        gen11 = new Verse(BibleBook.GEN, 1, 1, v11n);
+        gen12 = new Verse(BibleBook.GEN, 1, 2, v11n);
+        gen19 = new Verse(BibleBook.GEN, 1, 31, v11n);
+        gen21 = new Verse(BibleBook.GEN, 2, 1, v11n);
+        gen99 = new Verse(BibleBook.GEN, 50, 26, v11n);
+        exo11 = new Verse(BibleBook.EXOD, 1, 1, v11n);
+        rev00 = new Verse(BibleBook.REV, 0, 0, v11n);
+        rev11 = new Verse(BibleBook.REV, 1, 1, v11n);
+        rev12 = new Verse(BibleBook.REV, 1, 2, v11n);
+        rev99 = new Verse(BibleBook.REV, 22, 21, v11n);
+        rev90 = new Verse(BibleBook.REV, 22, 0, v11n);
+        rev91 = new Verse(BibleBook.REV, 22, 1, v11n);
     }
 
     @Override
@@ -246,7 +246,7 @@
         assertEquals(gen_all, new VerseRange(v11n, gen99, gen00));
         assertEquals(gen_ex1, new VerseRange(v11n, gen00, exo11));
         assertEquals(gen_ex1, new VerseRange(v11n, exo11, gen00));
-        assertEquals(gen11_1, new VerseRange(v11n, gen11, new Verse(BibleBook.GEN, 1, 1)));
+        assertEquals(gen11_1, new VerseRange(v11n, gen11, new Verse(BibleBook.GEN, 1, 1, v11n)));
     }
 
     public void testNewViaVerseIntIntBoolean() {
Index: src/test/java/org/crosswire/jsword/passage/PassageTally2Test.java
===================================================================
--- src/test/java/org/crosswire/jsword/passage/PassageTally2Test.java	(revision 2266)
+++ src/test/java/org/crosswire/jsword/passage/PassageTally2Test.java	(working copy)
@@ -91,21 +91,21 @@
         // AV11N(DMS): Update test to test all V11Ns
         v11n = Versifications.instance().getDefaultVersification();
 
-        gen11_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 1);
-        gen11_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 2);
-        gen12_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 2), 1);
-        exo21_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 1), 1);
-        exo21_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 1), 2);
-        exo22_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 2), 1);
+        gen11_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 1);
+        gen11_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 2);
+        gen12_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 2, v11n), 1);
+        exo21_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 1, v11n), 1);
+        exo21_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 1, v11n), 2);
+        exo22_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 2, v11n), 1);
 
-        gen11 = new Verse(BibleBook.GEN, 1, 1);
-        gen12 = new Verse(BibleBook.GEN, 1, 2);
-        gen13 = new Verse(BibleBook.GEN, 1, 3);
-        gen15 = new Verse(BibleBook.GEN, 1, 5);
-        exo21 = new Verse(BibleBook.EXOD, 2, 1);
-        exo22 = new Verse(BibleBook.EXOD, 2, 2);
-        exo23 = new Verse(BibleBook.EXOD, 2, 3);
-        exo3b = new Verse(BibleBook.EXOD, 3, 11);
+        gen11 = new Verse(BibleBook.GEN, 1, 1, v11n);
+        gen12 = new Verse(BibleBook.GEN, 1, 2, v11n);
+        gen13 = new Verse(BibleBook.GEN, 1, 3, v11n);
+        gen15 = new Verse(BibleBook.GEN, 1, 5, v11n);
+        exo21 = new Verse(BibleBook.EXOD, 2, 1, v11n);
+        exo22 = new Verse(BibleBook.EXOD, 2, 2, v11n);
+        exo23 = new Verse(BibleBook.EXOD, 2, 3, v11n);
+        exo3b = new Verse(BibleBook.EXOD, 3, 11, v11n);
 
         gen1_135 = (Passage) keyf.getKey(v11n, "Gen 1:1, Gen 1:3, Gen 1:5");
         gen123_1 = (Passage) keyf.getKey(v11n, "Gen 1:1, Gen 2:1, Gen 3:1");
Index: src/test/java/org/crosswire/jsword/passage/VerseTest.java
===================================================================
--- src/test/java/org/crosswire/jsword/passage/VerseTest.java	(revision 2266)
+++ src/test/java/org/crosswire/jsword/passage/VerseTest.java	(working copy)
@@ -72,25 +72,25 @@
         // AV11N(DMS): Update test to test all V11Ns
         v11n = Versifications.instance().getDefaultVersification();
 
-        gen00 = new Verse(BibleBook.GEN, 0, 0);
-        gen10 = new Verse(BibleBook.GEN, 1, 0);
-        gen11 = new Verse(BibleBook.GEN, 1, 1);
-        gen11a = new Verse(BibleBook.GEN, 1, 1);
-        gen12 = new Verse(BibleBook.GEN, 1, 2);
-        gen20 = new Verse(BibleBook.GEN, 2, 0);
-        gen21 = new Verse(BibleBook.GEN, 2, 1);
-        gen22 = new Verse(BibleBook.GEN, 2, 2);
-        rev11 = new Verse(BibleBook.REV, 1, 1);
-        rev12 = new Verse(BibleBook.REV, 1, 2);
-        rev21 = new Verse(BibleBook.REV, 2, 1);
-        rev22 = new Verse(BibleBook.REV, 2, 2);
-        rev99 = new Verse(BibleBook.REV, 22, 21);
-        jude1 = new Verse(BibleBook.JUDE, 1, 1);
-        jude2 = new Verse(BibleBook.JUDE, 1, 2);
-        jude9 = new Verse(BibleBook.JUDE, 1, 25);
-        ssa00 = new Verse(BibleBook.SAM2, 0, 0);
-        ssa10 = new Verse(BibleBook.SAM2, 1, 0);
-        ssa11 = new Verse(BibleBook.SAM2, 1, 1);
+        gen00 = new Verse(BibleBook.GEN, 0, 0, v11n);
+        gen10 = new Verse(BibleBook.GEN, 1, 0, v11n);
+        gen11 = new Verse(BibleBook.GEN, 1, 1, v11n);
+        gen11a = new Verse(BibleBook.GEN, 1, 1, v11n);
+        gen12 = new Verse(BibleBook.GEN, 1, 2, v11n);
+        gen20 = new Verse(BibleBook.GEN, 2, 0, v11n);
+        gen21 = new Verse(BibleBook.GEN, 2, 1, v11n);
+        gen22 = new Verse(BibleBook.GEN, 2, 2, v11n);
+        rev11 = new Verse(BibleBook.REV, 1, 1, v11n);
+        rev12 = new Verse(BibleBook.REV, 1, 2, v11n);
+        rev21 = new Verse(BibleBook.REV, 2, 1, v11n);
+        rev22 = new Verse(BibleBook.REV, 2, 2, v11n);
+        rev99 = new Verse(BibleBook.REV, 22, 21, v11n);
+        jude1 = new Verse(BibleBook.JUDE, 1, 1, v11n);
+        jude2 = new Verse(BibleBook.JUDE, 1, 2, v11n);
+        jude9 = new Verse(BibleBook.JUDE, 1, 25, v11n);
+        ssa00 = new Verse(BibleBook.SAM2, 0, 0, v11n);
+        ssa10 = new Verse(BibleBook.SAM2, 1, 0, v11n);
+        ssa11 = new Verse(BibleBook.SAM2, 1, 1, v11n);
     }
 
     /*
@@ -234,14 +234,16 @@
     }
 
     public void testNewViaIntIntIntBoolean() {
-        assertEquals(gen00, new Verse(null, 1, 1, true));
-        assertEquals(gen10, new Verse(BibleBook.GEN, 0, 1, true));
-        assertEquals(gen10, new Verse(BibleBook.GEN, 1, 0, true));
-        assertEquals(rev99, new Verse(BibleBook.REV, 22, 22, true));
-        assertEquals(rev99, new Verse(BibleBook.REV, 23, 21, true));
-        assertEquals(rev99, new Verse(BibleBook.REV, 23, 22, true));
-        assertEquals(rev99, new Verse(BibleBook.GEN, 999999, 0, true));
-        assertEquals(rev99, new Verse(BibleBook.GEN, 0, 999999, true));
+        Versification v11n = Versifications.instance().getDefaultVersification();
+        
+        assertEquals(gen00, new Verse(null, 1, 1, true, v11n));
+        assertEquals(gen10, new Verse(BibleBook.GEN, 0, 1, true, v11n));
+        assertEquals(gen10, new Verse(BibleBook.GEN, 1, 0, true, v11n));
+        assertEquals(rev99, new Verse(BibleBook.REV, 22, 22, true, v11n));
+        assertEquals(rev99, new Verse(BibleBook.REV, 23, 21, true, v11n));
+        assertEquals(rev99, new Verse(BibleBook.REV, 23, 22, true, v11n));
+        assertEquals(rev99, new Verse(BibleBook.GEN, 999999, 0, true, v11n));
+        assertEquals(rev99, new Verse(BibleBook.GEN, 0, 999999, true, v11n));
     }
 
     public void testClone() {
Index: src/test/java/org/crosswire/jsword/passage/PassageParentTst.java
===================================================================
--- src/test/java/org/crosswire/jsword/passage/PassageParentTst.java	(revision 2266)
+++ src/test/java/org/crosswire/jsword/passage/PassageParentTst.java	(working copy)
@@ -137,22 +137,24 @@
             grace.optimizeReads();
             empty.optimizeReads();
         }
+        
+        Versification v11n = Versifications.instance().getDefaultVersification();
 
-        gen11_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 1);
-        gen11_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1), 2);
-        gen12_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 2), 1);
-        exo21_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 1), 1);
-        exo21_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 1), 2);
-        exo22_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 2), 1);
+        gen11_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 1);
+        gen11_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 1, v11n), 2);
+        gen12_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.GEN, 1, 2, v11n), 1);
+        exo21_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 1, v11n), 1);
+        exo21_2 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 1, v11n), 2);
+        exo22_1 = RestrictionType.NONE.toRange(v11n, new Verse(BibleBook.EXOD, 2, 2, v11n), 1);
 
-        gen11 = new Verse(BibleBook.GEN, 1, 1);
-        gen12 = new Verse(BibleBook.GEN, 1, 2);
-        gen13 = new Verse(BibleBook.GEN, 1, 3);
-        gen15 = new Verse(BibleBook.GEN, 1, 5);
-        exo21 = new Verse(BibleBook.EXOD, 2, 1);
-        exo22 = new Verse(BibleBook.EXOD, 2, 2);
-        exo23 = new Verse(BibleBook.EXOD, 2, 3);
-        exo3b = new Verse(BibleBook.EXOD, 3, 11);
+        gen11 = new Verse(BibleBook.GEN, 1, 1, v11n);
+        gen12 = new Verse(BibleBook.GEN, 1, 2, v11n);
+        gen13 = new Verse(BibleBook.GEN, 1, 3, v11n);
+        gen15 = new Verse(BibleBook.GEN, 1, 5, v11n);
+        exo21 = new Verse(BibleBook.EXOD, 2, 1, v11n);
+        exo22 = new Verse(BibleBook.EXOD, 2, 2, v11n);
+        exo23 = new Verse(BibleBook.EXOD, 2, 3, v11n);
+        exo3b = new Verse(BibleBook.EXOD, 3, 11, v11n);
         rev99 = VerseFactory.fromString(v11n, "Rev 22:21");
     }
 
Index: src/main/java/org/crosswire/jsword/passage/RestrictionType.java
===================================================================
--- src/main/java/org/crosswire/jsword/passage/RestrictionType.java	(revision 2266)
+++ src/main/java/org/crosswire/jsword/passage/RestrictionType.java	(working copy)
@@ -90,8 +90,8 @@
             startVerse = Math.max(startVerse, 0);
             endVerse = Math.min(endVerse, v11n.getLastVerse(endBook, endChapter));
 
-            Verse newStart = new Verse(startBook, startChapter, startVerse);
-            Verse newEnd = new Verse(endBook, endChapter, endVerse);
+            Verse newStart = new Verse(startBook, startChapter, startVerse, v11n);
+            Verse newEnd = new Verse(endBook, endChapter, endVerse, v11n);
             return new VerseRange(v11n, newStart, newEnd);
         }
 
@@ -105,8 +105,8 @@
             startVerse = Math.max(startVerse, 0);
             endVerse = Math.min(endVerse, v11n.getLastVerse(book, chapter));
 
-            Verse start = new Verse(book, chapter, startVerse);
-            Verse end = new Verse(book, chapter, endVerse);
+            Verse start = new Verse(book, chapter, startVerse, v11n);
+            Verse end = new Verse(book, chapter, endVerse, v11n);
             return new VerseRange(v11n, start, end);
         }
 
Index: src/main/java/org/crosswire/jsword/passage/Verse.java
===================================================================
--- src/main/java/org/crosswire/jsword/passage/Verse.java	(revision 2266)
+++ src/main/java/org/crosswire/jsword/passage/Verse.java	(working copy)
@@ -62,12 +62,14 @@
         book = DEFAULT.book;
         chapter = DEFAULT.chapter;
         verse = DEFAULT.verse;
+        
+        versification = DEFAULT.versification;
     }
 
     /**
-     * Create a Verse from book, chapter and verse numbers, throwing up if the
-     * specified Verse does not exist. This constructor is deliberately package
-     * protected so that is used only by VerseFactory.
+     * Create a Verse from book, chapter, verse number, and versification 
+     * throwing up if the specified Verse does not exist. This constructor 
+     * is deliberately package protected so that is used only by VerseFactory.
      * 
      * @param original
      *            The original verse reference
@@ -77,15 +79,18 @@
      *            The chapter number
      * @param verse
      *            The verse number
+     * @param v11n
+     *            The versification
      */
-    /* package */Verse(String original, BibleBook book, int chapter, int verse) {
+    /* package */Verse(String original, BibleBook book, int chapter, int verse, Versification v11n) {
         originalName = original;
+        versification = v11n;
         set(book, chapter, verse);
     }
 
     /**
-     * Create a Verse from book, chapter and verse numbers, throwing up if the
-     * specified Verse does not exist.
+     * Create a Verse from book, chapter, verse number, and versification, 
+     * throwing up if the specified Verse does not exist.
      * 
      * @param book
      *            The book number (Genesis = 1)
@@ -93,14 +98,16 @@
      *            The chapter number
      * @param verse
      *            The verse number
+     * @param v11n
+     *            The versification
      */
-    public Verse(BibleBook book, int chapter, int verse) {
-        this(null, book, chapter, verse);
+    public Verse(BibleBook book, int chapter, int verse, Versification v11n) {
+        this(null, book, chapter, verse, v11n);
     }
 
     /**
-     * Create a Verse from book, chapter and verse numbers, patching up if the
-     * specified verse does not exist.
+     * Create a Verse from book, chapter, verse number, and versification, 
+     * patching up if the specified verse does not exist.
      * <p>
      * The actual value of the boolean is ignored. However for future proofing
      * you should only use 'true'. Do not use patch_up=false, use
@@ -116,14 +123,17 @@
      *            The verse number
      * @param patch_up
      *            True to trigger reference fixing
+     * @param v11n
+     *            The versification
      */
-    public Verse(BibleBook book, int chapter, int verse, boolean patch_up) {
+    public Verse(BibleBook book, int chapter, int verse, boolean patch_up, Versification v11n) {
         if (!patch_up) {
             throw new IllegalArgumentException(JSOtherMsg.lookupText("Use patch=true."));
         }
 
         originalName = null;
-        setAndPatch(book, chapter, verse);
+        versification = v11n;
+        setAndPatch(book, chapter, verse, v11n);
     }
 
     /**
@@ -136,8 +146,9 @@
      * @param ordinal
      *            The verse id
      */
-    public Verse(int ordinal) {
+    public Verse(int ordinal, Versification v11n) {
         originalName = null;
+        versification = v11n;
         set(ordinal);
     }
 
@@ -203,6 +214,7 @@
             copy.book = book;
             copy.chapter = chapter;
             copy.verse = verse;
+            copy.versification = versification;
             copy.originalName = originalName;
         } catch (CloneNotSupportedException e) {
             assert false : e;
@@ -238,6 +250,10 @@
         if (v.getVerse() != getVerse()) {
             return false;
         }
+        
+        if (v.getVersification() != getVersification()) {
+            return false;
+        }
 
         return true;
     }
@@ -311,7 +327,7 @@
     @Deprecated
     public Verse subtract(int n) {
         // AV11N(DMS): deprecate?
-        return Versifications.instance().getDefaultVersification().subtract(this, n);
+        return getVersification().subtract(this, n);
     }
 
     /**
@@ -325,7 +341,7 @@
     @Deprecated
     public Verse add(int n) {
         // AV11N(DMS): deprecate?
-        return Versifications.instance().getDefaultVersification().add(this, n);
+        return getVersification().add(this, n);
     }
 
     /**
@@ -354,6 +370,15 @@
     public int getVerse() {
         return verse;
     }
+    
+    /**
+     * Return the versification of this Verse
+     * 
+     * @return The versification
+     */
+    public Versification getVersification() {
+        return versification;
+    }
 
     /**
      * Is this verse the first in a chapter
@@ -375,7 +400,7 @@
     @Deprecated
     public boolean isEndOfChapter() {
         // AV11N(DMS): deprecate?
-        return Versifications.instance().getDefaultVersification().isEndOfChapter(this);
+        return getVersification().isEndOfChapter(this);
     }
 
     /**
@@ -398,7 +423,7 @@
     @Deprecated
     public boolean isEndOfBook() {
         // AV11N(DMS): deprecate?
-        return Versifications.instance().getDefaultVersification().isEndOfBook(this);
+        return getVersification().isEndOfBook(this);
     }
 
     /**
@@ -437,7 +462,7 @@
     @Deprecated
     public int getOrdinal() {
         // AV11N(DMS): deprecate?
-        return Versifications.instance().getDefaultVersification().getOrdinal(this);
+        return getVersification().getOrdinal(this);
     }
 
     /**
@@ -521,7 +546,7 @@
     private String doGetName(Verse verseBase) {
         // To cope with thing like Jude 2...
         // AV11N(DMS): move to Versification???
-        if (Versifications.instance().getDefaultVersification().getLastChapter(book) == 1) {
+        if (getVersification().getLastChapter(book) == 1) {
             if (verseBase == null || verseBase.book != book) {
                 return book.getPreferredName() + Verse.VERSE_PREF_DELIM1 + verse;
             }
@@ -572,9 +597,8 @@
      * @deprecated do not use
      */
     @Deprecated
-    private void setAndPatch(BibleBook book, int chapter, int verse) {
+    private void setAndPatch(BibleBook book, int chapter, int verse, Versification v11n) {
         // AV11N(DMS): deprecate?
-        Versification v11n = Versifications.instance().getDefaultVersification();
         Verse patched = v11n.patch(book, chapter, verse);
 
         this.book = patched.book;
@@ -609,7 +633,7 @@
     @Deprecated
     private void set(int ordinal) {
         // AV11N(DMS): deprecate?
-        Versification v11n = Versifications.instance().getDefaultVersification();
+        Versification v11n = getVersification();
         Verse v = v11n.decodeOrdinal(ordinal);
 
         book = v.book;
@@ -779,7 +803,7 @@
     /**
      * The default verse
      */
-    public static final Verse DEFAULT = new Verse(BibleBook.GEN, 1, 1);
+    public static final Verse DEFAULT = new Verse(BibleBook.GEN, 1, 1, Versifications.instance().getDefaultVersification());
 
     /**
      * Allow the conversion to and from other number representations.
@@ -814,5 +838,10 @@
      * The original string for picky users
      */
     private transient String originalName;
+    
+    /**
+     * The verse system (v11n)
+     */
+    private transient Versification versification;
 
 }
Index: src/main/java/org/crosswire/jsword/passage/AccuracyType.java
===================================================================
--- src/main/java/org/crosswire/jsword/passage/AccuracyType.java	(revision 2266)
+++ src/main/java/org/crosswire/jsword/passage/AccuracyType.java	(working copy)
@@ -90,7 +90,7 @@
                 // Some books only have 1 chapter
                 verse = getVerse(refSystem, book, chapter, parts[1]);
             }
-            return new Verse(original, book, chapter, verse);
+            return new Verse(original, book, chapter, verse, refSystem);
         }
 
         @Override
@@ -116,7 +116,7 @@
             BibleBook book = BibleBook.getBook(parts[0]);
             int chapter = getChapter(refSystem, book, parts[1]);
             int verse = 0;
-            return new Verse(original, book, chapter, verse);
+            return new Verse(original, book, chapter, verse, refSystem);
         }
 
         @Override
@@ -125,7 +125,7 @@
             BibleBook book = BibleBook.getBook(endParts[0]);
             int chapter = getChapter(refSystem, book, endParts[1]);
             int verse = refSystem.getLastVerse(book, chapter);
-            return new Verse(endVerseDesc, book, chapter, verse);
+            return new Verse(endVerseDesc, book, chapter, verse, refSystem);
         }
     },
 
@@ -142,7 +142,7 @@
         @Override
         public Verse createStartVerse(Versification refSystem, String original, VerseRange verseRangeBasis, String[] parts) throws NoSuchVerseException {
             BibleBook book = BibleBook.getBook(parts[0]);
-            return new Verse(original, book, 0, 0);
+            return new Verse(original, book, 0, 0, refSystem);
         }
 
         @Override
@@ -150,7 +150,7 @@
             BibleBook book = BibleBook.getBook(endParts[0]);
             int chapter = refSystem.getLastChapter(book);
             int verse = refSystem.getLastVerse(book, chapter);
-            return new Verse(endVerseDesc, book, chapter, verse);
+            return new Verse(endVerseDesc, book, chapter, verse, refSystem);
         }
     },
 
@@ -174,7 +174,7 @@
             int chapter = getChapter(refSystem, book, parts[0]);
             int verse = getVerse(refSystem, book, chapter, parts[1]);
 
-            return new Verse(original, book, chapter, verse);
+            return new Verse(original, book, chapter, verse, refSystem);
         }
 
         @Override
@@ -183,7 +183,7 @@
             BibleBook book = verseBasis.getBook();
             int chapter = getChapter(refSystem, book, endParts[0]);
             int verse = getVerse(refSystem, book, chapter, endParts[1]);
-            return new Verse(endVerseDesc, book, chapter, verse);
+            return new Verse(endVerseDesc, book, chapter, verse, refSystem);
         }
     },
 
@@ -204,7 +204,7 @@
             }
             BibleBook book = verseRangeBasis.getEnd().getBook();
             int chapter = getChapter(refSystem, book, parts[0]);
-            return new Verse(original, book, chapter, 0);
+            return new Verse(original, book, chapter, 0, refSystem);
         }
 
         @Override
@@ -213,7 +213,7 @@
             // and it gets the end of the chapter
             BibleBook book = verseBasis.getBook();
             int chapter = getChapter(refSystem, book, endParts[0]);
-            return new Verse(endVerseDesc, book, chapter, refSystem.getLastVerse(book, chapter));
+            return new Verse(endVerseDesc, book, chapter, refSystem.getLastVerse(book, chapter), refSystem);
         }
     },
 
@@ -235,7 +235,7 @@
             BibleBook book = verseRangeBasis.getEnd().getBook();
             int chapter = verseRangeBasis.getEnd().getChapter();
             int verse = getVerse(refSystem, book, chapter, parts[0]);
-            return new Verse(original, book, chapter, verse);
+            return new Verse(original, book, chapter, verse, refSystem);
         }
 
         @Override
@@ -245,7 +245,7 @@
             BibleBook book = verseBasis.getBook();
             int chapter = verseBasis.getChapter();
             int verse = getVerse(refSystem, book, chapter, endParts[0]);
-            return new Verse(endVerseDesc, book, chapter, verse);
+            return new Verse(endVerseDesc, book, chapter, verse, refSystem);
         }
     };
 
Index: src/main/java/org/crosswire/jsword/passage/KeyUtil.java
===================================================================
--- src/main/java/org/crosswire/jsword/passage/KeyUtil.java	(revision 2266)
+++ src/main/java/org/crosswire/jsword/passage/KeyUtil.java	(working copy)
@@ -75,6 +75,10 @@
 
         // AV11N(DMS): Is this right?
         Versification v11n = Versifications.instance().getDefaultVersification();
+        if (key instanceof Verse) {
+            Verse vkey = (Verse) key;
+            v11n = vkey.getVersification();
+        }
         try {
             return VerseFactory.fromString(v11n, key.getName());
         } catch (NoSuchVerseException ex) {
@@ -100,6 +104,10 @@
         Key ref = null;
         // AV11N(DMS): Is this right?
         Versification v11n = Versifications.instance().getDefaultVersification();
+        if (key instanceof Verse) {
+            Verse vkey = (Verse) key;
+            v11n = vkey.getVersification();
+        }
         try {
             ref = keyf.getKey(v11n, key.getName());
         } catch (NoSuchKeyException ex) {
Index: src/main/java/org/crosswire/jsword/versification/Versification.java
===================================================================
--- src/main/java/org/crosswire/jsword/versification/Versification.java	(revision 2266)
+++ src/main/java/org/crosswire/jsword/versification/Versification.java	(working copy)
@@ -234,10 +234,10 @@
     public VerseRange getAllVerses() {
         BibleBook book = bookList.getFirstBook();
         int chapter = getLastChapter(book);
-        Verse first = new Verse(book, chapter, getLastVerse(book, chapter));
+        Verse first = new Verse(book, chapter, getLastVerse(book, chapter), this);
         book = bookList.getLastBook();
         chapter = getLastChapter(book);
-        Verse last = new Verse(book, chapter, getLastVerse(book, chapter));
+        Verse last = new Verse(book, chapter, getLastVerse(book, chapter), this);
         return new VerseRange(this, first, last);
     }
 
@@ -251,7 +251,7 @@
         int lastchap = getLastChapter(book);
         int lastverse = getLastVerse(book, lastchap);
 
-        return new Verse(book, lastchap, lastverse);
+        return new Verse(book, lastchap, lastverse, this);
     }
 
     /**
@@ -264,7 +264,7 @@
         int chapter = verse.getChapter();
         int lastverse = getLastVerse(book, chapter);
 
-        return new Verse(book, chapter, lastverse);
+        return new Verse(book, chapter, lastverse, this);
     }
 
     /**
@@ -273,7 +273,7 @@
      * @return The first verse in this book
      */
     public Verse getFirstVerseInBook(Verse verse) {
-        return new Verse(verse.getBook(), 1, 1);
+        return new Verse(verse.getBook(), 1, 1, this);
     }
 
     /**
@@ -282,7 +282,7 @@
      * @return The first verse in this book
      */
     public Verse getFirstVerseInChapter(Verse verse) {
-        return new Verse(verse.getBook(), verse.getChapter(), 1);
+        return new Verse(verse.getBook(), verse.getChapter(), 1, this);
     }
 
     /**
@@ -590,17 +590,17 @@
         // Handle three special cases
         // Book/Module introduction
         if (ord == 0) {
-            return new Verse(BibleBook.INTRO_BIBLE, 0, 0);
+            return new Verse(BibleBook.INTRO_BIBLE, 0, 0, this);
         }
 
         // OT introduction
         if (ord == 1) {
-            return new Verse(BibleBook.INTRO_OT, 0, 0);
+            return new Verse(BibleBook.INTRO_OT, 0, 0, this);
         }
 
         // NT introduction
         if (ord == otMaxOrdinal + 1) {
-            return new Verse(BibleBook.INTRO_NT, 0, 0);
+            return new Verse(BibleBook.INTRO_NT, 0, 0, this);
         }
 
         // To find the book, do a binary search in chapterStarts against chapter 0
@@ -652,7 +652,7 @@
         // If we didn't have an exact match then use the low value
         int chapterIndex = match >= 0 ? match : low;
         int verse = chapterIndex == 0 ? 0 : ord - chapterStarts[bookIndex][chapterIndex];
-        return new Verse(book, chapterIndex, verse);
+        return new Verse(book, chapterIndex, verse, this);
     }
 
     /**
@@ -767,7 +767,7 @@
                 patchedBook = getBooks().getLastBook();
                 patchedChapter = getLastChapter(patchedBook);
                 patchedVerse = getLastVerse(patchedBook, patchedChapter);
-                return new Verse(patchedBook, patchedChapter, patchedVerse);
+                return new Verse(patchedBook, patchedChapter, patchedVerse, this);
             }
         }
 
@@ -790,12 +790,12 @@
                     patchedBook = getBooks().getLastBook();
                     patchedChapter = getLastChapter(patchedBook);
                     patchedVerse = getLastVerse(patchedBook, patchedChapter);
-                    return new Verse(patchedBook, patchedChapter, patchedVerse);
+                    return new Verse(patchedBook, patchedChapter, patchedVerse, this);
                 }
             }
         }
 
-        return new Verse(patchedBook, patchedChapter, patchedVerse);
+        return new Verse(patchedBook, patchedChapter, patchedVerse, this);
     }
 
     /** The OSIS name of the reference system. */

