diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index dcc4568..3eafcb2 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -40,7 +40,6 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicReference;
 
 /**
  * Abstract base class for an expandable dictionary that can be created and updated dynamically
@@ -101,9 +100,6 @@
     /* A extension for a binary dictionary file. */
     protected static final String DICT_FILE_EXTENSION = ".dict";
 
-    private final AtomicReference<Runnable> mUnfinishedFlushingTask =
-            new AtomicReference<Runnable>();
-
     /**
      * Abstract method for loading initial contents of a given dictionary.
      */
@@ -561,14 +557,12 @@
      * Flush binary dictionary to dictionary file.
      */
     public void asyncFlushBinaryDictionary() {
-        final Runnable newTask = new Runnable() {
+        ExecutorUtils.getExecutor(mDictName).execute(new Runnable() {
             @Override
             public void run() {
                 flushDictionaryLocked();
             }
-        };
-        final Runnable oldTask = mUnfinishedFlushingTask.getAndSet(newTask);
-        ExecutorUtils.getExecutor(mDictName).replaceAndExecute(oldTask, newTask);
+        });
     }
 
     // TODO: Implement BinaryDictionary.isInDictionary().
diff --git a/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java b/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
index b10d08a..a23b3ac 100644
--- a/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
+++ b/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
@@ -47,16 +47,6 @@
     }
 
     /**
-     * Clears all queued tasks.
-     */
-    public void clearAllTasks() {
-        synchronized(mLock) {
-            mTasks.clear();
-            mPrioritizedTasks.clear();
-        }
-    }
-
-    /**
      * Enqueues the given task into the task queue.
      * @param r the enqueued task
      */
@@ -120,33 +110,10 @@
         }
     }
 
-    public void remove(final Runnable r) {
-        synchronized(mLock) {
-            mTasks.remove(r);
-            mPrioritizedTasks.remove(r);
-        }
-    }
-
-    public void replaceAndExecute(final Runnable oldTask, final Runnable newTask) {
-        synchronized(mLock) {
-            if (oldTask != null) remove(oldTask);
-            execute(newTask);
-        }
-    }
-
     public void shutdown() {
         synchronized(mLock) {
             mIsShutdown = true;
             mThreadPoolExecutor.shutdown();
         }
     }
-
-    public boolean isTerminated() {
-        synchronized(mLock) {
-            if (!mIsShutdown) {
-                return false;
-            }
-            return mPrioritizedTasks.isEmpty() && mTasks.isEmpty() && mActive == null;
-        }
-    }
 }
