diff --git a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/control/ITerminalViewControl.java b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/control/ITerminalViewControl.java
index 65ddab2..da3f0e8 100644
--- a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/control/ITerminalViewControl.java
+++ b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/control/ITerminalViewControl.java
@@ -10,7 +10,7 @@
 import java.io.UnsupportedEncodingException;
 
 import org.eclipse.swt.dnd.Clipboard;
-import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.*;
 import org.eclipse.swt.widgets.Control;
 
 import com.google.eclipse.elt.emulator.provisional.api.*;
@@ -81,4 +81,8 @@
   boolean isScrollLockOn();
 
   void setScrollLockOn(boolean on);
+
+  void setColors(RGB background, RGB foreground);
+
+  void setBlinkingCursor(boolean useBlinkingCursor);
 }
diff --git a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/core/VT100Emulator.java b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/core/VT100Emulator.java
index 39fd99a..f591077 100644
--- a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/core/VT100Emulator.java
+++ b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/core/VT100Emulator.java
@@ -7,6 +7,8 @@
  *******************************************************************************/
 package com.google.eclipse.elt.emulator.core;
 
+import static com.google.eclipse.elt.emulator.model.Style.getDefaultStyle;
+
 import java.io.*;
 import java.util.List;
 
@@ -70,9 +72,7 @@
   private int nextAnsiParameter = 0;
 
   private int nextChar = -1;
-
   private Reader reader;
-
   private boolean crAfterNewLine;
 
   /**
@@ -114,11 +114,9 @@
     }
   }
 
-  public void dispose() {
-  }
+  public void dispose() {}
 
-  @Override public void controlMoved(ControlEvent event) {
-  }
+  @Override public void controlMoved(ControlEvent event) {}
 
   @Override public void controlResized(ControlEvent event) {
     adjustTerminalDimensions();
@@ -492,7 +490,7 @@
     }
     Style style = text.getStyle();
     if (style == null) {
-      style = defaultStyle();
+      style = getDefaultStyle();
     }
     // There are a non-zero number of ANSI parameters. Process each one in order.
     int parameterCount = parameters.length;
@@ -588,10 +586,6 @@
     text.setStyle(style);
   }
 
-  private Style defaultStyle() {
-    return Style.getStyle("black", "white");
-  }
-
   // Responds to an ANSI Device Status Report (DSR) command from the remote endpoint requesting the cursor position.
   // Requests for other kinds of status are ignored.
   private void processAnsiCommand_n() {
diff --git a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/core/VT100TerminalControl.java b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/core/VT100TerminalControl.java
index 5fa669f..213cf68 100644
--- a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/core/VT100TerminalControl.java
+++ b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/core/VT100TerminalControl.java
@@ -7,11 +7,10 @@
  *******************************************************************************/
 package com.google.eclipse.elt.emulator.core;
 
+import static com.google.eclipse.elt.emulator.impl.TerminalPlugin.isOptionEnabled;
 import static org.eclipse.core.runtime.Status.OK_STATUS;
 import static org.eclipse.jface.bindings.keys.SWTKeySupport.convertEventToUnmodifiedAccelerator;
 
-import static com.google.eclipse.elt.emulator.impl.TerminalPlugin.isOptionEnabled;
-
 import java.io.*;
 import java.net.SocketException;
 import java.util.List;
@@ -56,7 +55,7 @@
   private KeyListener keyHandler;
   private final ITerminalListener terminalListener;
   private String message = "";
-  private FocusListener fFocusListener;
+  private FocusListener focusListener;
   private ITerminalConnector connector;
   private final ITerminalConnector[] connectors;
   private final PipedInputStream inputStream;
@@ -498,9 +497,9 @@
 
   protected void setupListeners() {
     keyHandler = new TerminalKeyHandler();
-    fFocusListener = new TerminalFocusListener();
+    focusListener = new TerminalFocusListener();
     getTextControl().addKeyListener(keyHandler);
-    getTextControl().addFocusListener(fFocusListener);
+    getTextControl().addFocusListener(focusListener);
   }
 
   @Override public void displayTextInTerminal(String text) {
@@ -833,10 +832,12 @@
     textControl.setInvertedColors(invert);
   }
 
+  @Override
   public void setColors(RGB background, RGB foreground) {
     textControl.setColors(background, foreground);
   }
 
