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
