diff --git a/IdeaVim.ipr b/IdeaVim.ipr
index d9edc1736..74e49a2d9 100644
--- a/IdeaVim.ipr
+++ b/IdeaVim.ipr
@@ -81,6 +81,9 @@
         <filter targetName="clean" isVisible="true" />
         <filter targetName="build" isVisible="true" />
         <filter targetName="deploy" isVisible="true" />
+        <filter targetName="dist" isVisible="true" />
+        <filter targetName="dist-bin" isVisible="true" />
+        <filter targetName="dist-src" isVisible="true" />
         <filter targetName="javadoc" isVisible="false" />
       </targetFilters>
     </buildFile>
@@ -128,6 +131,5 @@
     <option name="OPEN_IN_BROWSER" value="false" />
     <option name="OUTPUT_DIRECTORY" />
   </component>
-  <component name="WebReferencesManager" />
 </project>
 
diff --git a/IdeaVim.iws b/IdeaVim.iws
index a401c49de..e880b38f1 100644
--- a/IdeaVim.iws
+++ b/IdeaVim.iws
@@ -1,73 +1,96 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="3" relativePaths="false">
-  <component name="WebReferencesConfigurable">
-    <property name="CUSTOM_MAP_LOOKUP" type="list" />
-    <property name="INTERFACE_POSTFIX" value="" type="string" />
-    <property name="electric.home" value="/electric" type="string" />
-    <property name="INTERFACE_PREFIX" value="I" type="string" />
-    <property name="THROW_EXCEPTIONS" value="false" type="boolean" />
-    <property name="ENABLED" value="false" type="boolean" />
-  </component>
   <component name="FileEditorManager">
     <history>
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/text/MotionWordEndRightAction.java" line="2" column="0" vertical-scroll-proportion="0.044378698" horizontal-scroll-proportion="0.0" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/text/MotionWORDEndRightAction.java" line="2" column="0" vertical-scroll-proportion="0.044378698" horizontal-scroll-proportion="0.0" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/text/MotionWordLeftAction.java" line="2" column="0" vertical-scroll-proportion="0.044378698" horizontal-scroll-proportion="0.0" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/text/MotionWORDLeftAction.java" line="2" column="0" vertical-scroll-proportion="0.044378698" horizontal-scroll-proportion="0.0" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/text/MotionWordRightAction.java" line="2" column="0" vertical-scroll-proportion="0.044378698" horizontal-scroll-proportion="0.0" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/text/MotionWORDRightAction.java" line="2" column="0" vertical-scroll-proportion="0.044378698" horizontal-scroll-proportion="0.0" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionDownAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionDownFirstNonSpaceAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionDownLess1FirstNonSpaceAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionGotoLineFirstAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionGotoLineLastAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionGotoLineLastEndAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionGotoLineLastEndAppendAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionPercentOrMatchAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionUpAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/updown/MotionUpFirstNonSpaceAction.java" line="26" column="13" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/visual/VisualExitModeAction.java" line="27" column="13" vertical-scroll-proportion="0.5769231" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/visual/VisualSelectPreviousAction.java" line="27" column="13" vertical-scroll-proportion="0.5769231" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/visual/VisualSwapEndsAction.java" line="27" column="13" vertical-scroll-proportion="0.5769231" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/visual/VisualSwapSelectionsAction.java" line="27" column="13" vertical-scroll-proportion="0.5769231" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/visual/VisualToggleCharacterModeAction.java" line="27" column="13" vertical-scroll-proportion="0.5769231" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/visual/VisualToggleLineModeAction.java" line="27" column="13" vertical-scroll-proportion="0.5769231" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/motion/MotionEditorAction.java" line="29" column="22" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.18246445" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/AbstractCommandAction.java" line="30" column="22" vertical-scroll-proportion="0.55473375" horizontal-scroll-proportion="0.18246445" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/ExEntryAction.java" line="27" column="13" vertical-scroll-proportion="0.5769231" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/action/ResetModeAction.java" line="27" column="13" vertical-scroll-proportion="0.5769231" horizontal-scroll-proportion="0.10781991" />
-      <source-position-entry url="file://$PROJECT_DIR$/plugin.xml" line="0" column="0" vertical-scroll-proportion="0.0" horizontal-scroll-proportion="0.0" />
-      <source-position-entry url="file://$PROJECT_DIR$/docs/README.txt" line="127" column="16" vertical-scroll-proportion="0.4535176" horizontal-scroll-proportion="0.13270143" />
-      <source-position-entry url="file://$PROJECT_DIR$/install/vim.xml" line="16" column="31" vertical-scroll-proportion="0.30150753" horizontal-scroll-proportion="0.25710902" />
-      <source-position-entry url="file://$PROJECT_DIR$/build.xml" line="34" column="0" vertical-scroll-proportion="0.6407035" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ex/CommandParser.java" line="54" column="13" vertical-scroll-proportion="0.33249685" horizontal-scroll-proportion="0.10781991" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ex/ExCommand.java" line="41" column="0" vertical-scroll-proportion="0.71518195" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/ClipboardHandler.java" line="33" column="13" vertical-scroll-proportion="0.050188206" horizontal-scroll-proportion="0.10781991" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/group/ChangeGroup.java" line="1201" column="0" vertical-scroll-proportion="0.82763535" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/VimPlugin.java" line="56" column="13" vertical-scroll-proportion="-2.2792022" horizontal-scroll-proportion="0.10781991" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/KeyHandler.java" line="48" column="13" vertical-scroll-proportion="0.43304843" horizontal-scroll-proportion="0.10781991" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ex/CommandHandler.java" line="128" column="24" vertical-scroll-proportion="1.1111112" horizontal-scroll-proportion="0.19905214" />
+      <source-position-entry url="file://$PROJECT_DIR$/web/index.php" line="24" column="0" vertical-scroll-proportion="0.51282054" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/handler/ExEntryHandler.java" line="75" column="33" vertical-scroll-proportion="0.35042736" horizontal-scroll-proportion="0.2736967" />
+      <source-position-entry url="file://$PROJECT_DIR$/docs/README.txt" line="23" column="23" vertical-scroll-proportion="0.491453" horizontal-scroll-proportion="0.19075829" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/CommandEntryPanel.java" line="117" column="9" vertical-scroll-proportion="0.97863245" horizontal-scroll-proportion="0.07464455" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/ExEditorKit.java" line="207" column="0" vertical-scroll-proportion="0.8333333" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/SwingUtilities.java" line="1517" column="0" vertical-scroll-proportion="0.66239315" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/text/Keymap.java" line="98" column="16" vertical-scroll-proportion="0.32905984" horizontal-scroll-proportion="0.13270143" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/JMenuBar.java" line="637" column="0" vertical-scroll-proportion="0.23504274" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/text/DefaultEditorKit.java" line="999" column="0" vertical-scroll-proportion="0.24216524" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/text/JTextComponent.java" line="2917" column="41" vertical-scroll-proportion="3.022792" horizontal-scroll-proportion="0.3400474" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/JComponent.java" line="2438" column="20" vertical-scroll-proportion="0.32621083" horizontal-scroll-proportion="0.16587678" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/ExTextField.java" line="42" column="47" vertical-scroll-proportion="0.56980056" horizontal-scroll-proportion="0.3898104" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/ExKeyBindings.java" line="45" column="0" vertical-scroll-proportion="0.54415953" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/docs/NOTES.txt" line="2" column="0" vertical-scroll-proportion="0.03988604" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/docs/CHANGES.txt" line="7" column="0" vertical-scroll-proportion="0.14957266" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/web/vim/index.txt" line="11" column="0" vertical-scroll-proportion="0.23504274" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/build.xml" line="82" column="42" vertical-scroll-proportion="0.37321937" horizontal-scroll-proportion="0.34834123" />
     </history>
