diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
index d8081e1..3515287 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java
@@ -249,16 +249,6 @@
     public final DictionaryOptions mOptions;
     public final Node mRoot;
 
-    public FusionDictionary() {
-        mRoot = new Node();
-        mOptions = new DictionaryOptions(new HashMap<String, String>());
-    }
-
-    public FusionDictionary(final HashMap<String, String> attributes) {
-        mRoot = new Node();
-        mOptions = new DictionaryOptions(attributes);
-    }
-
     public FusionDictionary(final Node root, final DictionaryOptions options) {
         mRoot = root;
         mOptions = options;
diff --git a/tools/makedict/src/com/android/inputmethod/latin/makedict/XmlDictInputOutput.java b/tools/makedict/src/com/android/inputmethod/latin/makedict/XmlDictInputOutput.java
index c51eea5..0acd1b2 100644
--- a/tools/makedict/src/com/android/inputmethod/latin/makedict/XmlDictInputOutput.java
+++ b/tools/makedict/src/com/android/inputmethod/latin/makedict/XmlDictInputOutput.java
@@ -16,6 +16,8 @@
 
 package com.android.inputmethod.latin.makedict;
 
+import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
+import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
 import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString;
 
 import java.io.IOException;
@@ -61,7 +63,7 @@
         private static final int END = 5;
         private static final int UNKNOWN = 6;
 
-        final FusionDictionary mDictionary;
+        FusionDictionary mDictionary;
         int mState; // the state of the parser
         int mFreq; // the currently read freq
         String mWord; // the current word
@@ -71,13 +73,12 @@
         /**
          * Create the handler.
          *
-         * @param dict the dictionary to construct.
+         * @param shortcuts the shortcuts as a map. This may be empty, but may not be null.
          * @param bigrams the bigrams as a map. This may be empty, but may not be null.
          */
-        public UnigramHandler(final FusionDictionary dict,
-                final HashMap<String, ArrayList<WeightedString>> shortcuts,
+        public UnigramHandler(final HashMap<String, ArrayList<WeightedString>> shortcuts,
                 final HashMap<String, ArrayList<WeightedString>> bigrams) {
-            mDictionary = dict;
+            mDictionary = null;
             mShortcutsMap = shortcuts;
             mBigramsMap = bigrams;
             mWord = "";
@@ -85,6 +86,17 @@
             mFreq = 0;
         }
 
+        public FusionDictionary getFinalDictionary() {
+            final FusionDictionary dict = mDictionary;
+            mDictionary = null;
+            mShortcutsMap.clear();
+            mBigramsMap.clear();
+            mWord = "";
+            mState = START;
+            mFreq = 0;
+            return dict;
+        }
+
         @Override
         public void startElement(String uri, String localName, String qName, Attributes attrs) {
             if (WORD_TAG.equals(localName)) {
@@ -97,10 +109,12 @@
                     }
                 }
             } else if (ROOT_TAG.equals(localName)) {
+                final HashMap<String, String> attributes = new HashMap<String, String>();
                 for (int attrIndex = 0; attrIndex < attrs.getLength(); ++attrIndex) {
                     final String attrName = attrs.getLocalName(attrIndex);
-                    mDictionary.mOptions.mAttributes.put(attrName, attrs.getValue(attrIndex));
+                    attributes.put(attrName, attrs.getValue(attrIndex));
                 }
+                mDictionary = new FusionDictionary(new Node(), new DictionaryOptions(attributes));
             } else {
                 mState = UNKNOWN;
             }
@@ -235,12 +249,11 @@
         final ShortcutHandler shortcutHandler = new ShortcutHandler();
         if (null != shortcuts) parser.parse(shortcuts, shortcutHandler);
 
-        final FusionDictionary dict = new FusionDictionary();
         final UnigramHandler unigramHandler =
-                new UnigramHandler(dict, shortcutHandler.getShortcutMap(),
+                new UnigramHandler(shortcutHandler.getShortcutMap(),
                         bigramHandler.getBigramMap());
         parser.parse(unigrams, unigramHandler);
-        return dict;
+        return unigramHandler.getFinalDictionary();
     }
 
     /**
diff --git a/tools/makedict/tests/com/android/inputmethod/latin/BinaryDictInputOutputTest.java b/tools/makedict/tests/com/android/inputmethod/latin/BinaryDictInputOutputTest.java
index 9682c9b..e19c7d5 100644
--- a/tools/makedict/tests/com/android/inputmethod/latin/BinaryDictInputOutputTest.java
+++ b/tools/makedict/tests/com/android/inputmethod/latin/BinaryDictInputOutputTest.java
@@ -16,9 +16,11 @@
 
 package com.android.inputmethod.latin.makedict;
 
+import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions;
 import com.android.inputmethod.latin.makedict.FusionDictionary.Node;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import junit.framework.TestCase;
 
@@ -38,7 +40,8 @@
     // Test the flattened array contains the expected number of nodes, and
     // that it does not contain any duplicates.
     public void testFlattenNodes() {
-        final FusionDictionary dict = new FusionDictionary();
+        final FusionDictionary dict = new FusionDictionary(new Node(),
+                new DictionaryOptions(new HashMap<String, String>()));
         dict.add("foo", 1, null, null);
         dict.add("fta", 1, null, null);
         dict.add("ftb", 1, null, null);
