diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringListPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringListPreference.java
new file mode 100644
index 0000000..b2a3df4
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringListPreference.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2011 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;
+
+import static org.eclipse.xtext.util.Strings.*;
+
+import java.util.List;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+
+/**
+ * A preference that stores a list of {@code String} values.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class StringListPreference extends Preference<List<String>> {
+
+  private final String delimiter;
+
+  /**
+   * Creates a new </code>{@link StringListPreference}</code>.
+   * @param name the name of this preference.
+   * @param delimiter the delimiter to split a single {@code String} into a list.
+   * @param store the store for this preference.
+   */
+  public StringListPreference(String name, String delimiter, IPreferenceStore store) {
+    super(name, store);
+    this.delimiter = delimiter;
+  }
+
+  /** {@inheritDoc} */
+  @Override public List<String> value() {
+    return doSplit(store.getString(name));
+  }
+
+  /** {@inheritDoc} */
+  @Override public List<String> defaultValue() {
+    return doSplit(store.getDefaultString(name));
+  }
+
+  private List<String> doSplit(String value) {
+    return split(value, delimiter);
+  }
+
+  /** {@inheritDoc} */
+  @Override public void value(List<String> value) {
+    store.setValue(name, doConcat(value));
+  }
+
+  /** {@inheritDoc} */
+  @Override public void defaultValue(List<String> value) {
+    store.setDefault(name, doConcat(value));
+  }
+
+  private String doConcat(List<String> value) {
+    return concat(delimiter, value);
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToListItems.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToListItems.java
new file mode 100644
index 0000000..3544396
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToListItems.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2011 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.binding;
+
+import static java.util.Arrays.asList;
+
+import java.util.Collection;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.widgets.List;
+
+import com.google.eclipse.protobuf.ui.preferences.StringListPreference;
+
+/**
+ * Binds a {@code String} value from a <code>{@link IPreferenceStore}</code> to a list of items of a
+ * <code>{@link List}</code>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class BindingToListItems implements Binding {
+
+  private final List list;
+  private final StringListPreference preference;
+
+  public static BindingBuilder bindItemsOf(List list) {
+    return new BindingBuilder(list);
+  }
+
+  /**
+   * Creates a new </code>{@link BindingToListItems}</code>.
+   * @param list the control to bind to the preference.
+   * @param preference the given preference.
+   */
+  private BindingToListItems(List list, StringListPreference preference) {
+    this.list = list;
+    this.preference = preference;
+  }
+
+  /** {@inheritDoc} */
+  public void applyPreferenceValueToTarget() {
+    applyValue(preference.value());
+  }
+
+  /** {@inheritDoc} */
+  public void applyDefaultPreferenceValueToTarget() {
+    applyValue(preference.defaultValue());
+  }
+
+  private void applyValue(Collection<String> value) {
+    list.removeAll();
+    for (String s : value) list.add(s);
+  }
+
+  /** {@inheritDoc} */
+  public void savePreferenceValue() {
+    preference.value(asList(list.getItems()));
+  }
+
+  public static class BindingBuilder {
+    private final List list;
+
+    /**
+     * Creates a new </code>{@link BindingBuilder}</code>.
+     * @param list the list whose items will be bound to a preference value.
+     */
+    public BindingBuilder(List list) {
+      this.list = list;
+    }
+
+    /**
+     * Creates a new <code>{@link BindingToListItems}</code>.
+     * @param preference the preference to bind to the value of this builder's list.
+     * @return the created binding.
+     */
+    public BindingToListItems to(StringListPreference preference) {
+      return new BindingToListItems(list, preference);
+    }
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToTextValue.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToTextValue.java
index 92c2e5b..002e4a0 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToTextValue.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/binding/BindingToTextValue.java
@@ -14,7 +14,7 @@
 import com.google.eclipse.protobuf.ui.preferences.StringPreference;
 
 /**
- * Binds a {@code boolean} value from a <code>{@link IPreferenceStore}</code> to the value of a
+ * Binds a {@code String} value from a <code>{@link IPreferenceStore}</code> to the value of a
  * <code>{@link Text}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/NumericTagPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/NumericTagPreferencePage.java
index 6495ce1..4b5f513 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/NumericTagPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/NumericTagPreferencePage.java
@@ -8,9 +8,8 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.pages.editor.numerictag;
 
+import static com.google.eclipse.protobuf.ui.preferences.binding.BindingToListItems.bindItemsOf;
 import static com.google.eclipse.protobuf.ui.preferences.pages.editor.numerictag.Messages.*;
-import static java.util.Arrays.asList;
-import static org.eclipse.xtext.util.Strings.*;
 
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.viewers.ListViewer;
@@ -20,7 +19,7 @@
 import org.eclipse.swt.widgets.*;
 
 import com.google.eclipse.protobuf.ui.preferences.*;
-import com.google.eclipse.protobuf.ui.preferences.binding.*;
+import com.google.eclipse.protobuf.ui.preferences.binding.PreferenceBinder;
 import com.google.eclipse.protobuf.ui.preferences.pages.PreferenceAndPropertyPage;
 
 /**
@@ -30,7 +29,6 @@
  */
 public class NumericTagPreferencePage extends PreferenceAndPropertyPage {
 
-  private static final String PATTERN_DELIMITER = "//t"; //$NON-NLS-1$
   private static final String PREFERENCE_PAGE_ID = NumericTagPreferencePage.class.getName();
 
   private List lstPaths;
@@ -102,30 +100,8 @@
 
   @Override protected void setupBinding(PreferenceBinder preferenceBinder) {
     RawPreferences preferences = new RawPreferences(getPreferenceStore());
-    final StringPreference patterns = preferences.patterns();
-    preferenceBinder.add(new Binding() {
-      public void applyPreferenceValueToTarget() {
-        setPatterns(patterns.value());
-      }
-
-      public void applyDefaultPreferenceValueToTarget() {
-        setPatterns(patterns.defaultValue());
-      }
-
-      public void savePreferenceValue() {
-        patterns.value(patterns());
-      }
-    });
-  }
-
-  private void setPatterns(String value) {
-    lstPaths.removeAll();
-    for (String pattern : split(value, PATTERN_DELIMITER))
-      lstPaths.add(pattern);
-  }
-
-  private String patterns() {
-    return concat(PATTERN_DELIMITER, asList(lstPaths.getItems()));
+    StringListPreference patterns = preferences.patterns();
+    preferenceBinder.add(bindItemsOf(lstPaths).to(patterns));
   }
 
   @Override protected void onProjectSettingsActivation(boolean projectSettingsActive) {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/NumericTagPreferenceStoreInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/NumericTagPreferenceStoreInitializer.java
index 5e6499a..8ca44a0 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/NumericTagPreferenceStoreInitializer.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/NumericTagPreferenceStoreInitializer.java
@@ -8,6 +8,8 @@
  */
 package com.google.eclipse.protobuf.ui.preferences.pages.editor.numerictag;
 
+import static java.util.Collections.singletonList;
+
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.xtext.ui.editor.preferences.*;
 
@@ -22,6 +24,6 @@
   public void initialize(IPreferenceStoreAccess access) {
     IPreferenceStore store = access.getWritablePreferenceStore();
     RawPreferences preferences = new RawPreferences(store);
-    preferences.patterns().defaultValue("Next[\\s]+Id:[\\s]+[\\d]+");
+    preferences.patterns().defaultValue(singletonList("Next[\\s]+Id:[\\s]+[\\d]+"));
   }
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/RawPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/RawPreferences.java
index 5c6cee2..f414aab 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/RawPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/editor/numerictag/RawPreferences.java
@@ -11,20 +11,20 @@
 
 import org.eclipse.jface.preference.IPreferenceStore;
 
-import com.google.eclipse.protobuf.ui.preferences.StringPreference;
+import com.google.eclipse.protobuf.ui.preferences.StringListPreference;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
 class RawPreferences {
 
-  private final StringPreference patterns;
+  private final StringListPreference patterns;
 
   RawPreferences(IPreferenceStore store) {
-    patterns = new StringPreference("numericTag.patterns", store);
+    patterns = new StringListPreference("numericTag.patterns", "\\t", store);
   }
 
-  StringPreference patterns() {
+  StringListPreference patterns() {
     return patterns;
   }
 }