-    <open-files />
+    <open-files>
+      <source-position-entry url="file://$PROJECT_DIR$/docs/README.txt" line="23" column="23" vertical-scroll-proportion="0.491453" horizontal-scroll-proportion="0.19075829" />
+      <source-position-entry url="file://$PROJECT_DIR$/docs/NOTES.txt" line="2" column="0" vertical-scroll-proportion="0.03988604" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/build.xml" line="82" column="42" vertical-scroll-proportion="0.37321937" horizontal-scroll-proportion="0.34834123" selected="true" />
+      <source-position-entry url="file://$PROJECT_DIR$/web/index.php" line="24" column="0" vertical-scroll-proportion="0.51282054" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/docs/CHANGES.txt" line="7" column="0" vertical-scroll-proportion="0.14957266" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/web/vim/index.txt" line="11" column="0" vertical-scroll-proportion="0.23504274" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/ExEditorKit.java" line="207" column="0" vertical-scroll-proportion="0.8333333" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/ExKeyBindings.java" line="45" column="0" vertical-scroll-proportion="0.54415953" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/text/DefaultEditorKit.java" line="999" column="0" vertical-scroll-proportion="0.24216524" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/SwingUtilities.java" line="1517" column="0" vertical-scroll-proportion="0.66239315" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/JComponent.java" line="2438" column="20" vertical-scroll-proportion="0.32621083" horizontal-scroll-proportion="0.16587678" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/ExTextField.java" line="42" column="47" vertical-scroll-proportion="0.56980056" horizontal-scroll-proportion="0.3898104" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/JMenuBar.java" line="637" column="0" vertical-scroll-proportion="0.23504274" horizontal-scroll-proportion="0.0" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/text/JTextComponent.java" line="2917" column="41" vertical-scroll-proportion="3.022792" horizontal-scroll-proportion="0.3400474" />
+      <source-position-entry url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/text/Keymap.java" line="98" column="16" vertical-scroll-proportion="0.32905984" horizontal-scroll-proportion="0.13270143" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/handler/ExEntryHandler.java" line="75" column="33" vertical-scroll-proportion="0.35042736" horizontal-scroll-proportion="0.2736967" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ex/CommandHandler.java" line="128" column="24" vertical-scroll-proportion="1.1111112" horizontal-scroll-proportion="0.19905214" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/KeyHandler.java" line="48" column="13" vertical-scroll-proportion="0.43304843" horizontal-scroll-proportion="0.10781991" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/VimPlugin.java" line="56" column="13" vertical-scroll-proportion="-2.2792022" horizontal-scroll-proportion="0.10781991" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/ui/CommandEntryPanel.java" line="117" column="9" vertical-scroll-proportion="0.97863245" horizontal-scroll-proportion="0.07464455" />
+      <source-position-entry url="file://$PROJECT_DIR$/src/com/maddyhome/idea/vim/group/ChangeGroup.java" line="1201" column="0" vertical-scroll-proportion="0.82763535" horizontal-scroll-proportion="0.0" />
+    </open-files>
   </component>
   <component name="ToolWindowManager">
-    <frame x="3" y="0" width="1277" height="972" extended-state="6" />
-    <editor active="true" />
+    <frame x="4" y="0" width="1277" height="972" extended-state="0" />
+    <editor active="false" />
     <layout>
-      <window_info id="SQL" active="false" anchor="bottom" auto_hide="true" internal_type="sliding" type="sliding" visible="false" weight="0.33058822" order="9" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.24911869" order="5" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32941177" order="2" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33058822" order="8" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.39983714" order="0" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.25407165" order="0" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="3" />
+      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="true" weight="0.25407165" order="0" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.2972973" order="3" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1" />
-      <window_info id="Struts Console" active="false" anchor="right" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.32980457" order="3" />
-      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32941177" order="1" />
-      <window_info id="Messages" active="false" anchor="bottom" auto_hide="true" internal_type="sliding" type="sliding" visible="false" weight="0.30941176" order="7" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.32902467" order="1" />
+      <window_info id="Messages" active="false" anchor="bottom" auto_hide="true" internal_type="sliding" type="sliding" visible="false" weight="0.30904818" order="7" />
       <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="6" />
+      <window_info id="SQL" active="false" anchor="bottom" auto_hide="true" internal_type="sliding" type="sliding" visible="false" weight="0.33058822" order="9" />
       <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0" />
       <window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="4" />
-      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5" />
+      <window_info id="Struts Console" active="false" anchor="right" auto_hide="true" internal_type="docked" type="docked" visible="false" weight="0.32980457" order="3" />
     </layout>
   </component>
   <component name="Debugger">
-    <line_breakpoints />
+    <line_breakpoints>
+      <breakpoint url="jar:///usr/java/j2sdk1.4.1_01/src.zip!/javax/swing/text/DefaultEditorKit.java" line="999">
+        <option name="ENABLED" value="true" />
+        <option name="SUSPEND_VM" value="true" />
+        <option name="COUNT_FILTER_ENABLED" value="false" />
+        <option name="COUNT_FILTER" value="0" />
+        <option name="CONDITION_ENABLED" value="false" />
+        <option name="CONDITION" />
+        <option name="LOG_ENABLED" value="false" />
+        <option name="LOG_EXPRESSION_ENABLED" value="false" />
+        <option name="LOG_MESSAGE" />
+        <option name="CLASS_FILTERS_ENABLED" value="false" />
+        <option name="INVERSE_CLASS_FILLTERS" value="false" />
+        <option name="SUSPEND_POLICY" value="SuspendAll" />
+      </breakpoint>
+    </line_breakpoints>
     <exception_breakpoints>
       <breakpoint_any>
         <option name="NOTIFY_CAUGHT" value="true" />
