diff --git a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
index 80c1d85..7631b9f 100644
--- a/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
+++ b/com.google.eclipse.terminal.local/src/com/google/eclipse/terminal/local/ui/view/TerminalView.java
@@ -17,6 +17,7 @@
 import static org.eclipse.ui.IWorkbenchPage.VIEW_ACTIVATE;
 
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.tm.internal.terminal.control.ITerminalListener;
@@ -36,7 +37,7 @@
 
   private static final String VIEW_ID = "com.google.eclipse.terminal.local.localTerminalView";
 
-  private ColorPreferencesChangeListener colorPreferencesChangeListener;
+  private IPropertyChangeListener colorPreferencesChangeListener;
   private IMemento savedState;
   private TerminalWidget terminalWidget;
   private IPath workingDirectory;
@@ -89,8 +90,13 @@
     });
     IViewSite viewSite = getViewSite();
     terminalWidget.setUpGlobalEditActionHandlers(viewSite.getActionBars());
-    colorPreferencesChangeListener = new ColorPreferencesChangeListener(terminalWidget);
+    colorPreferencesChangeListener = new AbstractColorPreferencesChangeListener() {
+      @Override protected void onColorChanged() {
+        resetColors();
+      }
+    };
     preferenceStore().addPropertyChangeListener(colorPreferencesChangeListener);
+    resetColors();
     if (savedState != null) {
       connectUsingSavedState();
       return;
@@ -101,6 +107,10 @@
     }
   }
 
+  private void resetColors() {
+    terminalWidget.resetTerminalColors(background(), foreground());
+  }
+
   private void connectUsingSavedState() {
     String title = savedState(TITLE_STATE_TYPE);
     setPartName(title);
@@ -134,16 +144,4 @@
     }
     super.dispose();
   }
-
-  private static class ColorPreferencesChangeListener extends AbstractColorPreferencesChangeListener {
-    private final TerminalWidget terminalWidget;
-
-    ColorPreferencesChangeListener(TerminalWidget terminalWidget) {
-      this.terminalWidget = terminalWidget;
-    }
-
-    @Override protected void onColorChanged() {
-      terminalWidget.resetTerminalColors(background(), foreground());
-    }
-  }
 }
diff --git a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java
index f3679b6..bde87d1 100644
--- a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java
+++ b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/StyleMap.java
@@ -54,6 +54,8 @@
 	private boolean fInvertColors;
 	private boolean fProportional;
 	private final int[] fOffsets=new int[256];
+  private RGB background = new RGB(0, 0, 0);
+  private RGB foreground = new RGB(229, 229, 229);
 	StyleMap() {
 		initColors();
 		fDefaultStyle=Style.getStyle(StyleColor.getStyleColor(BLACK),StyleColor.getStyleColor(WHITE));
@@ -68,7 +70,7 @@
 		if(fInvertColors) {
 			setColor(fColorMapForeground, WHITE, 0, 0, 0);
 			setColor(fColorMapForeground, WHITE_FOREGROUND, 50, 50, 50);
-			setColor(fColorMapForeground, BLACK, 229, 229, 229); // set foreground
+			setColor(fColorMapForeground, BLACK, foreground.red, foreground.green, foreground.blue); // set foreground
 		} else {
 			setColor(fColorMapForeground, WHITE, 255, 255, 255);
 			setColor(fColorMapForeground, WHITE_FOREGROUND, 229, 229, 229);
@@ -85,7 +87,7 @@
 
 	private void initBackgroundColors() {
 		if(fInvertColors) {
-			setColor(fColorMapBackground, WHITE, 0, 0, 0); // set background
+			setColor(fColorMapBackground, WHITE, background.red, background.green, background.blue); // set background
 			setColor(fColorMapBackground, WHITE_FOREGROUND, 50, 50, 50); // only used when colors are inverse
 			setColor(fColorMapBackground, BLACK, 255, 255, 255); // set cursor color
 		} else {
@@ -273,4 +275,10 @@
     }
 		return fOffsets[c];
 	}
+
+	public void resetColors(RGB background, RGB foreground) {
+    this.background = background;
+    this.foreground = foreground;
+    initColors();
+  }
 }
diff --git a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java
index f098168..98336ae 100644
--- a/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java
+++ b/com.google.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/textcanvas/TextLineRenderer.java
@@ -160,5 +160,6 @@
 	}
 
 	@Override public void resetColors(RGB background, RGB foreground) {
+	  fStyleMap.resetColors(background, foreground);
   }
 }
