diff --git a/native/src/defines.h b/native/src/defines.h
index d636e51..fdca0b2 100644
--- a/native/src/defines.h
+++ b/native/src/defines.h
@@ -205,6 +205,7 @@
 // Word limit for sub queues used in WordsPriorityQueuePool.  Sub queues are temporary queues used
 // for better performance.
 #define SUB_QUEUE_MAX_WORDS 5
+#define SUB_QUEUE_MAX_COUNT 10
 
 #define MAX_DEPTH_MULTIPLIER 3
 
diff --git a/native/src/words_priority_queue.h b/native/src/words_priority_queue.h
index 84f2523..97d45c1 100644
--- a/native/src/words_priority_queue.h
+++ b/native/src/words_priority_queue.h
@@ -48,6 +48,7 @@
             mSuggestedWords[i].mUsed = false;
         }
     }
+
     ~WordsPriorityQueue() {
         delete[] mSuggestedWords;
     }
diff --git a/native/src/words_priority_queue_pool.h b/native/src/words_priority_queue_pool.h
index 3862976..bf9619e 100644
--- a/native/src/words_priority_queue_pool.h
+++ b/native/src/words_priority_queue_pool.h
@@ -17,6 +17,8 @@
 #ifndef LATINIME_WORDS_PRIORITY_QUEUE_POOL_H
 #define LATINIME_WORDS_PRIORITY_QUEUE_POOL_H
 
+#include <assert.h>
+#include <new>
 #include "words_priority_queue.h"
 
 namespace latinime {
@@ -24,30 +26,45 @@
 class WordsPriorityQueuePool {
  public:
     WordsPriorityQueuePool(int mainQueueMaxWords, int subQueueMaxWords, int maxWordLength) {
-        mMasterQueue = new WordsPriorityQueue(mainQueueMaxWords, maxWordLength);
-        mSubQueue1 = new WordsPriorityQueue(subQueueMaxWords, maxWordLength);
-        mSubQueue2 = new WordsPriorityQueue(subQueueMaxWords, maxWordLength);
+        mMasterQueue = new(mMasterQueueBuf) WordsPriorityQueue(mainQueueMaxWords, maxWordLength);
+        for (int i = 0, subQueueBufOffset = 0; i < SUB_QUEUE_MAX_COUNT;
+                ++i, subQueueBufOffset += sizeof(WordsPriorityQueue)) {
+            mSubQueues1[i] = new(mSubQueueBuf1 + subQueueBufOffset)
+                    WordsPriorityQueue(subQueueMaxWords, maxWordLength);
+            mSubQueues2[i] = new(mSubQueueBuf2 + subQueueBufOffset)
+                    WordsPriorityQueue(subQueueMaxWords, maxWordLength);
+        }
     }
 
-    ~WordsPriorityQueuePool() {
-        delete mMasterQueue;
+    virtual ~WordsPriorityQueuePool() {
     }
 
     WordsPriorityQueue* getMasterQueue() {
         return mMasterQueue;
     }
+
     // TODO: Come up with more generic pool
-    WordsPriorityQueue* getSubQueue1() {
-        return mSubQueue1;
+    WordsPriorityQueue* getSubQueue1(const int id) {
+        if (DEBUG_WORDS_PRIORITY_QUEUE) {
+            assert(id >= 0 && id < SUB_QUEUE_MAX_COUNT);
+        }
+        return mSubQueues1[id];
     }
-    WordsPriorityQueue* getSubQueue2() {
-        return mSubQueue2;
+
+    WordsPriorityQueue* getSubQueue2(const int id) {
+        if (DEBUG_WORDS_PRIORITY_QUEUE) {
+            assert(id >= 0 && id < SUB_QUEUE_MAX_COUNT);
+        }
+        return mSubQueues2[id];
     }
 
  private:
-    WordsPriorityQueue *mMasterQueue;
-    WordsPriorityQueue *mSubQueue1;
-    WordsPriorityQueue *mSubQueue2;
+    WordsPriorityQueue* mMasterQueue;
+    WordsPriorityQueue* mSubQueues1[SUB_QUEUE_MAX_COUNT];
+    WordsPriorityQueue* mSubQueues2[SUB_QUEUE_MAX_COUNT];
+    char mMasterQueueBuf[sizeof(WordsPriorityQueue)];
+    char mSubQueueBuf1[SUB_QUEUE_MAX_COUNT * sizeof(WordsPriorityQueue)];
+    char mSubQueueBuf2[SUB_QUEUE_MAX_COUNT * sizeof(WordsPriorityQueue)];
 };
 }
 