@@ -170,6 +193,12 @@
     <option name="GROUP_GETTERS_AND_SETTERS" value="true" />
   </component>
   <component name="CvsConfiguration">
+    <cvs_root>
+      <option name="METHOD" value="ext" />
+      <option name="USER_NAME" value="rmaddy" />
+      <option name="HOST" value="cvs.sourceforge.net" />
+      <option name="REPOSITORY" value="/cvsroot/ideavim" />
+    </cvs_root>
     <Checkout>
       <option name="DATE_TAG" value="" />
       <option name="REVISION_TAG" value="" />
@@ -193,7 +222,7 @@
     <Commit>
       <option name="NON_RECURSIVE" value="false" />
       <option name="REVISION_TAG" value="" />
-      <option name="LOG_MESSAGE" value="" />
+      <option name="LOG_MESSAGE" value="Lots of changes for 0.1.1 to fix Enter and Backspace for Ex commands" />
       <option name="ADDITIONAL_OPTIONS" value="" />
     </Commit>
     <Diff>
@@ -233,13 +262,13 @@
       <option name="NON_RECURSIVE" value="false" />
       <option name="FORCE_RECURSIVE" value="false" />
     </Editors>
-    <option name="CLIENT_PATH" value="" />
-    <option name="EXTERNAL_DIFF_PATH" />
+    <option name="CLIENT_PATH" value="/usr/bin/cvs" />
+    <option name="EXTERNAL_DIFF_PATH" value="" />
     <option name="USE_EXTERNAL_DIFF" value="false" />
     <option name="WORKING_FILES_READONLY" value="false" />
     <option name="COMPRESSION_LEVEL" value="0" />
     <option name="ADDITIONAL_OPTIONS" value="" />
-    <option name="BINARY_FILES_EXTENSIONS" />
+    <option name="BINARY_FILES_EXTENSIONS" value="" />
     <option name="REUSE_LAST_LOG_MESSAGE" value="false" />
     <option name="PUT_FOCUS_INTO_LOG_MESSAGE" value="false" />
     <option name="SHOW_UPDATE_OPTIONS" value="true" />
@@ -257,12 +286,16 @@
     <option name="HIDE_UP_TO_DATE_FILES" value="false" />
   </component>
   <component name="CvsVcs">
-    <expanded_paths />
+    <expanded_paths>
+      <path value="$PROJECT_DIR$" />
+    </expanded_paths>
   </component>
   <component name="ProjectViewSettings">
     <navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5" />
     <view id="ProjectPane">
+      <expanded_node type="directory" url="file://$PROJECT_DIR$/docs" />
       <expanded_node type="directory" url="file://$PROJECT_DIR$" />
+      <expanded_node type="directory" url="file://$PROJECT_DIR$/dist" />
     </view>
     <view id="SourcepathPane" />
     <view id="ClasspathPane" />
@@ -329,7 +362,7 @@
     <splitter proportion="0.5" />
   </component>
   <component name="PropertiesComponent">
-    <property name="GoToClass.includeJavaFiles" value="false" />
+    <property name="GoToClass.includeJavaFiles" value="true" />
     <property name="MemberChooser.copyJavadoc" value="false" />
     <property name="GoToClass.includeLibraries" value="false" />
     <property name="MemberChooser.showClasses" value="true" />
@@ -344,6 +377,7 @@
     <target name="Source" />
     <target name="Classpath View" />
     <target name="Commander" />
+    <target name="CVS View" />
   </component>
   <component name="VssConfiguration">
     <CheckoutOptions>
@@ -398,7 +432,9 @@
     <option name="SORT_ALPHABETICALLY" value="false" />
   </component>
   <component name="WebViewSettings">
-    <webview flattenPackages="false" showMembers="false" autoscrollToSource="false" />
+    <webview flattenPackages="false" showMembers="false" autoscrollToSource="false">
+      <expanded_node type="directory" url="file://$PROJECT_DIR$/web" />
+    </webview>
   </component>
   <component name="EjbViewSettings">
     <EjbView showMembers="false" autoscrollToSource="false" />
@@ -478,8 +514,8 @@
     </inspection_tool>
     <inspection_tool class="Deprecated API usage" enabled="true" />
     <inspection_tool class="equals() and hashCode() not paired" enabled="true" />
-    <group name="Local Code Analysis" />
     <group name="Declaration Redundancy" />
+    <group name="Local Code Analysis" />
     <profile name="Full" />
   </component>
   <component name="TodoView" selected-index="0">
@@ -496,7 +532,7 @@
     </todo-panel>
   </component>
   <component name="VcsManagerConfiguration">
-    <option name="ACTIVE_VCS_NAME" value="" />
+    <option name="ACTIVE_VCS_NAME" value="CVS" />
   </component>
   <component name="StarteamConfiguration">
     <option name="SERVER" value="" />
@@ -507,13 +543,5 @@
     <option name="VIEW" value="" />
     <option name="ALTERNATIVE_WORKING_PATH" value="" />
   </component>
-  <component name="SQL">
-    <htmlExport table="border: 1px solid black; border-spacing:0px" cell="border: 1px solid black" header="background: darkgrey; font-weight:bold; text-align: center" row1="background: white" row2="background: lightgrey" alternate="true" interval="1" />
-    <csvExport delimiter="," text="&quot;" />
-    <partialExecute value="0" />
-    <rowLimit enabled="true" value="1000" />
-    <primaryKeyCols enabled="true" />
-    <savePasswords enabled="false" />
-  </component>
 </project>
 
diff --git a/build.xml b/build.xml
index 68c231da9..d23d40317 100644
--- a/build.xml
+++ b/build.xml
@@ -32,7 +32,7 @@
 
     <property name="project" value="IdeaVIM" />
     <!-- Update this prior to building a new distribution -->
-    <property name="version" value="0.1.0" />
+    <property name="version" value="0.1.1" />
 
     <path id="build.classpath">
         <pathelement path="${idea.home}/lib/openapi.jar" />
@@ -65,7 +65,10 @@
         <copy file="${install}/${project}.jar" todir="${idea.home}/plugins/" />
     </target>
 
-    <target name="dist" depends="clean, build" description="Creates a tar file containing the plugin distribution" >
+    <target name="dist" depends="dist-src, dist-bin" description="Creates the src and bin distribution files" />
+
+    <target name="dist-bin" depends="clean, build" description="Creates a tar file containing the plugin distribution" >
+        <mkdir dir="dist" />
         <delete dir="${project}" />
         <mkdir dir="${project}"/>
         <copy todir="${project}">
@@ -77,13 +80,35 @@
                 <filter token="NAME" value="${project}" />
                 <filter token="VERSION" value="${version}" />
             </filterset>
