* merge with HEAD
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/ValidatorUpdater.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/ValidatorUpdater.java
index ac4c142..f1cd6c1 100644
--- a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/ValidatorUpdater.java
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/ValidatorUpdater.java
@@ -96,7 +96,6 @@
 				} finally {
 					monitor.done();
 				}
-				
 			}
 		};
 		try {
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/externalchecker/ExternalCheckerConfigurationPage.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/externalchecker/ExternalCheckerConfigurationPage.java
index 14f16fb..5a1a61c 100644
--- a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/externalchecker/ExternalCheckerConfigurationPage.java
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/externalchecker/ExternalCheckerConfigurationPage.java
@@ -4,6 +4,7 @@
 import java.util.List;
 
 import org.eclipse.dltk.internal.ui.wizards.dialogfields.StringDialogField;
+import org.eclipse.dltk.ui.environment.EnvironmentPathBlock;
 import org.eclipse.dltk.validators.internal.core.externalchecker.ExternalChecker;
 import org.eclipse.dltk.validators.internal.core.externalchecker.Rule;
 import org.eclipse.dltk.validators.ui.ValidatorConfigurationPage;
@@ -21,7 +22,6 @@
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Table;
@@ -32,7 +32,7 @@
 		ValidatorConfigurationPage {
 
 	private StringDialogField fArguments;
-	private StringDialogField fPath;
+	private EnvironmentPathBlock fPath;
 	private StringDialogField fExtensions;
 
 	private Table fTable;
@@ -55,35 +55,14 @@
 	public void applyChanges() {
 		ExternalChecker externalChecker = getExtrenalChecker();
 		externalChecker.setArguments(this.fArguments.getText());
-		externalChecker.setCommand(this.fPath.getText());
+		externalChecker.setCommand(this.fPath.getPaths());
 		externalChecker.setRules(rulesList.getRules());
 		externalChecker.setExtensions(this.fExtensions.getText());
 	}
 
 	private void createPathBrowse(final Composite parent, int columns) {
-		this.fPath.doFillIntoGrid(parent, columns - 1);
-		Text path = this.fPath.getTextControl(parent);
-		GridData gd = new GridData();
-		gd.horizontalAlignment = GridData.FILL;
-		gd.grabExcessHorizontalSpace = true;
-		gd.horizontalSpan = columns - 2;
-		path.setLayoutData(gd);
-		// Browse
-		Button browse = new Button(parent, SWT.PUSH);
-		browse.setText(Messages.ExternalCheckerConfigurationPage_browse);
-		gd = new GridData(GridData.END);
-		gd.horizontalSpan = 1;
-		browse.setLayoutData(gd);
-
-		browse.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				FileDialog dialog = new FileDialog(parent.getShell(), SWT.OPEN);
-				String file = dialog.open();
-				if (file != null) {
-					fPath.setText(file);
-				}
-			}
-		});
+		this.fPath = new EnvironmentPathBlock();
+		this.fPath.createControl(parent, columns);
 	}
 
 	public void createControl(final Composite ancestor, int columns) {
@@ -203,19 +182,17 @@
 		ExternalChecker externalChecker = getExtrenalChecker();
 		this.fArguments.setText(externalChecker.getArguments());
 
-		this.fPath.setText(externalChecker.getCommand().toOSString());
+		this.fPath.setPaths(externalChecker.getCommand());
 		this.fExtensions.setText(externalChecker.getExtensions());
 
 		this.rulesList.getRules().clear();
 		for (int i = 0; i < externalChecker.getNRules(); i++) {
-			Rule r = (Rule) externalChecker.getRule(i);
+			Rule r = externalChecker.getRule(i);
 			rulesList.addRule(r);
 		}
 	}
 
 	private void createFields() {
-		this.fPath = new StringDialogField();
-		this.fPath.setLabelText(Messages.ExternalCheckerConfigurationPage_commandToRunChecker);
 		this.fArguments = new StringDialogField();
 		this.fArguments.setLabelText(Messages.ExternalCheckerConfigurationPage_CheckerArguments);
 		this.fExtensions = new StringDialogField();
diff --git a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/externalchecker/ExternalCheckerConsoleTracker.java b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/externalchecker/ExternalCheckerConsoleTracker.java
index 4e485c6..493623f 100644
--- a/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/externalchecker/ExternalCheckerConsoleTracker.java
+++ b/core/plugins/org.eclipse.dltk.validators.ui/src/org/eclipse/dltk/validators/internal/ui/externalchecker/ExternalCheckerConsoleTracker.java
@@ -27,12 +27,14 @@
 	public ExternalCheckerConsoleTracker() {
 		super();
 
-		IValidator[] validators = ValidatorRuntime.getActiveValidators();
+		IValidator[] validators = ValidatorRuntime.getAllValidators();
 		for (int i = 0; i < validators.length; i++) {
 			if (validators[i] instanceof ExternalChecker) {
 				ExternalChecker checker = (ExternalChecker) validators[i];
-				for (int j = 0; j < checker.getNRules(); j++) {
-					rules.add(checker.getRule(j));
+				if (checker.isActive()) {
+					for (int j = 0; j < checker.getNRules(); j++) {
+						rules.add(checker.getRule(j));
+					}
 				}
 			}
 		}
@@ -62,30 +64,28 @@
 	public void matchFound(PatternMatchEvent event) {
 		try {
 			IOConsole cons = (IOConsole) event.getSource();
-			IDocument doc = (IDocument) cons.getDocument();
+			IDocument doc = cons.getDocument();
 			int offset = event.getOffset();
 			int length = event.getLength();
 			String text = doc.get(offset, length);
-			
+
 			List wlist = ExternalCheckerWildcardManager.loadCustomWildcards();
 			WildcardMatcher wmatcher = new WildcardMatcher(wlist);
 
-				for (int i = 0; i < rules.size(); i++) {
-					Rule rule = (Rule) rules.get(i);
-					try {
-						ExternalCheckerProblem problem = wmatcher.match(rule,
-								text);
-						if (problem != null) {
-							IHyperlink link = new ExternalCheckerSyntaxHyperlink(
-									console, problem);
-							console.addHyperlink(link, offset, text
-									.length());
-							break;
-						}
-					} catch (WildcardException x) {
+			for (int i = 0; i < rules.size(); i++) {
+				Rule rule = (Rule) rules.get(i);
+				try {
+					ExternalCheckerProblem problem = wmatcher.match(rule, text);
+					if (problem != null) {
+						IHyperlink link = new ExternalCheckerSyntaxHyperlink(
+								console, problem);
+						console.addHyperlink(link, offset, text.length());
+						break;
 					}
+				} catch (WildcardException x) {
 				}
-//				offset = offset + text.length() + 1;
+			}
+			// offset = offset + text.length() + 1;
 		} catch (BadLocationException e) {
 		}
 	}