diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/NumericTagPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/NumericTagPreferencePage.java
index f661367..d435491 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/NumericTagPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/NumericTagPreferencePage.java
@@ -32,7 +32,7 @@
 public class NumericTagPreferencePage extends PreferenceAndPropertyPage {
   private static final String PREFERENCE_PAGE_ID = NumericTagPreferencePage.class.getName();
 
-  private List lstPaths;
+  private List lstPatterns;
   private Button btnAdd;
   private Button btnEdit;
   private Button btnRemove;
@@ -45,11 +45,11 @@
     lblDescription.setText(pageDescription);
     new Label(parent, SWT.NONE);
 
-    ListViewer lstVwrPaths = new ListViewer(parent, SWT.BORDER | SWT.V_SCROLL);
-    lstPaths = lstVwrPaths.getList();
+    ListViewer lstVwrPatterns = new ListViewer(parent, SWT.BORDER | SWT.V_SCROLL);
+    lstPatterns = lstVwrPatterns.getList();
     gridData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
     gridData.heightHint = 127;
-    lstPaths.setLayoutData(gridData);
+    lstPatterns.setLayoutData(gridData);
 
     Composite composite = new Composite(parent, SWT.NONE);
     composite.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, false, 1, 1));
@@ -73,7 +73,7 @@
   }
 
   private void addEventListeners() {
-    lstPaths.addSelectionListener(new SelectionAdapter() {
+    lstPatterns.addSelectionListener(new SelectionAdapter() {
       @Override public void widgetSelected(SelectionEvent e) {
         enableButtonsDependingOnListSelection();
       }
@@ -82,33 +82,33 @@
       @Override public void widgetSelected(SelectionEvent e) {
         AddOrEditPatternDialog dialog = addPattern(getShell());
         if (dialog.open() == OK) {
-          lstPaths.add(dialog.pattern());
+          lstPatterns.add(dialog.pattern());
         }
       }
     });
     btnEdit.addSelectionListener(new SelectionAdapter() {
       @Override public void widgetSelected(SelectionEvent e) {
-        int selectionIndex = lstPaths.getSelectionIndex();
-        AddOrEditPatternDialog dialog = editPattern(lstPaths.getItem(selectionIndex), getShell());
+        int selectionIndex = lstPatterns.getSelectionIndex();
+        AddOrEditPatternDialog dialog = editPattern(lstPatterns.getItem(selectionIndex), getShell());
         if (dialog.open() == OK) {
-          lstPaths.setItem(selectionIndex, dialog.pattern());
+          lstPatterns.setItem(selectionIndex, dialog.pattern());
         }
       }
     });
     btnRemove.addSelectionListener(new SelectionAdapter() {
       @Override public void widgetSelected(SelectionEvent e) {
-        int index = lstPaths.getSelectionIndex();
+        int index = lstPatterns.getSelectionIndex();
         if (index < 0) {
           return;
         }
-        lstPaths.remove(index);
+        lstPatterns.remove(index);
         enableButtonsDependingOnListSelection();
       }
     });
   }
 
   private void enableButtonsDependingOnListSelection() {
-    int selectionIndex = lstPaths.getSelectionIndex();
+    int selectionIndex = lstPatterns.getSelectionIndex();
     boolean hasSelection = selectionIndex >= 0;
     btnEdit.setEnabled(hasSelection);
     btnRemove.setEnabled(hasSelection);
@@ -120,7 +120,7 @@
 
   @Override protected void setupBinding(PreferenceBinder binder, PreferenceFactory factory) {
     StringSplitter splitter = NumericTagPatternSplitter.instance();
-    binder.add(bindItemsOf(lstPaths).to(factory.newStringListPreference(NUMERIC_TAG_PATTERNS, splitter)));
+    binder.add(bindItemsOf(lstPatterns).to(factory.newStringListPreference(NUMERIC_TAG_PATTERNS, splitter)));
   }
 
   @Override protected void onProjectSettingsActivation(boolean projectSettingsActive) {}