-            <fileset dir="docs" includes="*,vim/*.txt" excludes="javadoc" />
+            <fileset dir="docs" includes="vim/*.txt" excludes="javadoc" />
+        </copy>
+        <copy file="docs/README.txt" tofile="${project}/README" >
+            <filterset>
+                <filter token="NAME" value="${project}" />
+                <filter token="VERSION" value="${version}" />
+            </filterset>
+        </copy>
+        <copy file="docs/CHANGES.txt" tofile="${project}/CHANGES" >
+            <filterset>
+                <filter token="NAME" value="${project}" />
+                <filter token="VERSION" value="${version}" />
+            </filterset>
+        </copy>
+        <copy file="docs/NOTES.txt" tofile="${project}/NOTES" >
+            <filterset>
+                <filter token="NAME" value="${project}" />
+                <filter token="VERSION" value="${version}" />
+            </filterset>
         </copy>
-        <copy file="docs/README.txt" tofile="${project}/README" />
         <mkdir dir="${dist}"/>
         <tar basedir="." destfile="${dist}/${project}-${version}.tar.gz" compression="gzip" includes="${project}/**" />
     </target>
 
+    <target name="dist-src" depends="clean" description="Creates the source tar file" >
+        <mkdir dir="dist" />
+        <tar basedir="." destfile="${dist}/${project}-src-${version}.tar.gz" excludes="dist/**" compression="gzip"/>
+    </target>
+
     <target name="javadoc" depends="build" description="Generates Javadoc for all source code" >
         <delete dir="${javadoc}"/>
         <mkdir dir="${javadoc}" />
