diff --git a/java/src/com/android/inputmethod/event/EventInterpreter.java b/java/src/com/android/inputmethod/event/EventInterpreter.java
index 443c269..739c6d2 100644
--- a/java/src/com/android/inputmethod/event/EventInterpreter.java
+++ b/java/src/com/android/inputmethod/event/EventInterpreter.java
@@ -16,6 +16,7 @@
 
 package com.android.inputmethod.event;
 
+import android.util.SparseArray;
 import android.view.KeyEvent;
 
 /**
@@ -32,18 +33,41 @@
     // TODO: Create an object type to represent input material + visual feedback + decoding state
     // TODO: Create an interface to call back to Latin IME through the above object
 
-    // TODO: replace this with an associative container to bind device id -> decoder
-    HardwareEventDecoder mHardwareEventDecoder;
-    SoftwareEventDecoder mSoftwareEventDecoder;
+    final EventDecoderSpec mDecoderSpec;
+    final SparseArray<HardwareEventDecoder> mHardwareEventDecoders;
+    final SoftwareEventDecoder mSoftwareEventDecoder;
 
+    /**
+     * Create a default interpreter.
+     *
+     * This creates a default interpreter that does nothing. A default interpreter should normally
+     * only be used for fallback purposes, when we really don't know what we want to do with input.
+     *
+     */
     public EventInterpreter() {
         this(null);
     }
 
+    /**
+     * Create an event interpreter according to a specification.
+     *
+     * The specification contains information about what to do with events. Typically, it will
+     * contain information about the type of keyboards - for example, if hardware keyboard(s) is/are
+     * attached, their type will be included here so that the decoder knows what to do with each
+     * keypress (a 10-key keyboard is not handled like a qwerty-ish keyboard).
+     * It also contains information for combining characters. For example, if the input language
+     * is Japanese, the specification will typically request kana conversion.
+     * Also note that the specification can be null. This means that we need to create a default
+     * interpreter that does no specific combining, and assumes the most common cases.
+     *
+     * @param specification the specification for event interpretation. null for default.
+     */
     public EventInterpreter(final EventDecoderSpec specification) {
-        // TODO: create the decoding chain from a specification. The decoders should be
-        // created lazily
-        mHardwareEventDecoder = new HardwareKeyboardEventDecoder(0);
+        mDecoderSpec = null != specification ? specification : new EventDecoderSpec();
+        // For both, we expect to have only one decoder in almost all cases, hence the default
+        // capacity of 1.
+        mHardwareEventDecoders = new SparseArray<HardwareEventDecoder>(1);
+        mSoftwareEventDecoder = new SoftwareKeyboardEventDecoder();
     }
 
     // Helper method to decode a hardware key event into a generic event, and execute any
@@ -60,11 +84,17 @@
     }
 
     private HardwareEventDecoder getHardwareKeyEventDecoder(final int deviceId) {
-        // TODO: look up the decoder by device id. It should be created lazily
-        return mHardwareEventDecoder;
+        final HardwareEventDecoder decoder = mHardwareEventDecoders.get(deviceId);
+        if (null != decoder) return decoder;
+        // TODO: create the decoder according to the specification
+        final HardwareEventDecoder newDecoder = new HardwareKeyboardEventDecoder(deviceId);
+        mHardwareEventDecoders.put(deviceId, newDecoder);
+        return newDecoder;
     }
 
     private SoftwareEventDecoder getSoftwareEventDecoder() {
+        // Within the context of Latin IME, since we never present several software interfaces
+        // at the time, we should never need multiple software event decoders at a time.
         return mSoftwareEventDecoder;
     }
 
diff --git a/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java b/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
index 9aa6a27..34ce1c3 100644
--- a/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
+++ b/java/src/com/android/inputmethod/event/HardwareKeyboardEventDecoder.java
@@ -30,7 +30,7 @@
     }
 
     @Override
-    public Event decodeHardwareKey(KeyEvent keyEvent) {
+    public Event decodeHardwareKey(final KeyEvent keyEvent) {
         return Event.obtainEvent();
     }
 }
diff --git a/java/src/com/android/inputmethod/event/SoftwareKeyboardEventDecoder.java b/java/src/com/android/inputmethod/event/SoftwareKeyboardEventDecoder.java
new file mode 100644
index 0000000..de91567
--- /dev/null
+++ b/java/src/com/android/inputmethod/event/SoftwareKeyboardEventDecoder.java
@@ -0,0 +1,27 @@
+/*
+ * 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.
+ */
+
+package com.android.inputmethod.event;
+
+/**
+ * A decoder for events from software keyboard, like the ones displayed by Latin IME.
+ */
+public class SoftwareKeyboardEventDecoder implements SoftwareEventDecoder {
+    @Override
+    public Event decodeSoftwareEvent() {
+        return null;
+    }
+}