+  @Override
   public void setBlinkingCursor(boolean useBlinkingCursor) {
     textControl.setBlinkingCursor(useBlinkingCursor);
   }
diff --git a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/model/Style.java b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/model/Style.java
index 3c0bb95..760f95b 100644
--- a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/model/Style.java
+++ b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/model/Style.java
@@ -20,9 +20,15 @@
 
   private static final Map<Style, Style> STYLES = new HashMap<Style, Style>();
 
-  private Style(StyleColor forground, StyleColor background, boolean bold, boolean blink, boolean underline,
+  public static Style getDefaultStyle() {
+    String foreground = null;
+    String background = null;
+    return getStyle(foreground, background);
+  }
+
+  private Style(StyleColor foreground, StyleColor background, boolean bold, boolean blink, boolean underline,
       boolean reverse) {
-    this.foreground = forground;
+    this.foreground = foreground;
     this.background = background;
     this.bold = bold;
     this.blink = blink;
@@ -30,9 +36,9 @@
     this.reverse = reverse;
   }
 
-  public static Style getStyle(StyleColor forground, StyleColor background, boolean bold, boolean blink,
+  public static Style getStyle(StyleColor foreground, StyleColor background, boolean bold, boolean blink,
       boolean underline, boolean reverse) {
-    Style style = new Style(forground, background, bold, blink, underline, reverse);
+    Style style = new Style(foreground, background, bold, blink, underline, reverse);
     Style cached;
     synchronized (STYLES) {
       cached = STYLES.get(style);
@@ -44,17 +50,17 @@
     return cached;
   }
 
-  public static Style getStyle(String forground, String background) {
+  public static Style getStyle(String foreground, String background) {
     return getStyle(
-        StyleColor.getStyleColor(forground), StyleColor.getStyleColor(background), false, false, false, false);
+        StyleColor.getStyleColor(foreground), StyleColor.getStyleColor(background), false, false, false, false);
   }
 
-  public static Style getStyle(StyleColor forground, StyleColor background) {
-    return getStyle(forground, background, false, false, false, false);
+  public static Style getStyle(StyleColor foreground, StyleColor background) {
+    return getStyle(foreground, background, false, false, false, false);
   }
 
-  public Style setForground(StyleColor forground) {
-    return getStyle(forground, background, bold, blink, underline, reverse);
+  public Style setForground(StyleColor foreground) {
+    return getStyle(foreground, background, bold, blink, underline, reverse);
   }
 
   public Style setBackground(StyleColor background) {
diff --git a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/ILinelRenderer.java b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/ILineRenderer.java
similarity index 96%
rename from com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/ILinelRenderer.java
rename to com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/ILineRenderer.java
index d6f856a..c7acc5c 100644
--- a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/ILinelRenderer.java
+++ b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/ILineRenderer.java
@@ -9,7 +9,7 @@
 
 import org.eclipse.swt.graphics.*;
 
-public interface ILinelRenderer {
+public interface ILineRenderer {
   int getCellWidth();
 
   int getCellHeight();
diff --git a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/TextCanvas.java b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/TextCanvas.java
index 02b19b2..617eb34 100644
--- a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/TextCanvas.java
+++ b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/TextCanvas.java
@@ -19,7 +19,7 @@
  */
 public class TextCanvas extends GridCanvas {
   private final ITextCanvasModel cellCanvasModel;
-  private final ILinelRenderer cellRenderer;
+  private final ILineRenderer cellRenderer;
   private boolean scrollLockOn;
   private Point draggingStart;
   private Point draggingEnd;
@@ -58,7 +58,7 @@
   /**
    * Create a new CellCanvas with the given SWT style bits. (SWT.H_SCROLL and SWT.V_SCROLL are automatically added).
    */
-  public TextCanvas(Composite parent, ITextCanvasModel model, int style, ILinelRenderer cellRenderer) {
+  public TextCanvas(Composite parent, ITextCanvasModel model, int style, ILineRenderer cellRenderer) {
     super(parent, style | SWT.H_SCROLL | SWT.V_SCROLL);
     this.cellRenderer = cellRenderer;
     setCellWidth(cellRenderer.getCellWidth());
@@ -167,7 +167,7 @@
     return p1.y > p2.y ? 1 : -1;
   }
 
-  public ILinelRenderer getCellRenderer() {
+  public ILineRenderer getCellRenderer() {
     return cellRenderer;
   }
 
diff --git a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/TextLineRenderer.java b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/TextLineRenderer.java
index 409b562..50eef2a 100644
--- a/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/TextLineRenderer.java
+++ b/com.google.eclipse.elt.emulator/src/com/google/eclipse/elt/emulator/textcanvas/TextLineRenderer.java
@@ -14,7 +14,7 @@
 
 import com.google.eclipse.elt.emulator.model.*;
 
-public class TextLineRenderer implements ILinelRenderer {
+public class TextLineRenderer implements ILineRenderer {
   private final ITextCanvasModel model;
   private final StyleMap styleMap = new StyleMap();
 
diff --git a/com.google.eclipse.elt.pty/utils/org/eclipse/cdt/utils/spawner/Spawner.java b/com.google.eclipse.elt.pty/utils/org/eclipse/cdt/utils/spawner/Spawner.java
index bf63ab6..e778b70 100644
--- a/com.google.eclipse.elt.pty/utils/org/eclipse/cdt/utils/spawner/Spawner.java
+++ b/com.google.eclipse.elt.pty/utils/org/eclipse/cdt/utils/spawner/Spawner.java
@@ -158,11 +158,10 @@
   @Override public synchronized InputStream getErrorStream() {
     if (null == err) {
       if (fPty != null && !fPty.isConsole()) {
-        // If PTY is used and it's not in "Console" mode, then stderr is
-        // redirected to the PTY's output stream. Therefore, return a
-        // dummy stream for error stream.
+        // If PTY is used and it's not in "Console" mode, then stderr is redirected to the PTY's output stream.
+        // Therefore, return a dummy stream for error stream.
         err = new InputStream() {
-          @Override public int read() throws IOException {
+          @Override public int read() {
             return -1;
           }
         };
diff --git a/com.google.eclipse.elt.view/src/com/google/eclipse/elt/view/ui/PopupMenu.java b/com.google.eclipse.elt.view/src/com/google/eclipse/elt/view/ui/PopupMenu.java
index 1950397..67e68ed 100644
--- a/com.google.eclipse.elt.view/src/com/google/eclipse/elt/view/ui/PopupMenu.java
+++ b/com.google.eclipse.elt.view/src/com/google/eclipse/elt/view/ui/PopupMenu.java
@@ -16,7 +16,7 @@
 import org.eclipse.ui.*;
 
 import com.google.eclipse.elt.emulator.actions.*;
-import com.google.eclipse.elt.emulator.core.VT100TerminalControl;
+import com.google.eclipse.elt.emulator.control.ITerminalViewControl;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -28,7 +28,7 @@
   private final AbstractTerminalAction clearAll;
 
   @SuppressWarnings("deprecation")
-  PopupMenu(IViewSite viewSite, VT100TerminalControl terminalControl) {
+  PopupMenu(IViewSite viewSite, ITerminalViewControl terminalControl) {
     PopupMenuManager menuManager = new PopupMenuManager();
     copy = menuManager.add(new TerminalActionCopy(terminalControl));
     copy.setActionDefinitionId("com.google.eclipse.terminal.local.copy");
diff --git a/com.google.eclipse.elt.view/src/com/google/eclipse/elt/view/ui/TerminalWidget.java b/com.google.eclipse.elt.view/src/com/google/eclipse/elt/view/ui/TerminalWidget.java
index 14729d0..d939274 100644
--- a/com.google.eclipse.elt.view/src/com/google/eclipse/elt/view/ui/TerminalWidget.java
+++ b/com.google.eclipse.elt.view/src/com/google/eclipse/elt/view/ui/TerminalWidget.java
@@ -22,7 +22,7 @@
 import org.eclipse.swt.widgets.*;
 import org.eclipse.ui.IViewSite;
 
-import com.google.eclipse.elt.emulator.control.ITerminalListener;
+import com.google.eclipse.elt.emulator.control.*;
 import com.google.eclipse.elt.emulator.core.VT100TerminalControl;
 import com.google.eclipse.elt.emulator.provisional.api.*;
 import com.google.eclipse.elt.view.connector.*;
@@ -33,7 +33,7 @@
 class TerminalWidget extends Composite {
   private final TerminalListener terminalListener = new TerminalListener();
 
-  private final VT100TerminalControl terminalControl;
+  private final ITerminalViewControl terminalControl;
 
   private LifeCycleListener lifeCycleListener;
   private final String encoding = DEFAULT_ENCODING;