diff --git a/docs/CHANGES.txt b/docs/CHANGES.txt
new file mode 100644
index 000000000..c5e4b35a7
--- /dev/null
+++ b/docs/CHANGES.txt
@@ -0,0 +1,8 @@
+History of changes for @NAME@
+
+0.1.0 to 0.1.1
+- Fixed text of README file (NAME and VERSION weren't properly substituted)
+- Fixed issue with pressing Enter when entering an Ex command (no more beep or
+  IDEA error message)
+- Fixed issue with pressing Backspace in the Ex command entry window when there
+  are no characters. The beep is gone and the command entry is properly exited.
\ No newline at end of file
diff --git a/docs/NOTES.txt b/docs/NOTES.txt
new file mode 100644
index 000000000..2c60c8c13
--- /dev/null
+++ b/docs/NOTES.txt
@@ -0,0 +1,7 @@
+@NAME@ version @VERSION@ Release Notes
+
+VIM Emulator plugin for IntelliJ IDEA. See the enclosed README file in the
+binary distribution for installation instructions. See docs/vim/index.txt for
+a complete list of supported VIM commands. This release has been tested with
+IDEA 3.0.2 (build #695) and 3.0.3 (build #698) but may work with other 3.0
+releases.
\ No newline at end of file
diff --git a/docs/README.txt b/docs/README.txt
index 9b4b3b2ad..0350b2d49 100644
--- a/docs/README.txt
+++ b/docs/README.txt
@@ -12,7 +12,8 @@ UNIX/Linux
 Copy @NAME@.jar to $IDEA_HOME/plugins where IDEA_HOME is where IntelliJ IDEA
 has been installed.
 
-Copy vim.xml to $HOME/.IntelliJIdea/config/keymaps
+Copy vim.xml to $HOME/.IntelliJIdea/config/keymaps. You will have to create
+the keymaps directory if it doesn't exist.
 
 Windows
 
@@ -20,7 +21,7 @@ Copy @NAME@.jar to %IDEA_HOME%/plugins where IDEA_HOME is where IntelliJ IDEA
 has been installed.
 
 Copy vim.xml to C:\Documents and Settings\<user>\.IntelliJIdea\config\keymaps
-
+You will have to create the keymaps directory if it doesn't exist.
 
 Starting
 
diff --git a/src/com/maddyhome/idea/vim/KeyHandler.java b/src/com/maddyhome/idea/vim/KeyHandler.java
index 2e8097250..ef6933b8e 100644
--- a/src/com/maddyhome/idea/vim/KeyHandler.java
+++ b/src/com/maddyhome/idea/vim/KeyHandler.java
@@ -37,7 +37,6 @@ import com.maddyhome.idea.vim.key.CommandNode;
 import com.maddyhome.idea.vim.key.KeyParser;
 import com.maddyhome.idea.vim.key.Node;
 import com.maddyhome.idea.vim.key.ParentNode;
-import java.awt.Toolkit;
 import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.Stack;
@@ -110,7 +109,7 @@ public class KeyHandler
             if (count == 0 && currentArg == Argument.NONE && currentCmd.size() == 0 &&
                 CommandGroups.getInstance().getRegister().getCurrentRegister() == RegisterGroup.REGISTER_DEFAULT)
             {
-               indicateError();
+               VimPlugin.indicateError();
             }
 
             fullReset();
@@ -307,7 +306,7 @@ public class KeyHandler
 
             if (!editor.getDocument().isWritable() && !Command.isReadOnlyType(cmd.getType()))
             {
-                indicateError();
+                VimPlugin.indicateError();
             }
             else
             {
@@ -343,7 +342,7 @@ public class KeyHandler
         // We had some sort of error so reset the handler and let the user know (beep)
         else if (mode == STATE_ERROR)
         {
-            indicateError();
+            VimPlugin.indicateError();
             fullReset();
         }
     }
@@ -385,14 +384,6 @@ public class KeyHandler
         action.actionPerformed(new AnActionEvent(null, context, "", action.getTemplatePresentation(), 0));
     }
 
-    /**
-     * Inidicate to the user that an error has occurred. Just beep.
-     */
-    public static void indicateError()
-    {
-        Toolkit.getDefaultToolkit().beep();
-    }
-
     /**
      * Partially resets the state of this handler. Resets the command count, clears the key list, resets the
      * key tree node to the root for the current mode we are in.
diff --git a/src/com/maddyhome/idea/vim/VimPlugin.java b/src/com/maddyhome/idea/vim/VimPlugin.java
index c0e74a91a..8f9b34bd4 100644
--- a/src/com/maddyhome/idea/vim/VimPlugin.java
+++ b/src/com/maddyhome/idea/vim/VimPlugin.java
@@ -42,6 +42,7 @@ import com.maddyhome.idea.vim.group.MotionGroup;
 import com.maddyhome.idea.vim.helper.EditorData;
 import com.maddyhome.idea.vim.key.RegisterActions;
 import org.jdom.Element;
+import java.awt.Toolkit;
 
 /**
  * This plugin attempts to emulate the keybinding and general functionality of Vim and gVim. See the supplied
@@ -185,6 +186,14 @@ public class VimPlugin implements ApplicationComponent, JDOMExternalizable
         return enabled;
     }
 
+    /**
+     * Inidicate to the user that an error has occurred. Just beep.
+     */
+    public static void indicateError()
+    {
+        Toolkit.getDefaultToolkit().beep();
+    }
+
     /**
      * This class is used to handle the Vim Plugin enabled/disabled toggle. This is most likely used as a menu
      * option but could also be used as a toolbar item.
diff --git a/src/com/maddyhome/idea/vim/action/AbstractCommandAction.java b/src/com/maddyhome/idea/vim/action/AbstractCommandAction.java
index 815efd150..a178be82e 100644
--- a/src/com/maddyhome/idea/vim/action/AbstractCommandAction.java
+++ b/src/com/maddyhome/idea/vim/action/AbstractCommandAction.java
@@ -23,6 +23,7 @@ import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.actionSystem.DataContext;
 import com.maddyhome.idea.vim.KeyHandler;
+import com.maddyhome.idea.vim.VimPlugin;
 import com.maddyhome.idea.vim.command.Command;
 import com.maddyhome.idea.vim.command.CommandState;
 
@@ -36,7 +37,7 @@ public abstract class AbstractCommandAction extends AnAction
         Command cmd = state.getCommand();
         if (!execute(event.getDataContext(), cmd))
         {
-            KeyHandler.indicateError();
+            VimPlugin.indicateError();
         }
     }
 
diff --git a/src/com/maddyhome/idea/vim/ex/CommandHandler.java b/src/com/maddyhome/idea/vim/ex/CommandHandler.java
index 7032402f9..dc7290bb4 100644
--- a/src/com/maddyhome/idea/vim/ex/CommandHandler.java
+++ b/src/com/maddyhome/idea/vim/ex/CommandHandler.java
@@ -23,6 +23,7 @@ import com.intellij.openapi.actionSystem.DataContext;
 import com.intellij.openapi.editor.Editor;
 import com.maddyhome.idea.vim.helper.RunnableHelper;
 import com.maddyhome.idea.vim.undo.UndoManager;
+import com.maddyhome.idea.vim.VimPlugin;
 
 /**
  *
@@ -85,7 +86,7 @@ public abstract class CommandHandler
 
         if ((getFlags() & WRITABLE) != 0)
         {
-            RunnableHelper.runCommand(new Runnable() {
+            RunnableHelper.runWriteCommand(new Runnable() {
                 public void run()
                 {
                     boolean res = false;
@@ -97,6 +98,7 @@ public abstract class CommandHandler
                     catch (ExException e)
                     {
                         // TODO - handle this
+                        VimPlugin.indicateError();
                     }
                     finally
                     {
@@ -114,7 +116,20 @@ public abstract class CommandHandler
         }
         else
         {
-            execute(editor, context, cmd);
+            RunnableHelper.runReadCommand(new Runnable() {
+                public void run()
+                {
+                    try
+                    {
+                        execute(editor, context, cmd);
+                    }
+                    catch (ExException e)
+                    {
+                        // TODO - handle this
+                        VimPlugin.indicateError();
+                    }
+                }
+            });
         }
     }
 
diff --git a/src/com/maddyhome/idea/vim/ex/handler/EmptyHandler.java b/src/com/maddyhome/idea/vim/ex/handler/EmptyHandler.java
new file mode 100644
index 000000000..702cc4aa0
--- /dev/null
+++ b/src/com/maddyhome/idea/vim/ex/handler/EmptyHandler.java
@@ -0,0 +1,46 @@
+package com.maddyhome.idea.vim.ex.handler;
+
+/*
+* IdeaVim - A Vim emulator plugin for IntelliJ Idea
+* Copyright (C) 2003 Rick Maddy
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.diagnostic.Logger;
+import com.maddyhome.idea.vim.ex.CommandHandler;
+import com.maddyhome.idea.vim.ex.ExCommand;
+import com.maddyhome.idea.vim.ex.ExException;
+
+/**
+ *
+ */
+public class EmptyHandler extends CommandHandler
+{
+    public EmptyHandler()
+    {
+        super(null, "", RANGE_OPTIONAL | ARGUMENT_OPTIONAL);
+    }
+
+    public boolean execute(Editor editor, DataContext context, ExCommand cmd) throws ExException
+    {
+        logger.info("execute");
+        return true;
+    }
+
+    private static Logger logger = Logger.getInstance(EmptyHandler.class.getName());
+}
diff --git a/src/com/maddyhome/idea/vim/ex/handler/ErrorHandler.java b/src/com/maddyhome/idea/vim/ex/handler/ErrorHandler.java
new file mode 100644
index 000000000..f38ed38e3
--- /dev/null
+++ b/src/com/maddyhome/idea/vim/ex/handler/ErrorHandler.java
@@ -0,0 +1,47 @@
+package com.maddyhome.idea.vim.ex.handler;
+
+/*
+* IdeaVim - A Vim emulator plugin for IntelliJ Idea
+* Copyright (C) 2003 Rick Maddy
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.editor.Editor;
+import com.maddyhome.idea.vim.ex.CommandHandler;
+import com.maddyhome.idea.vim.ex.ExCommand;
+import com.maddyhome.idea.vim.ex.ExException;
+
+/**
+ *
+ */
+public class ErrorHandler extends CommandHandler
+{
+    public ErrorHandler(ExException error)
+    {
+        super(null, "", RANGE_OPTIONAL | ARGUMENT_OPTIONAL);
+
+        this.error = error;
+    }
+
+    public boolean execute(Editor editor, DataContext context, ExCommand cmd) throws ExException
+    {
+        // TODO - display error
+        return true;
+    }
+
+    private ExException error;
+}
diff --git a/src/com/maddyhome/idea/vim/ex/handler/GotoLineHandler.java b/src/com/maddyhome/idea/vim/ex/handler/GotoLineHandler.java
new file mode 100644
index 000000000..d89ef488c
--- /dev/null
+++ b/src/com/maddyhome/idea/vim/ex/handler/GotoLineHandler.java
@@ -0,0 +1,53 @@
+package com.maddyhome.idea.vim.ex.handler;
+
+/*
+* IdeaVim - A Vim emulator plugin for IntelliJ Idea
+* Copyright (C) 2003 Rick Maddy
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+
+import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.editor.Editor;
+import com.maddyhome.idea.vim.ex.CommandHandler;
+import com.maddyhome.idea.vim.ex.ExCommand;
+import com.maddyhome.idea.vim.group.CommandGroups;
+import com.maddyhome.idea.vim.group.MotionGroup;
+
+/**
+ *
+ */
+public class GotoLineHandler extends CommandHandler
+{
+    public GotoLineHandler()
+    {
+        super(null, "", RANGE_REQUIRED | ARGUMENT_OPTIONAL);
+    }
+
+    public boolean execute(Editor editor, DataContext context, ExCommand cmd)
+    {
+        int count = cmd.getLine(editor, context);
+
+        if (count > 0)
+        {
+            MotionGroup.moveCaret(editor, context,
+                CommandGroups.getInstance().getMotion().moveCaretToLineStartSkipLeading(editor, count - 1));
+
+            return true;
+        }
+
+        return false;
+    }
+}
diff --git a/src/com/maddyhome/idea/vim/group/ChangeGroup.java b/src/com/maddyhome/idea/vim/group/ChangeGroup.java
index bf0d33584..fec497548 100644
--- a/src/com/maddyhome/idea/vim/group/ChangeGroup.java
+++ b/src/com/maddyhome/idea/vim/group/ChangeGroup.java
@@ -1035,7 +1035,7 @@ public class ChangeGroup extends AbstractActionGroup
         //CommandGroups.getInstance().getMark().setMark(editor, context, ']', start + str.length());
 
         //CommandGroups.getInstance().getRegister().storeTextInternal(editor, context, start, start + str.length(), str, MotionGroup.CHARACTERWISE, '.', false, false);
-        //runCommand(new InsertText(editor, context, start, str));
+        //runWriteCommand(new InsertText(editor, context, start, str));
     }
 
     /**
@@ -1067,7 +1067,7 @@ public class ChangeGroup extends AbstractActionGroup
             CommandGroups.getInstance().getMark().setMark(editor, context, '.', start);
             CommandGroups.getInstance().getMark().setMark(editor, context, '[', start);
             CommandGroups.getInstance().getMark().setMark(editor, context, ']', start);
-            //runCommand(new DeleteText(editor, context, start, end));
+            //runWriteCommand(new DeleteText(editor, context, start, end));
 
             return true;
         }
@@ -1090,11 +1090,11 @@ public class ChangeGroup extends AbstractActionGroup
         CommandGroups.getInstance().getMark().setMark(editor, context, '[', start);
         CommandGroups.getInstance().getMark().setMark(editor, context, ']', start + str.length());
         CommandGroups.getInstance().getMark().setMark(editor, context, '.', start + str.length());
-        //runCommand(new ReplaceText(editor, context, start, end, str));
+        //runWriteCommand(new ReplaceText(editor, context, start, end, str));
     }
 
     /*
-    public static void runCommand(Runnable cmd)
+    public static void runWriteCommand(Runnable cmd)
     {
         CommandProcessor.getInstance().executeCommand(new WriteAction(cmd), "Foo", "Bar");
     }
@@ -1203,11 +1203,6 @@ public class ChangeGroup extends AbstractActionGroup
                 // NOTE - is there a way to get the DataContext at this point?
                 CommandGroups.getInstance().getChange().processEscape(EditorHelper.getEditor(event.getManager(), event.getOldFile()), null);
             }
-
-            if (CommandEntryPanel.getInstance().isActive())
-            {
-                CommandEntryPanel.getInstance().deactivate();
-            }
         }
     }
 
diff --git a/src/com/maddyhome/idea/vim/handler/AbstractEditorActionHandler.java b/src/com/maddyhome/idea/vim/handler/AbstractEditorActionHandler.java
index fc0c461a7..8a3382acc 100644
--- a/src/com/maddyhome/idea/vim/handler/AbstractEditorActionHandler.java
+++ b/src/com/maddyhome/idea/vim/handler/AbstractEditorActionHandler.java
@@ -23,6 +23,7 @@ import com.intellij.openapi.actionSystem.DataContext;
 import com.intellij.openapi.editor.Editor;
 import com.intellij.openapi.editor.actionSystem.EditorActionHandler;
 import com.maddyhome.idea.vim.KeyHandler;
+import com.maddyhome.idea.vim.VimPlugin;
 import com.maddyhome.idea.vim.command.Command;
 import com.maddyhome.idea.vim.command.CommandState;
 
@@ -36,7 +37,7 @@ public abstract class AbstractEditorActionHandler extends EditorActionHandler
         Command cmd = state.getCommand();
         if (!execute(editor, context, cmd))
         {
-            KeyHandler.indicateError();
+            VimPlugin.indicateError();
         }
     }
 
diff --git a/src/com/maddyhome/idea/vim/handler/ExEntryHandler.java b/src/com/maddyhome/idea/vim/handler/ExEntryHandler.java
index d3990fa8d..f6f0606b2 100644
--- a/src/com/maddyhome/idea/vim/handler/ExEntryHandler.java
+++ b/src/com/maddyhome/idea/vim/handler/ExEntryHandler.java
@@ -29,8 +29,10 @@ import com.maddyhome.idea.vim.ex.CommandParser;
 import com.maddyhome.idea.vim.ex.ExException;
 import com.maddyhome.idea.vim.group.CommandGroups;
 import com.maddyhome.idea.vim.ui.CommandEntryPanel;
+import com.maddyhome.idea.vim.VimPlugin;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import javax.swing.SwingUtilities;
 
 /**
  *
@@ -39,7 +41,6 @@ public class ExEntryHandler extends AbstractEditorActionHandler
 {
     protected boolean execute(Editor editor, DataContext context, Command cmd)
     {
-        // TODO - deal with any preceeding count or if currently in visual mode
         CommandEntryPanel panel = CommandEntryPanel.getInstance();
 
         String initText = "";
@@ -68,28 +69,38 @@ public class ExEntryHandler extends AbstractEditorActionHandler
 
     static class ExEntryListener implements ActionListener
     {
-        public void actionPerformed(ActionEvent e)
+        public void actionPerformed(final ActionEvent e)
         {
-            try
+            SwingUtilities.invokeLater(new Runnable()
             {
-                logger.debug("processing command");
-                CommandEntryPanel.getInstance().deactivate();
-                CommandParser.getInstance().processCommand(editor, context, e.getActionCommand());
-                if (CommandState.getInstance().getMode() == CommandState.MODE_VISUAL)
+                public void run()
                 {
-                    CommandGroups.getInstance().getMotion().resetVisual(editor);
+                    try
+                    {
+                        logger.debug("processing command");
+                        CommandEntryPanel.getInstance().deactivate(true);
+                        CommandParser.getInstance().processCommand(editor, context, e.getActionCommand());
+                        if (CommandState.getInstance().getMode() == CommandState.MODE_VISUAL)
+                        {
+                            CommandGroups.getInstance().getMotion().resetVisual(editor);
+                        }
+                    }
+                    catch (ExException ex)
+                    {
+                        // TODO - display error
+                        logger.info(ex.getMessage());
+                        VimPlugin.indicateError();
+                    }
+                    catch (Exception bad)
+                    {
+                        logger.error(bad);
+                        VimPlugin.indicateError();
+                    }
+                    finally
+                    {
+                    }
                 }
-            }
-            catch (ExException ex)
-            {
-                // TODO - display error
-                logger.info(ex.getMessage());
-            }
-            catch (Exception bad)
-            {
-                logger.error(bad);
-            }
-            //CommandGroups.getInstance().getEx().processExCommand(editor, context, e.getActionCommand());
+            });
         }
 
         public void setState(Editor editor, DataContext context)
diff --git a/src/com/maddyhome/idea/vim/helper/RunnableHelper.java b/src/com/maddyhome/idea/vim/helper/RunnableHelper.java
index d04dd551d..6509e2cf4 100644
--- a/src/com/maddyhome/idea/vim/helper/RunnableHelper.java
+++ b/src/com/maddyhome/idea/vim/helper/RunnableHelper.java
@@ -27,11 +27,31 @@ import com.intellij.openapi.command.CommandProcessor;
  */
 public class RunnableHelper
 {
-    public static void runCommand(Runnable cmd)
+    public static void runReadCommand(Runnable cmd)
+    {
+        CommandProcessor.getInstance().executeCommand(new ReadAction(cmd), "Foo", "Bar");
+    }
+
+    public static void runWriteCommand(Runnable cmd)
     {
         CommandProcessor.getInstance().executeCommand(new WriteAction(cmd), "Foo", "Bar");
     }
 
+    static class ReadAction implements Runnable
+    {
+        ReadAction(Runnable cmd)
+        {
+            this.cmd = cmd;
+        }
+
+        public void run()
+        {
+            ApplicationManager.getApplication().runReadAction(cmd);
+        }
+
+        Runnable cmd;
+    }
+
     static class WriteAction implements Runnable
     {
         WriteAction(Runnable cmd)
diff --git a/src/com/maddyhome/idea/vim/ui/CommandEntryPanel.java b/src/com/maddyhome/idea/vim/ui/CommandEntryPanel.java
index 32e6d116a..4cd01c4db 100644
--- a/src/com/maddyhome/idea/vim/ui/CommandEntryPanel.java
+++ b/src/com/maddyhome/idea/vim/ui/CommandEntryPanel.java
@@ -28,7 +28,6 @@ import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Point;
 import java.awt.Rectangle;
-import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
@@ -95,19 +94,13 @@ public class CommandEntryPanel extends JPanel
             {
                 if (isActive())
                 {
-                    deactivate();
+                    deactivate(false);
                 }
             }
         });
 
