diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index 3f27ef9..bdde36a 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -60,7 +60,7 @@
     <string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Moderat"</string>
     <string name="auto_correction_threshold_mode_aggeressive" msgid="3524029103734923819">"Omfattende"</string>
     <string name="auto_correction_threshold_mode_very_aggeressive" msgid="3386782235540547678">"Veldig aggressiv"</string>
-    <string name="bigram_prediction" msgid="5809665643352206540">"Forslag til rettelser av neste ord"</string>
+    <string name="bigram_prediction" msgid="5809665643352206540">"Forslag til neste ord"</string>
     <string name="bigram_prediction_summary" msgid="3253961591626441019">"Basert på det forrige ordet"</string>
     <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g>: Lagret"</string>
     <string name="label_go_key" msgid="1635148082137219148">"Utfør"</string>
diff --git a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
index 8cef6fa..60e6fa1 100644
--- a/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/UserBinaryDictionary.java
@@ -34,7 +34,10 @@
  */
 public class UserBinaryDictionary extends ExpandableBinaryDictionary {
 
-    // TODO: use Words.SHORTCUT when it's public in the SDK
+    // The user dictionary provider uses an empty string to mean "all languages".
+    private static final String USER_DICTIONARY_ALL_LANGUAGES = "";
+
+    // TODO: use Words.SHORTCUT when we target JellyBean or above
     final static String SHORTCUT = "shortcut";
     private static final String[] PROJECTION_QUERY;
     static {
@@ -71,7 +74,12 @@
             final boolean alsoUseMoreRestrictiveLocales) {
         super(context, getFilenameWithLocale(NAME, locale), Dictionary.TYPE_USER);
         if (null == locale) throw new NullPointerException(); // Catch the error earlier
-        mLocale = locale;
+        if (SubtypeLocale.NO_LANGUAGE.equals(locale)) {
+            // If we don't have a locale, insert into the "all locales" user dictionary.
+            mLocale = USER_DICTIONARY_ALL_LANGUAGES;
+        } else {
+            mLocale = locale;
+        }
         mAlsoUseMoreRestrictiveLocales = alsoUseMoreRestrictiveLocales;
         // Perform a managed query. The Activity will handle closing and re-querying the cursor
         // when needed.
diff --git a/native/jni/Android.mk b/native/jni/Android.mk
index df98680..31feb95 100644
--- a/native/jni/Android.mk
+++ b/native/jni/Android.mk
@@ -26,8 +26,7 @@
 LATIN_IME_SRC_DIR := src
 LATIN_IME_SRC_FULLPATH_DIR := $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
 
-LOCAL_C_INCLUDES += $(LATIN_IME_SRC_FULLPATH_DIR) \
-    $(addprefix $(LATIN_IME_SRC_FULLPATH_DIR)/, gesture gesture/impl)
+LOCAL_C_INCLUDES += $(LATIN_IME_SRC_FULLPATH_DIR) $(LATIN_IME_SRC_FULLPATH_DIR)/gesture
 
 LOCAL_CFLAGS += -Werror -Wall
 
@@ -50,11 +49,11 @@
     proximity_info.cpp \
     proximity_info_state.cpp \
     unigram_dictionary.cpp \
-    gesture/build_check.cpp
+    gesture/incremental_decoder_interface.cpp
 
 LOCAL_SRC_FILES := \
     $(LATIN_IME_JNI_SRC_FILES) \
-    $(addprefix $(LATIN_IME_SRC_DIR)/,$(LATIN_IME_CORE_SRC_FILES))
+    $(addprefix $(LATIN_IME_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES))
 
 ifeq ($(FLAG_DO_PROFILE), true)
     $(warning Making profiling version of native library)
@@ -66,7 +65,7 @@
 endif # FLAG_DBG
 endif # FLAG_DO_PROFILE
 
-LOCAL_MODULE := libjni_latinime_static
+LOCAL_MODULE := libjni_latinime_common_static
 LOCAL_MODULE_TAGS := optional
 
 ifdef HISTORICAL_NDK_VERSIONS_ROOT # In the platform build system
@@ -80,7 +79,7 @@
 include $(CLEAR_VARS)
 
 LOCAL_C_INCLUDES += $(LATIN_IME_SRC_FULLPATH_DIR) \
-    $(addprefix $(LATIN_IME_SRC_FULLPATH_DIR)/, gesture gesture/impl gesture/impl/header)
+    $(addprefix $(LATIN_IME_SRC_FULLPATH_DIR)/, gesture gesture/impl)
 
 LOCAL_CFLAGS += -Werror -Wall
 
@@ -93,7 +92,7 @@
     gesture/impl/token_beam_impl.cpp \
     gesture/impl/token_impl.cpp
 
-LOCAL_SRC_FILES := $(addprefix $(LATIN_IME_SRC_DIR)/,$(LATIN_IME_GESTURE_IMPL_SRC_FILES))
+LOCAL_SRC_FILES := $(addprefix $(LATIN_IME_SRC_DIR)/, $(LATIN_IME_GESTURE_IMPL_SRC_FILES))
 
 ifeq ($(FLAG_DO_PROFILE), true)
     $(warning Making profiling version of native library)
@@ -105,7 +104,8 @@
 endif # FLAG_DBG
 endif # FLAG_DO_PROFILE
 
-LOCAL_MODULE := libjni_latinime_gesture_impl_static
+# TODO: Can remove this static library from AOSP completely?
+LOCAL_MODULE := libjni_latinime_gesture_impl_aosp_static
 LOCAL_MODULE_TAGS := optional
 
 ifdef HISTORICAL_NDK_VERSIONS_ROOT # In the platform build system
@@ -119,7 +119,8 @@
 include $(CLEAR_VARS)
 
 # All code in LOCAL_WHOLE_STATIC_LIBRARIES will be built into this shared library.
-LOCAL_WHOLE_STATIC_LIBRARIES := libjni_latinime_static libjni_latinime_gesture_impl_static
+LOCAL_WHOLE_STATIC_LIBRARIES := \
+    libjni_latinime_common_static libjni_latinime_gesture_impl_aosp_static
 
 ifdef HISTORICAL_NDK_VERSIONS_ROOT # In the platform build system
 LOCAL_SHARED_LIBRARIES := libstlport
diff --git a/native/jni/src/dictionary.cpp b/native/jni/src/dictionary.cpp
index 10ea9fe..60f3c94 100644
--- a/native/jni/src/dictionary.cpp
+++ b/native/jni/src/dictionary.cpp
@@ -22,6 +22,7 @@
 #include "binary_format.h"
 #include "defines.h"
 #include "dictionary.h"
+#include "incremental_decoder_interface.h"
 
 namespace latinime {
 
@@ -43,7 +44,8 @@
     mUnigramDictionary = new UnigramDictionary(mDict + headerSize, typedLetterMultiplier,
             fullWordMultiplier, maxWordLength, maxWords, options);
     mBigramDictionary = new BigramDictionary(mDict + headerSize, maxWordLength);
-    mGestureDecoder = new GestureDecoder(maxWordLength, maxWords);
+    mGestureDecoder = IncrementalDecoderInterface::getGestureDecoderInstance(maxWordLength,
+            maxWords);
     mGestureDecoder->setDict(mUnigramDictionary, mBigramDictionary,
             mDict + headerSize /* dict root */, 0 /* root pos */);
 }
@@ -51,6 +53,7 @@
 Dictionary::~Dictionary() {
     delete mUnigramDictionary;
     delete mBigramDictionary;
+    delete mGestureDecoder;
 }
 
 int Dictionary::getFrequency(const int32_t *word, int length) const {
diff --git a/native/jni/src/dictionary.h b/native/jni/src/dictionary.h
index 8b47694..2b0619c 100644
--- a/native/jni/src/dictionary.h
+++ b/native/jni/src/dictionary.h
@@ -22,7 +22,7 @@
 #include "bigram_dictionary.h"
 #include "char_utils.h"
 #include "defines.h"
-#include "gesture/gesture_decoder.h"
+#include "incremental_decoder_interface.h"
 #include "proximity_info.h"
 #include "unigram_dictionary.h"
 #include "words_priority_queue_pool.h"
@@ -87,7 +87,7 @@
 
     const UnigramDictionary *mUnigramDictionary;
     const BigramDictionary *mBigramDictionary;
-    GestureDecoder *mGestureDecoder;
+    IncrementalDecoderInterface *mGestureDecoder;
 };
 
 // public static utility methods
diff --git a/native/jni/src/gesture/gesture_decoder.h b/native/jni/src/gesture/gesture_decoder.h
deleted file mode 100644
index 8e79555..0000000
--- a/native/jni/src/gesture/gesture_decoder.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef LATINIME_GESTURE_DECODER_H
-#define LATINIME_GESTURE_DECODER_H
-
-#include "defines.h"
-#include "gesture_decoder_impl.h"
-
-namespace latinime {
-
-class GestureDecoder : public GestureDecoderImpl {
-
- public:
-    GestureDecoder(int maxWordLength, int maxWords) :
-            GestureDecoderImpl(maxWordLength, maxWords) {
-    }
-
- private:
-    DISALLOW_IMPLICIT_CONSTRUCTORS(GestureDecoder);
-};
-} // namespace latinime
-
-#endif // LATINIME_INCREMENTAL_DECODER_H
diff --git a/native/jni/src/gesture/impl/gesture_decoder_impl.cpp b/native/jni/src/gesture/impl/gesture_decoder_impl.cpp
index 59937a4..035850e 100644
--- a/native/jni/src/gesture/impl/gesture_decoder_impl.cpp
+++ b/native/jni/src/gesture/impl/gesture_decoder_impl.cpp
@@ -15,7 +15,26 @@
  */
 
 #include "gesture_decoder_impl.h"
+#include "incremental_decoder_interface.h"
 
 namespace latinime {
+
+// A factory method for GestureDecoderImpl
+static IncrementalDecoderInterface *getDecoderInstance(int maxWordLength, int maxWords) {
+    return new GestureDecoderImpl(maxWordLength, maxWords);
+}
+
+// An ad-hoc internal class to register the factory method defined above
+class GestureDecoderFactoryRegisterer {
+ public:
+    GestureDecoderFactoryRegisterer() {
+        IncrementalDecoderInterface::setGestureDecoderFactoryMethod(getDecoderInstance);
+    }
+ private:
+    DISALLOW_COPY_AND_ASSIGN(GestureDecoderFactoryRegisterer);
 };
-// namespace latinime
+
+// To invoke the GestureDecoderFactoryRegisterer constructor in the global constructor
+// Not sure, but can be static?
+GestureDecoderFactoryRegisterer gestureDecoderFactoryRegisterer;
+} // namespace latinime
diff --git a/native/jni/src/gesture/impl/gesture_decoder_impl.h b/native/jni/src/gesture/impl/gesture_decoder_impl.h
index 0ca8994..6de807b 100644
--- a/native/jni/src/gesture/impl/gesture_decoder_impl.h
+++ b/native/jni/src/gesture/impl/gesture_decoder_impl.h
@@ -18,15 +18,14 @@
 #define LATINIME_GESTURE_DECODER_IMPL_H
 
 #include "defines.h"
-#include "incremental_decoder.h"
+#include "incremental_decoder_impl.h"
 
 namespace latinime {
 
-class GestureDecoderImpl : public IncrementalDecoder {
-
+class GestureDecoderImpl : public IncrementalDecoderImpl {
  public:
     GestureDecoderImpl(int maxWordLength, int maxWords) :
-            IncrementalDecoder(maxWordLength, maxWords) {
+            IncrementalDecoderImpl(maxWordLength, maxWords) {
     }
 
     int getSuggestions(ProximityInfo *pInfo, int *inputXs, int *inputYs, int *times,
@@ -39,5 +38,4 @@
     DISALLOW_IMPLICIT_CONSTRUCTORS(GestureDecoderImpl);
 };
 } // namespace latinime
-
 #endif // LATINIME_GESTURE_DECODER_IMPL_H
diff --git a/native/jni/src/gesture/impl/incremental_decoder_impl.cpp b/native/jni/src/gesture/impl/incremental_decoder_impl.cpp
index b7e8b3b..f2b76ed 100644
--- a/native/jni/src/gesture/impl/incremental_decoder_impl.cpp
+++ b/native/jni/src/gesture/impl/incremental_decoder_impl.cpp
@@ -15,7 +15,26 @@
  */
 
 #include "incremental_decoder_impl.h"
+#include "incremental_decoder_interface.h"
 
 namespace latinime {
+
+// A factory method for IncrementalDecoderImpl
+static IncrementalDecoderInterface *getDecoderInstance(int maxWordLength, int maxWords) {
+    return new IncrementalDecoderImpl(maxWordLength, maxWords);
+}
+
+// An ad-hoc internal class to register the factory method defined above
+class IncrementalDecoderFactoryRegisterer {
+ public:
+    IncrementalDecoderFactoryRegisterer() {
+        IncrementalDecoderInterface::setIncrementalDecoderFactoryMethod(getDecoderInstance);
+    }
+ private:
+    DISALLOW_COPY_AND_ASSIGN(IncrementalDecoderFactoryRegisterer);
 };
-// namespace latinime
+
+// To invoke the IncrementalDecoderFactoryRegisterer constructor in the global constructor
+// Not sure, but can be static?
+IncrementalDecoderFactoryRegisterer incrementalDecoderFactoryRegisterer;
+} // namespace latinime
diff --git a/native/jni/src/gesture/impl/incremental_decoder_impl.h b/native/jni/src/gesture/impl/incremental_decoder_impl.h
index 84121e8..50ed143 100644
--- a/native/jni/src/gesture/impl/incremental_decoder_impl.h
+++ b/native/jni/src/gesture/impl/incremental_decoder_impl.h
@@ -17,25 +17,30 @@
 #ifndef LATINIME_INCREMENTAL_DECODER_IMPL_H
 #define LATINIME_INCREMENTAL_DECODER_IMPL_H
 
-#include "bigram_dictionary.h"
 #include "defines.h"
 #include "incremental_decoder_interface.h"
-#include "unigram_dictionary.h"
 
 namespace latinime {
 
-class IncrementalDecoderImpl : IncrementalDecoderInterface {
+class UnigramDictionary;
+class BigramDictionary;
 
+class IncrementalDecoderImpl : public IncrementalDecoderInterface {
  public:
-     IncrementalDecoderImpl(int maxWordLength, int maxWords) { };
-     void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram,
-             const uint8_t *dictRoot, int rootPos) { };
-     void setPrevWord(const int32_t *prevWord, int prevWordLength) { };
-     void reset() { };
+    IncrementalDecoderImpl(int maxWordLength, int maxWords) { };
+    void setDict(const UnigramDictionary *dict, const BigramDictionary *bigram,
+            const uint8_t *dictRoot, int rootPos) { };
+    void setPrevWord(const int32_t *prevWord, int prevWordLength) { };
+    void reset() { };
+
+    int getSuggestions(ProximityInfo *pInfo, int *inputXs, int *inputYs, int *times,
+            int *pointerIds, int *codes, int inputSize, int commitPoint,
+            unsigned short *outWords, int *frequencies, int *outputIndices) {
+        return 0;
+    }
 
  private:
      DISALLOW_IMPLICIT_CONSTRUCTORS(IncrementalDecoderImpl);
 };
 } // namespace latinime
-
 #endif // LATINIME_INCREMENTAL_DECODER_IMPL_H
diff --git a/native/jni/src/gesture/impl/token_beam_impl.cpp b/native/jni/src/gesture/impl/token_beam_impl.cpp
index b2b73c2..ffac4dd 100644
--- a/native/jni/src/gesture/impl/token_beam_impl.cpp
+++ b/native/jni/src/gesture/impl/token_beam_impl.cpp
@@ -17,5 +17,4 @@
 #include "token_beam_impl.h"
 
 namespace latinime {
-};
-// namespace latinime
+} // namespace latinime
diff --git a/native/jni/src/gesture/impl/token_beam_impl.h b/native/jni/src/gesture/impl/token_beam_impl.h
index 3325056..50de925 100644
--- a/native/jni/src/gesture/impl/token_beam_impl.h
+++ b/native/jni/src/gesture/impl/token_beam_impl.h
@@ -26,5 +26,4 @@
     DISALLOW_IMPLICIT_CONSTRUCTORS(TokenBeamImpl);
 };
 } // namespace latinime
-
 #endif // LATINIME_TOKEN_BEAM_IMPL_H
diff --git a/native/jni/src/gesture/impl/token_impl.cpp b/native/jni/src/gesture/impl/token_impl.cpp
index c7efeb1..fa667f0 100644
--- a/native/jni/src/gesture/impl/token_impl.cpp
+++ b/native/jni/src/gesture/impl/token_impl.cpp
@@ -17,5 +17,4 @@
 #include "token_impl.h"
 
 namespace latinime {
-};
-// namespace latinime
+} // namespace latinime
diff --git a/native/jni/src/gesture/impl/token_impl.h b/native/jni/src/gesture/impl/token_impl.h
index 0ed7d00..5f2368a 100644
--- a/native/jni/src/gesture/impl/token_impl.h
+++ b/native/jni/src/gesture/impl/token_impl.h
@@ -26,5 +26,4 @@
     DISALLOW_IMPLICIT_CONSTRUCTORS(TokenImpl);
 };
 } // namespace latinime
