Finished "Colors" preference page.
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);
   }
 }