-        addActionListener(new ActionListener() {
-            public void actionPerformed(ActionEvent e)
-            {
-                //deactivate();
-            }
-        });
-
         // TODO - move these keys to the ExEditorKit
+        /*
         entry.addKeyListener(new KeyAdapter() {
             public void keyPressed(KeyEvent e)
             {
@@ -120,15 +113,9 @@ public class CommandEntryPanel extends JPanel
                         entry.postActionEvent();
                     }
                 }
-                /*
-                else if (e.getKeyCode() == KeyEvent.VK_ENTER)
-                {
-                    e.consume();
-                    entry.postActionEvent();
-                }
-                */
             }
         });
+        */
     }
 
     public void activate(JComponent comp, String label, String initText)
@@ -163,13 +150,17 @@ public class CommandEntryPanel extends JPanel
         repaint();
     }
 
-    public void deactivate()
+    public void deactivate(boolean changeFocus)
     {
         logger.info("deactivate");
+        if (!active) return;
         active = false;
         newGlass.setVisible(false);
         root.setGlassPane(oldGlass);
-        parent.requestFocus();
+        if (changeFocus)
+        {
+            parent.requestFocus();
+        }
         parent = null;
     }
 
diff --git a/src/com/maddyhome/idea/vim/ui/ExEditorKit.java b/src/com/maddyhome/idea/vim/ui/ExEditorKit.java
index 0a9e7eada..f0b61f663 100644
--- a/src/com/maddyhome/idea/vim/ui/ExEditorKit.java
+++ b/src/com/maddyhome/idea/vim/ui/ExEditorKit.java
@@ -66,7 +66,7 @@ public class ExEditorKit extends DefaultEditorKit
      */
     public Action[] getActions()
     {
-        return TextAction.augmentList(super.getActions(), this.defaultActions);
+        return TextAction.augmentList(super.getActions(), this.exActions);
     }
 
     /**
@@ -82,6 +82,7 @@ public class ExEditorKit extends DefaultEditorKit
 
     public static final String CompleteEdit = "complete-edit";
     public static final String AbortEdit = "abort-edit";
+    public static final String DeletePreviousChar = "delete-prev-char";
     public static final String DeletePreviousWord = "delete-prev-word";
     public static final String DeleteToCursor = "delete-to-cursor";
     public static final String ToggleInsertReplace = "toggle-insert";
@@ -94,9 +95,10 @@ public class ExEditorKit extends DefaultEditorKit
     public static final String HistoryOldFilter = "history-old-filter";
 
     //TODO - add rest of actions
-    protected Action[] defaultActions = new Action[] {
+    protected Action[] exActions = new Action[] {
         new CompleteEditAction(),
         new AbortEditAction(),
+        new DeletePreviousCharAction(),
         new DeletePreviousWordAction(),
         new DeleteToCursorAction(),
         new ToggleInsertReplaceAction()
@@ -160,6 +162,65 @@ public class ExEditorKit extends DefaultEditorKit
 
     }
 
+    public static class DeletePreviousCharAction extends TextAction
+    {
+        public DeletePreviousCharAction()
+        {
+            super(DeletePreviousChar);
+        }
+
+        /**
+         * Invoked when an action occurs.
+         */
+        public void actionPerformed(ActionEvent e)
+        {
+            JTextField target = (JTextField)getTextComponent(e);
+            if ((target != null) && (target.isEditable()))
+            {
+                try
+                {
+                    Document doc = target.getDocument();
+                    Caret caret = target.getCaret();
+                    int dot = caret.getDot();
+                    int mark = caret.getMark();
+                    if (dot != mark)
+                    {
+                        doc.remove(Math.min(dot, mark), Math.abs(dot - mark));
+                    }
+                    else if (dot > 0)
+                    {
+                        int delChars = 1;
+
+                        if (dot > 1)
+                        {
+                            String dotChars = doc.getText(dot - 2, 2);
+                            char c0 = dotChars.charAt(0);
+                            char c1 = dotChars.charAt(1);
+
+                            if (c0 >= '\uD800' && c0 <= '\uDBFF' &&
+                                c1 >= '\uDC00' && c1 <= '\uDFFF')
+                            {
+                                delChars = 2;
+                            }
+                        }
+
+                        doc.remove(dot - delChars, delChars);
+                    }
+                    else
+                    {
+                        if (doc.getLength() == 0)
+                        {
+                            target.postActionEvent();
+                        }
+                    }
+                }
+                catch (BadLocationException bl)
+                {
+                }
+            }
+        }
+    }
+
     public static class DeletePreviousWordAction extends TextAction
     {
         public DeletePreviousWordAction()
diff --git a/src/com/maddyhome/idea/vim/ui/ExKeyBindings.java b/src/com/maddyhome/idea/vim/ui/ExKeyBindings.java
index 05441f756..3b5bd34d5 100644
--- a/src/com/maddyhome/idea/vim/ui/ExKeyBindings.java
+++ b/src/com/maddyhome/idea/vim/ui/ExKeyBindings.java
@@ -21,6 +21,7 @@ package com.maddyhome.idea.vim.ui;
 
 import java.awt.event.KeyEvent;
 import javax.swing.KeyStroke;
+import javax.swing.JTextField;
 import javax.swing.text.JTextComponent.KeyBinding;
 
 /**
@@ -43,8 +44,7 @@ public class ExKeyBindings
     // Ctrl-U - remove all chars to cursor
     // Ctrl-\ Ctrl-N - abort
     static final KeyBinding[] bindings = new KeyBinding[] {
-        //new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), JTextField.notifyAction),
-        //new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), ExEditorKit.CompleteEdit),
+        new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), ExEditorKit.CompleteEdit),
         new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_J, KeyEvent.CTRL_MASK), ExEditorKit.CompleteEdit),
         new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_M, KeyEvent.CTRL_MASK), ExEditorKit.CompleteEdit),
         new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), ExEditorKit.AbortEdit),
@@ -62,7 +62,7 @@ public class ExKeyBindings
         new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.SHIFT_MASK), ExEditorKit.nextWordAction),
         new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.CTRL_MASK), ExEditorKit.nextWordAction),
         new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), ExEditorKit.deleteNextCharAction),
-//        new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), ExEditorKit.deletePrevCharAction),
-        new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_MASK), ExEditorKit.deletePrevCharAction)
+        new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), ExEditorKit.DeletePreviousChar),
+        new KeyBinding(KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_MASK), ExEditorKit.DeletePreviousChar)
     };
 }
diff --git a/src/com/maddyhome/idea/vim/ui/ExTextField.java b/src/com/maddyhome/idea/vim/ui/ExTextField.java
index 6b30efb5e..1aad89340 100644
--- a/src/com/maddyhome/idea/vim/ui/ExTextField.java
+++ b/src/com/maddyhome/idea/vim/ui/ExTextField.java
@@ -23,6 +23,7 @@ import com.intellij.openapi.diagnostic.Logger;
 import java.awt.Font;
 import javax.swing.Action;
 import javax.swing.JTextField;
+import javax.swing.InputMap;
 import javax.swing.text.Document;
 import javax.swing.text.Keymap;
 import javax.swing.text.TextAction;
@@ -39,8 +40,11 @@ public class ExTextField extends JTextField
         Font font = new Font("Monospaced", Font.PLAIN, 12);
         setFont(font);
 
-        Keymap map = addKeymap("ex", getKeymap());
+        setInputMap(WHEN_FOCUSED, new InputMap());
+        Keymap map = addKeymap("ex", null);
         loadKeymap(map, ExKeyBindings.getBindings(), getActions());
+        map.setDefaultAction(new ExEditorKit.DefaultKeyTypedAction());
+        setKeymap(map);
     }
 
     public Action[] getActions()
diff --git a/web/index.php b/web/index.php
index d557a2e8c..a79d1fa96 100644
--- a/web/index.php
+++ b/web/index.php
@@ -9,25 +9,30 @@
 
 <h3>Introduction</h3>
 
+<p>
 <a href="http://www.intellij.com">IntelliJ IDEA</a> is an outstanding IDE for editing Java source code and other
 related files. However, it lacks one
 important feature - <code>vi</code> style commands for editing. I've been using <code>vi</code> and
 <a href="http://www.vim.org">VIM</a>
 for about 20 years. I'm used to it. I know the command keyboard shortcuts are cryptic and stange but I've been using
 it so long I just know how to use them and I find I am very efficient with them.
+</p>
 <p>
 IDEA makes my Java editing even more efficient. Now, if I could only combine the features of IDEA with the quick and
 easy editing of VIM, life would be grand. A quick search revealed that there wasn't a feature filled VIM plugin so I
 took it upon myself to write one. This project is the result of my desire to keep using my old keyboard habits.
+</p>
 <p>
 The goal of this plugin is to support as much VIM functionality as makes sense within the scope of IDEA. The plugin
 was actually written in IDEA using the VIM plugin once there was enough basic editing support. For the curious, the
 plugin is being written without any reference to the VIM source code. I'm basically using the excellent VIM
 documentation and VIM itself as a reference to verify correct behavior.
+</p>
 <p>
 This plugin is meant for developers that already know, and probably love, vi/VIM. I make no attempt to teach users
 how to use the VIM commands and you will not find any sort of help from within IDEA on what the key mappings are.
 Within the pages of this website however, you will find a reference of all working commands.
+</p>
 
 <h3>Installation</h3>
 
@@ -38,7 +43,8 @@ using IDEA in VIM Emulation mode:
 <li>Copy <code>IdeaVIM.jar</code> to the plugins directory. This is at <code>&lt;IDEA_HOME&gt;/plugins</code> where
     <code>IDEA_HOME</code> is IDEA installation directory.</li>
 <li>Copy <code>vim.xml</code> to <code>&lt;HOME&gt;/.IntelliJIdea/config/keymaps</code> where <code>HOME</code>
-    if your home directory on Unix or <code>C:\Documents&nbsp;and&nbsp;Settings\&lt;user&gt;</code> on Windows.</li>
+    if your home directory on Unix or <code>C:\Documents&nbsp;and&nbsp;Settings\&lt;user&gt;</code> on Windows.
+    Create the <code>keymaps</code> directory if it does not exist.</li>
 <li>Restart IDEA and then select the <code>Options|Keymaps</code> menu. Select the <code>vim</code> keymap and make
     it the active keymap by pressing the <code>Set Active</code> button.</li>
 </ol>
@@ -55,8 +61,8 @@ You may obtain the plugin by visiting the files page on
 
 <h3>Versions</h3>
 
-The VIM plugin has been developed and tested with IntelliJ IDEA 3.0.2 (#695). It is not known at this time if older
-or newer versions will work correctly.
+The VIM plugin has been developed and tested with IntelliJ IDEA 3.0.2 (#695) and 3.0.3 (#698).
+It is not known at this time if older or newer versions will work correctly.
 
 <hr>
 
diff --git a/web/vim/index.txt b/web/vim/index.txt
index 6cb09856f..0fa7ece37 100644
--- a/web/vim/index.txt
+++ b/web/vim/index.txt
@@ -1,4 +1,4 @@
-*index.txt*     For IdeaVIM version 0.1.0.  Last change: 2003 Apr 17
+*index.txt*     For IdeaVIM version 0.1.1.  Last change: 2003 Apr 17
 
 
                   IdeaVIM REFERENCE MANUAL    by Rick Maddy