-
 #endif // LATINIME_TOKEN_IMPL_H
diff --git a/native/jni/src/gesture/incremental_decoder.h b/native/jni/src/gesture/incremental_decoder.h
deleted file mode 100644
index fe93552..0000000
--- a/native/jni/src/gesture/incremental_decoder.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef LATINIME_INCREMENTAL_DECODER_H
-#define LATINIME_INCREMENTAL_DECODER_H
-
-#include "defines.h"
-#include "incremental_decoder_impl.h"
-
-namespace latinime {
-
-class IncrementalDecoder : public IncrementalDecoderImpl {
-
- public:
-     IncrementalDecoder(int maxWordLength, int maxWords) :
-             IncrementalDecoderImpl(maxWordLength, maxWords) {
-     }
-
- private:
-     DISALLOW_IMPLICIT_CONSTRUCTORS(IncrementalDecoder);
-};
-} // namespace latinime
-
-#endif // LATINIME_INCREMENTAL_DECODER_H
diff --git a/native/jni/src/gesture/build_check.cpp b/native/jni/src/gesture/incremental_decoder_interface.cpp
similarity index 66%
rename from native/jni/src/gesture/build_check.cpp
rename to native/jni/src/gesture/incremental_decoder_interface.cpp
index 8ec94f5..9fb2a17 100644
--- a/native/jni/src/gesture/build_check.cpp
+++ b/native/jni/src/gesture/incremental_decoder_interface.cpp
@@ -14,8 +14,11 @@
  * limitations under the License.
  */
 
