diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CodeGenerationPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CodeGenerationPreference.java
index 40699ad..cf1cb60 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CodeGenerationPreference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CodeGenerationPreference.java
@@ -8,27 +8,11 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.compiler;
 
-import org.eclipse.jface.preference.IPreferenceStore;
-
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class CodeGenerationPreference {
-  private final IPreferenceStore store;
-  private final String enabledPreferenceName;
-  private final String outputDirectoryPreferenceName;
+public interface CodeGenerationPreference {
+  boolean isEnabled();
 
-  CodeGenerationPreference(IPreferenceStore store, String enabledPreferenceName, String outputDirectoryPreferenceName) {
-    this.store = store;
-    this.enabledPreferenceName = enabledPreferenceName;
-    this.outputDirectoryPreferenceName = outputDirectoryPreferenceName;
-  }
-
-  public boolean isEnabled() {
-    return store.getBoolean(enabledPreferenceName);
-  }
-
-  public String outputDirectory() {
-    return store.getString(outputDirectoryPreferenceName);
-  }
+  String outputDirectory();
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
index c00f3a3..d87f142 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CompilerPreferences.java
@@ -28,15 +28,15 @@
   }
 
   private final IPreferenceStore store;
-  private final CodeGenerationPreference java;
-  private final CodeGenerationPreference cpp;
-  private final CodeGenerationPreference python;
+  private final CodeGenerationPreference javaCodeGenerationPreference;
+  private final CodeGenerationPreference cppCodeGenerationPreference;
+  private final CodeGenerationPreference pythonCodeGenerationPreference;
 
   private CompilerPreferences(IPreferenceStore store) {
     this.store = store;
-    java = new CodeGenerationPreference(store, JAVA_CODE_GENERATION_ENABLED, JAVA_OUTPUT_DIRECTORY);
-    cpp = new CodeGenerationPreference(store, CPP_CODE_GENERATION_ENABLED, CPP_OUTPUT_DIRECTORY);
-    python = new CodeGenerationPreference(store, PYTHON_CODE_GENERATION_ENABLED, PYTHON_OUTPUT_DIRECTORY);
+    javaCodeGenerationPreference = new JavaCodeGenerationPreference(store);
+    cppCodeGenerationPreference = new CppCodeGenerationPreference(store);
+    pythonCodeGenerationPreference = new PythonCodeGenerationPreference(store);
   }
 
   public boolean shouldCompileProtoFiles() {
@@ -56,15 +56,15 @@
   }
 
   public CodeGenerationPreference javaCodeGeneration() {
-    return java;
+    return javaCodeGenerationPreference;
   }
 
   public CodeGenerationPreference cppCodeGeneration() {
-    return cpp;
+    return cppCodeGenerationPreference;
   }
 
   public CodeGenerationPreference pythonCodeGeneration() {
-    return python;
+    return pythonCodeGenerationPreference;
   }
 
   public boolean refreshResources() {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CppCodeGenerationPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CppCodeGenerationPreference.java
new file mode 100644
index 0000000..0a08d26
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/CppCodeGenerationPreference.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.preferences.compiler;
+
+import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.*;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+class CppCodeGenerationPreference implements CodeGenerationPreference {
+  private final IPreferenceStore store;
+
+  CppCodeGenerationPreference(IPreferenceStore store) {
+    this.store = store;
+  }
+
+  @Override public boolean isEnabled() {
+    return store.getBoolean(JAVA_CODE_GENERATION_ENABLED);
+  }
+
+  @Override public String outputDirectory() {
+    return store.getString(JAVA_OUTPUT_DIRECTORY);
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/JavaCodeGenerationPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/JavaCodeGenerationPreference.java
new file mode 100644
index 0000000..93fe698
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/JavaCodeGenerationPreference.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.preferences.compiler;
+
+import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.*;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+class JavaCodeGenerationPreference implements CodeGenerationPreference {
+  private final IPreferenceStore store;
+
+  JavaCodeGenerationPreference(IPreferenceStore store) {
+    this.store = store;
+  }
+
+  @Override public boolean isEnabled() {
+    return store.getBoolean(CPP_CODE_GENERATION_ENABLED);
+  }
+
+  @Override public String outputDirectory() {
+    return store.getString(CPP_OUTPUT_DIRECTORY);
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PythonCodeGenerationPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PythonCodeGenerationPreference.java
new file mode 100644
index 0000000..c256ad8
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/PythonCodeGenerationPreference.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2012 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.preferences.compiler;
+
+import static com.google.eclipse.protobuf.ui.preferences.compiler.PreferenceNames.*;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+class PythonCodeGenerationPreference implements CodeGenerationPreference {
+  private final IPreferenceStore store;
+
+  PythonCodeGenerationPreference(IPreferenceStore store) {
+    this.store = store;
+  }
+
+  @Override public boolean isEnabled() {
+    return store.getBoolean(PYTHON_CODE_GENERATION_ENABLED);
+  }
+
+  @Override public String outputDirectory() {
+    return store.getString(PYTHON_OUTPUT_DIRECTORY);
+  }
+}
