diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
index 397532933fed1d37933262ee683666a61c403442..ac0fb0ece694b5dad25f9642114982cd65e412b0 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictIOUtils.java
@@ -92,7 +92,7 @@ public class BinaryDictIOUtils {
             }
 
             if (p.mPosition == p.mNumOfCharGroup) {
-                if (formatOptions.mHasLinkedListNode) {
+                if (formatOptions.mSupportsDynamicUpdate) {
                     final int forwardLinkAddress = buffer.readUnsignedInt24();
                     if (forwardLinkAddress != FormatSpec.NO_FORWARD_LINK_ADDRESS) {
                         // the node has a forward link.
diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
index 7b8dc5cc5588414de39f2abc222eab0809df12e5..4806bf9dc4eb881a680005418ec8a2058297dd6f 100644
--- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
+++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java
@@ -376,7 +376,7 @@ public class BinaryDictInputOutput {
             g.mCachedSize = groupSize;
             size += groupSize;
         }
-        if (options.mHasLinkedListNode) {
+        if (options.mSupportsDynamicUpdate) {
             size += FormatSpec.FORWARD_LINK_ADDRESS_SIZE;
         }
         node.mCachedSize = size;
@@ -390,11 +390,11 @@ public class BinaryDictInputOutput {
     }
 
     /**
-     * Helper method to check whether the CharGroup has a parent address.
+     * Helper method to check whether the dictionary can be updated dynamically.
      */
-    public static boolean hasParentAddress(final FormatOptions options) {
-        return options.mVersion >= FormatSpec.FIRST_VERSION_WITH_PARENT_ADDRESS
-                && options.mHasParentAddress;
+    public static boolean supportsDynamicUpdate(final FormatOptions options) {
+        return options.mVersion >= FormatSpec.FIRST_VERSION_WITH_DYNAMIC_UPDATE
+                && options.mSupportsDynamicUpdate;
     }
 
     /**
@@ -404,7 +404,7 @@ public class BinaryDictInputOutput {
      * @param options file format options.
      */
     private static int getGroupHeaderSize(final CharGroup group, final FormatOptions options) {
-        if (hasParentAddress(options)) {
+        if (supportsDynamicUpdate(options)) {
             return FormatSpec.GROUP_FLAGS_SIZE + FormatSpec.PARENT_ADDRESS_SIZE
                     + getGroupCharactersSize(group);
         } else {
@@ -530,7 +530,7 @@ public class BinaryDictInputOutput {
             group.mCachedSize = groupSize;
             size += groupSize;
         }
-        if (formatOptions.mHasLinkedListNode) {
+        if (formatOptions.mSupportsDynamicUpdate) {
             size += FormatSpec.FORWARD_LINK_ADDRESS_SIZE;
         }
         if (node.mCachedSize != size) {
@@ -559,7 +559,8 @@ public class BinaryDictInputOutput {
                 groupOffset += g.mCachedSize;
             }
             final int nodeSize = groupCountSize + groupOffset
-                    + (formatOptions.mHasLinkedListNode ? FormatSpec.FORWARD_LINK_ADDRESS_SIZE : 0);
+                    + (formatOptions.mSupportsDynamicUpdate
+                            ? FormatSpec.FORWARD_LINK_ADDRESS_SIZE : 0);
             if (nodeSize != n.mCachedSize) {
                 throw new RuntimeException("Bug : Stored and computed node size differ");
             }
@@ -792,8 +793,7 @@ public class BinaryDictInputOutput {
         return (options.mFrenchLigatureProcessing ? FormatSpec.FRENCH_LIGATURE_PROCESSING_FLAG : 0)
                 + (options.mGermanUmlautProcessing ? FormatSpec.GERMAN_UMLAUT_PROCESSING_FLAG : 0)
                 + (hasBigrams ? FormatSpec.CONTAINS_BIGRAMS_FLAG : 0)
-                + (formatOptions.mHasParentAddress ? FormatSpec.HAS_PARENT_ADDRESS : 0)
-                + (formatOptions.mHasLinkedListNode ? FormatSpec.HAS_LINKEDLIST_NODE : 0);
+                + (formatOptions.mSupportsDynamicUpdate ? FormatSpec.SUPPORTS_DYNAMIC_UPDATE : 0);
     }
 
     /**
@@ -857,7 +857,7 @@ public class BinaryDictInputOutput {
             byte flags = makeCharGroupFlags(group, groupAddress, childrenOffset);
             buffer[index++] = flags;
 
-            if (hasParentAddress(formatOptions)) {
+            if (supportsDynamicUpdate(formatOptions)) {
                 if (parentAddress == FormatSpec.NO_PARENT_ADDRESS) {
                     // this node is the root node.
                     buffer[index] = buffer[index + 1] = buffer[index + 2] = 0;
@@ -927,7 +927,7 @@ public class BinaryDictInputOutput {
             }
 
         }
-        if (formatOptions.mHasLinkedListNode) {
+        if (formatOptions.mSupportsDynamicUpdate) {
             buffer[index] = buffer[index + 1] = buffer[index + 2]
                     = FormatSpec.NO_FORWARD_LINK_ADDRESS;
             index += FormatSpec.FORWARD_LINK_ADDRESS_SIZE;
@@ -1112,7 +1112,7 @@ public class BinaryDictInputOutput {
         ++addressPointer;
 
         final int parentAddress;
-        if (hasParentAddress(options)) {
+        if (supportsDynamicUpdate(options)) {
             // read the parent address. (version 3)
             parentAddress = -buffer.readUnsignedInt24();
             addressPointer += 3;
@@ -1251,7 +1251,7 @@ public class BinaryDictInputOutput {
         final String result;
         final int originalPointer = buffer.position();
 
-        if (hasParentAddress(formatOptions)) {
+        if (supportsDynamicUpdate(formatOptions)) {
             result = getWordAtAddressWithParentAddress(buffer, headerSize, address, formatOptions);
         } else {
             result = getWordAtAddressWithoutParentAddress(buffer, headerSize, address,
@@ -1392,7 +1392,7 @@ public class BinaryDictInputOutput {
             }
 
             // reach the end of the array.
-            if (options.mHasLinkedListNode) {
+            if (options.mSupportsDynamicUpdate) {
                 final int nextAddress = buffer.readUnsignedInt24();
                 if (nextAddress >= 0 && nextAddress < buffer.limit()) {
                     buffer.position(nextAddress);
@@ -1400,7 +1400,7 @@ public class BinaryDictInputOutput {
                     break;
                 }
             }
-        } while (options.mHasLinkedListNode &&
+        } while (options.mSupportsDynamicUpdate &&
                 buffer.position() != FormatSpec.NO_FORWARD_LINK_ADDRESS);
 
         final Node node = new Node(nodeContents);
@@ -1469,8 +1469,7 @@ public class BinaryDictInputOutput {
                         0 != (optionsFlags & FormatSpec.GERMAN_UMLAUT_PROCESSING_FLAG),
                         0 != (optionsFlags & FormatSpec.FRENCH_LIGATURE_PROCESSING_FLAG)),
                 new FormatOptions(version,
-                        0 != (optionsFlags & FormatSpec.HAS_PARENT_ADDRESS),
-                        0 != (optionsFlags & FormatSpec.HAS_LINKEDLIST_NODE)));
+                        0 != (optionsFlags & FormatSpec.SUPPORTS_DYNAMIC_UPDATE)));
         return header;
     }
 
diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
index adc6037bb05f4fe174fe4ddeb12c233689b9a25a..63a61b46fdf26451cdf8e85fe42e2de1de71e973 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
@@ -145,17 +145,14 @@ public final class FormatSpec {
     static final int MAXIMUM_SUPPORTED_VERSION = 3;
     static final int NOT_A_VERSION_NUMBER = -1;
     static final int FIRST_VERSION_WITH_HEADER_SIZE = 2;
-    static final int FIRST_VERSION_WITH_PARENT_ADDRESS = 3;
-    static final int FIRST_VERSION_WITH_LINKEDLIST_NODE = 3;
+    static final int FIRST_VERSION_WITH_DYNAMIC_UPDATE = 3;
 
     // These options need to be the same numeric values as the one in the native reading code.
     static final int GERMAN_UMLAUT_PROCESSING_FLAG = 0x1;
     // TODO: Make the native reading code read this variable.
-    static final int HAS_PARENT_ADDRESS = 0x2;
+    static final int SUPPORTS_DYNAMIC_UPDATE = 0x2;
     static final int FRENCH_LIGATURE_PROCESSING_FLAG = 0x4;
     static final int CONTAINS_BIGRAMS_FLAG = 0x8;
-    // TODO: Make the native reading code read this variable.
-    static final int HAS_LINKEDLIST_NODE = 0x10;
 
     // TODO: Make this value adaptative to content data, store it in the header, and
     // use it in the reading code.
@@ -215,31 +212,17 @@ public final class FormatSpec {
      */
     public static class FormatOptions {
         public final int mVersion;
-        public final boolean mHasParentAddress;
-        public final boolean mHasLinkedListNode;
+        public final boolean mSupportsDynamicUpdate;
         public FormatOptions(final int version) {
             this(version, false);
         }
-        public FormatOptions(final int version, final boolean hasParentAddress) {
-            this(version, hasParentAddress, false);
-        }
-        public FormatOptions(final int version, final boolean hasParentAddress,
-                final boolean hasLinkedListNode) {
+        public FormatOptions(final int version, final boolean supportsDynamicUpdate) {
             mVersion = version;
-            if (version < FIRST_VERSION_WITH_PARENT_ADDRESS && hasParentAddress) {
-                throw new RuntimeException("Parent addresses are only supported with versions "
-                        + FIRST_VERSION_WITH_PARENT_ADDRESS + " and ulterior.");
-            }
-            mHasParentAddress = hasParentAddress;
-
-            if (version < FIRST_VERSION_WITH_LINKEDLIST_NODE && hasLinkedListNode) {
-                throw new RuntimeException("Linked list nodes are only supported with versions "
-                        + FIRST_VERSION_WITH_LINKEDLIST_NODE + " and ulterior.");
-            }
-            if (!hasParentAddress && hasLinkedListNode) {
-                throw new RuntimeException("Linked list nodes need parent addresses.");
+            if (version < FIRST_VERSION_WITH_DYNAMIC_UPDATE && supportsDynamicUpdate) {
+                throw new RuntimeException("Dynamic updates are only supported with versions "
+                        + FIRST_VERSION_WITH_DYNAMIC_UPDATE + " and ulterior.");
             }
-            mHasLinkedListNode = hasLinkedListNode;
+            mSupportsDynamicUpdate = supportsDynamicUpdate;
         }
     }
 
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
index 539021f24e40c6e41fabbc87defd87b4e3c3b6d7..2f954318c51238f70b8d28e20224a197e9eb5ba6 100644
--- a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictIOTests.java
@@ -65,13 +65,10 @@ public class BinaryDictIOTests extends AndroidTestCase {
             CollectionUtils.newSparseArray();
 
     private static final FormatSpec.FormatOptions VERSION2 = new FormatSpec.FormatOptions(2);
-    private static final FormatSpec.FormatOptions VERSION3_WITHOUT_PARENTADDRESS =
-            new FormatSpec.FormatOptions(3, false /* hasParentAddress */);
-    private static final FormatSpec.FormatOptions VERSION3_WITH_PARENTADDRESS =
-            new FormatSpec.FormatOptions(3, true /* hasParentAddress */);
-    private static final FormatSpec.FormatOptions VERSION3_WITH_LINKEDLIST_NODE =
-            new FormatSpec.FormatOptions(3, true /* hasParentAddress */,
-                    true /* hasLinkedListNode */);
+    private static final FormatSpec.FormatOptions VERSION3_WITHOUT_DYNAMIC_UPDATE =
+            new FormatSpec.FormatOptions(3, false /* supportsDynamicUpdate */);
+    private static final FormatSpec.FormatOptions VERSION3_WITH_DYNAMIC_UPDATE =
+            new FormatSpec.FormatOptions(3, true /* supportsDynamicUpdate */);
 
     private static final String[] CHARACTERS = {
         "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
@@ -240,8 +237,7 @@ public class BinaryDictIOTests extends AndroidTestCase {
         String result = " : buffer type = "
                 + ((bufferType == USE_BYTE_BUFFER) ? "byte buffer" : "byte array");
         result += " : version = " + formatOptions.mVersion;
-        return result + ", hasParentAddress = " + formatOptions.mHasParentAddress
-                + ", hasLinkedListNode = " + formatOptions.mHasLinkedListNode;
+        return result + ", supportsDynamicUpdate = " + formatOptions.mSupportsDynamicUpdate;
     }
 
     // Tests for readDictionaryBinary and writeDictionaryBinary
@@ -308,9 +304,8 @@ public class BinaryDictIOTests extends AndroidTestCase {
         final List<String> results = CollectionUtils.newArrayList();
 
         runReadAndWriteTests(results, USE_BYTE_BUFFER, VERSION2);
-        runReadAndWriteTests(results, USE_BYTE_BUFFER, VERSION3_WITHOUT_PARENTADDRESS);
-        runReadAndWriteTests(results, USE_BYTE_BUFFER, VERSION3_WITH_PARENTADDRESS);
-        runReadAndWriteTests(results, USE_BYTE_BUFFER, VERSION3_WITH_LINKEDLIST_NODE);
+        runReadAndWriteTests(results, USE_BYTE_BUFFER, VERSION3_WITHOUT_DYNAMIC_UPDATE);
+        runReadAndWriteTests(results, USE_BYTE_BUFFER, VERSION3_WITH_DYNAMIC_UPDATE);
 
         for (final String result : results) {
             Log.d(TAG, result);
@@ -321,9 +316,8 @@ public class BinaryDictIOTests extends AndroidTestCase {
         final List<String> results = CollectionUtils.newArrayList();
 
         runReadAndWriteTests(results, USE_BYTE_ARRAY, VERSION2);
-        runReadAndWriteTests(results, USE_BYTE_ARRAY, VERSION3_WITHOUT_PARENTADDRESS);
-        runReadAndWriteTests(results, USE_BYTE_ARRAY, VERSION3_WITH_PARENTADDRESS);
-        runReadAndWriteTests(results, USE_BYTE_ARRAY, VERSION3_WITH_LINKEDLIST_NODE);
+        runReadAndWriteTests(results, USE_BYTE_ARRAY, VERSION3_WITHOUT_DYNAMIC_UPDATE);
+        runReadAndWriteTests(results, USE_BYTE_ARRAY, VERSION3_WITH_DYNAMIC_UPDATE);
 
         for (final String result : results) {
             Log.d(TAG, result);
@@ -455,9 +449,8 @@ public class BinaryDictIOTests extends AndroidTestCase {
         final List<String> results = CollectionUtils.newArrayList();
 
         runReadUnigramsAndBigramsTests(results, USE_BYTE_BUFFER, VERSION2);
-        runReadUnigramsAndBigramsTests(results, USE_BYTE_BUFFER, VERSION3_WITHOUT_PARENTADDRESS);
-        runReadUnigramsAndBigramsTests(results, USE_BYTE_BUFFER, VERSION3_WITH_PARENTADDRESS);
-        runReadUnigramsAndBigramsTests(results, USE_BYTE_BUFFER, VERSION3_WITH_LINKEDLIST_NODE);
+        runReadUnigramsAndBigramsTests(results, USE_BYTE_BUFFER, VERSION3_WITHOUT_DYNAMIC_UPDATE);
+        runReadUnigramsAndBigramsTests(results, USE_BYTE_BUFFER, VERSION3_WITH_DYNAMIC_UPDATE);
 
         for (final String result : results) {
             Log.d(TAG, result);
@@ -468,9 +461,8 @@ public class BinaryDictIOTests extends AndroidTestCase {
         final List<String> results = CollectionUtils.newArrayList();
 
         runReadUnigramsAndBigramsTests(results, USE_BYTE_ARRAY, VERSION2);
-        runReadUnigramsAndBigramsTests(results, USE_BYTE_ARRAY, VERSION3_WITHOUT_PARENTADDRESS);
-        runReadUnigramsAndBigramsTests(results, USE_BYTE_ARRAY, VERSION3_WITH_PARENTADDRESS);
-        runReadUnigramsAndBigramsTests(results, USE_BYTE_ARRAY, VERSION3_WITH_LINKEDLIST_NODE);
+        runReadUnigramsAndBigramsTests(results, USE_BYTE_ARRAY, VERSION3_WITHOUT_DYNAMIC_UPDATE);
+        runReadUnigramsAndBigramsTests(results, USE_BYTE_ARRAY, VERSION3_WITH_DYNAMIC_UPDATE);
 
         for (final String result : results) {
             Log.d(TAG, result);
@@ -528,7 +520,7 @@ public class BinaryDictIOTests extends AndroidTestCase {
                 new FusionDictionary.DictionaryOptions(
                         new HashMap<String, String>(), false, false));
         addUnigrams(sWords.size(), dict, sWords, null /* shortcutMap */);
-        timeWritingDictToFile(file, dict, VERSION3_WITH_LINKEDLIST_NODE);
+        timeWritingDictToFile(file, dict, VERSION3_WITH_DYNAMIC_UPDATE);
 
         final FusionDictionaryBufferInterface buffer = getBuffer(file, USE_BYTE_ARRAY);
 
@@ -569,7 +561,7 @@ public class BinaryDictIOTests extends AndroidTestCase {
     public void testDeleteWord() {
         File file = null;
         try {
-            file = File.createTempFile("testGetTerminalPosition", ".dict");
+            file = File.createTempFile("testDeleteWord", ".dict");
         } catch (IOException e) {
             // do nothing
         }
@@ -579,7 +571,7 @@ public class BinaryDictIOTests extends AndroidTestCase {
                 new FusionDictionary.DictionaryOptions(
                         new HashMap<String, String>(), false, false));
         addUnigrams(sWords.size(), dict, sWords, null /* shortcutMap */);
-        timeWritingDictToFile(file, dict, VERSION3_WITH_LINKEDLIST_NODE);
+        timeWritingDictToFile(file, dict, VERSION3_WITH_DYNAMIC_UPDATE);
 
         final FusionDictionaryBufferInterface buffer = getBuffer(file, USE_BYTE_ARRAY);