-#include "gesture_decoder.h"
+#include "incremental_decoder_interface.h"
 
 namespace latinime {
-};
-// namespace latinime
+    IncrementalDecoderInterface *
+            (*IncrementalDecoderInterface::sGestureDecoderFactoryMethod)(int, int) = 0;
+    IncrementalDecoderInterface *
+            (*IncrementalDecoderInterface::sIncrementalDecoderFactoryMethod)(int, int) = 0;
+} // namespace latinime
diff --git a/native/jni/src/gesture/incremental_decoder_interface.h b/native/jni/src/gesture/incremental_decoder_interface.h
index 565f89c..1f92aff 100644
--- a/native/jni/src/gesture/incremental_decoder_interface.h
+++ b/native/jni/src/gesture/incremental_decoder_interface.h
@@ -17,15 +17,16 @@
 #ifndef LATINIME_INCREMENTAL_DECODER_INTERFACE_H
 #define LATINIME_INCREMENTAL_DECODER_INTERFACE_H
 
-#include "bigram_dictionary.h"
+#include <stdint.h>
 #include "defines.h"
-#include "proximity_info.h"
-#include "unigram_dictionary.h"
 
 namespace latinime {
 
-class IncrementalDecoderInterface {
+class UnigramDictionary;
+class BigramDictionary;
+class ProximityInfo;
 
+class IncrementalDecoderInterface {
  public:
     virtual int getSuggestions(ProximityInfo *pInfo, int *inputXs, int *inputYs, int *times,
             int *pointerIds, int *codes, int inputSize, int commitPoint,
@@ -35,7 +36,35 @@
             const uint8_t *dictRoot, int rootPos) = 0;
     virtual void setPrevWord(const int32_t *prevWord, int prevWordLength) = 0;
     virtual ~IncrementalDecoderInterface() { };
+
+    static IncrementalDecoderInterface *getGestureDecoderInstance(int maxWordLength, int maxWords) {
+        if (sGestureDecoderFactoryMethod) {
+            return sGestureDecoderFactoryMethod(maxWordLength, maxWords);
+        }
+        return 0;
+    }
+
+    static IncrementalDecoderInterface *getIncrementalDecoderInstance(int maxWordLength,
+            int maxWords) {
+        if (sIncrementalDecoderFactoryMethod) {
+            return sIncrementalDecoderFactoryMethod(maxWordLength, maxWords);
+        }
+        return 0;
+    }
+
+    static void setGestureDecoderFactoryMethod(
+            IncrementalDecoderInterface *(*factoryMethod)(int, int)) {
+        sGestureDecoderFactoryMethod = factoryMethod;
+    }
+
+    static void setIncrementalDecoderFactoryMethod(
+            IncrementalDecoderInterface *(*factoryMethod)(int, int)) {
+        sIncrementalDecoderFactoryMethod = factoryMethod;
+    }
+
+ private:
+    static IncrementalDecoderInterface *(*sGestureDecoderFactoryMethod)(int, int);
+    static IncrementalDecoderInterface *(*sIncrementalDecoderFactoryMethod)(int, int);
 };
 } // namespace latinime
-
 #endif // LATINIME_INCREMENTAL_DECODER_INTERFACE_H
