* merge with HEAD
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/plugin.properties b/tcl/plugins/org.eclipse.dltk.tcl.ui/plugin.properties
index dc33648..47ddd66 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/plugin.properties
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/plugin.properties
@@ -47,7 +47,7 @@
 
 
 # Preference pages
-TclPreferencePage=DLTK > Tcl
+TclPreferencePage=Tcl
 
 TclManPagesPreferencePage=Man pages
 
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/plugin.xml b/tcl/plugins/org.eclipse.dltk.tcl.ui/plugin.xml
index 43d8825..dae86fb 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/plugin.xml
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/plugin.xml
@@ -155,6 +155,9 @@
             icon="icons/tcl_obj.gif"
             id="org.eclipse.dltk.tcl.ui.editor.TclEditor"
             name="DLTK Tcl Editor">
+         <contentTypeBinding
+               contentTypeId="org.eclipse.dltk.tclContentType">
+         </contentTypeBinding>
       </editor>
    </extension>
  <extension
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/TclUILanguageToolkit.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/TclUILanguageToolkit.java
index 6debda1..0830ca0 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/TclUILanguageToolkit.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/TclUILanguageToolkit.java
@@ -15,6 +15,7 @@
 import org.eclipse.dltk.tcl.core.TclLanguageToolkit;
 import org.eclipse.dltk.ui.IDLTKUILanguageToolkit;
 import org.eclipse.dltk.ui.ScriptElementLabels;
+import org.eclipse.dltk.ui.viewsupport.ScriptUILabelProvider;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.preference.IPreferenceStore;
 
@@ -77,5 +78,10 @@
 	public String getEditorID(Object inputElement) {
 		return "org.eclipse.dltk.tcl.ui.editor.TclEditor";
 	}
-
+	public String getInterpreterContainerID() {
+		return "org.eclipse.dltk.tcl.launching.INTERPRETER_CONTAINER";
+	}
+	public ScriptUILabelProvider createScripUILabelProvider() {
+		return null;
+	}
 }
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/ManPageFolder.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/ManPageFolder.java
new file mode 100644
index 0000000..ae90449
--- /dev/null
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/ManPageFolder.java
@@ -0,0 +1,126 @@
+/**
+ * 
+ */
+package org.eclipse.dltk.tcl.internal.ui.documentation;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class ManPageFolder {
+	private String path;
+	private HashMap pages = new HashMap();
+
+	public ManPageFolder(String path) {
+		super();
+		this.path = path;
+	}
+
+	public void addPage(String keyword, String file) {
+		pages.put(keyword, file);
+	}
+
+	public boolean verify() {
+		if (path == null)
+			return false;
+		File file = new File(path);
+		if (file.exists() && file.isDirectory())
+			return true;
+		return false;
+	}
+
+	public String getPath() {
+		return path;
+	}
+
+	public HashMap getPages() {
+		return pages;
+	}
+	
+	
+	
+	public boolean equals(Object obj) {
+		if (!(obj instanceof ManPageFolder))
+			return false;
+		if (obj == this)
+			return true;
+		ManPageFolder f = (ManPageFolder) obj;
+		if (!f.path.equals(this.path))
+			return false;
+		if (!f.pages.equals(this.pages))
+			return false;
+		return true;
+	}
+
+	public static List readXML(String data) throws IOException {
+		// Wrapper the stream for efficient parsing
+		InputStream stream = new ByteArrayInputStream(data.getBytes());
+
+		// Do the parsing and obtain the top-level node
+		Element config = null;
+		try {
+			DocumentBuilder parser = DocumentBuilderFactory.newInstance()
+					.newDocumentBuilder();
+			parser.setErrorHandler(new DefaultHandler());
+			config = parser.parse(new InputSource(stream)).getDocumentElement();
+		} catch (SAXException e) {
+			throw new IOException("Bad XML format");
+		} catch (ParserConfigurationException e) {
+			stream.close();
+			throw new IOException("Bad XML format");
+		} finally {
+			stream.close();
+		}
+
+		if (!config.getNodeName().equalsIgnoreCase("manPages")) {
+			throw new RuntimeException("Bad top level node");
+		}
+
+		List folders = new ArrayList();
+
+		NodeList list = config.getChildNodes();
+		int length = list.getLength();
+		for (int i = 0; i < length; ++i) {
+			Node node = list.item(i);
+			short type = node.getNodeType();
+			if (type == Node.ELEMENT_NODE
+					&& node.getNodeName().equalsIgnoreCase("location")) {
+				Element location = (Element) node;
+				String path = location.getAttribute("path");
+				ManPageFolder folder = new ManPageFolder(path);
+				NodeList locationChilds = location.getChildNodes();
+				int pages = locationChilds.getLength();
+				for (int j = 0; j < pages; ++j) {
+					node = locationChilds.item(j);
+					type = node.getNodeType();
+					if (type == Node.ELEMENT_NODE
+							&& node.getNodeName().equalsIgnoreCase("page")) {
+						Element word = (Element) node;
+						String kw = word.getAttribute("keyword");
+						String file = word.getAttribute("file");
+						folder.addPage(kw, file);
+					}
+				}
+				folders.add(folder);
+			}
+		}
+
+		return folders;
+	}
+
+}
\ No newline at end of file
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/ManPagesLocationsBlock.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/ManPagesLocationsBlock.java
index 8791493..0503f67 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/ManPagesLocationsBlock.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/ManPagesLocationsBlock.java
@@ -9,34 +9,56 @@
  *******************************************************************************/
 package org.eclipse.dltk.tcl.internal.ui.documentation;
 
-
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileFilter;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.InvocationTargetException;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.dltk.tcl.core.TclPlugin;
 import org.eclipse.dltk.tcl.ui.TclPreferenceConstants;
-import org.eclipse.dltk.ui.viewsupport.StorageLabelProvider;
-import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.dltk.ui.DLTKPluginImages;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.jface.viewers.IBaseLabelProvider;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerSorter;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -45,230 +67,241 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.DirectoryDialog;
 import org.eclipse.swt.widgets.Label;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
 
- 
 /**
  * Control used to edit the libraries associated with a Interpreter install
  */
-public class ManPagesLocationsBlock implements SelectionListener, ISelectionChangedListener {
-	
+public class ManPagesLocationsBlock implements SelectionListener,
+		ISelectionChangedListener {
+
 	/**
 	 * Attribute name for the last path used to open a file/directory chooser
 	 * dialog.
 	 */
 	protected static final String LAST_PATH_SETTING = "LAST_PATH_SETTING"; //$NON-NLS-1$
-	
+
 	/**
 	 * the prefix for dialog setting pertaining to this block
 	 */
 	protected static final String DIALOG_SETTINGS_PREFIX = "ManPagesLocationsBlock"; //$NON-NLS-1$
-	
+
 	protected boolean fInCallback = false;
-	
+
 	protected File fHome;
-	
-	//widgets
-	protected ListViewer fLocationsViewer;
-	private Button fUpButton;
-	private Button fDownButton;
+
+	// widgets
+	protected TreeViewer fLocationsViewer;
+	private Button fClearButton;
 	private Button fRemoveButton;
 	private Button fAddButton;
 	protected Button fDefaultButton;
 
 	private ManLocationsContentProvider fLocationsContentProvider;
-	
+
 	private PreferencePage fPage;
-	
+
 	private IPreferenceStore fStore;
-	
+
 	public ManPagesLocationsBlock(IPreferenceStore store, PreferencePage page) {
 		fPage = page;
 		fStore = store;
 	}
-	
-	protected IBaseLabelProvider getLabelProvider () {
-		return new StorageLabelProvider();
+
+	protected IBaseLabelProvider getLabelProvider() {
+		return new LabelProvider() {
+
+			public Image getImage(Object element) {
+				if (element instanceof ManPageFolder) {
+					return DLTKPluginImages.DESC_OBJS_LIBRARY.createImage();
+				}
+				return DLTKPluginImages.DESC_OBJS_INFO_OBJ.createImage();
+			}
+
+			public String getText(Object element) {
+				if (element instanceof ManPageFolder) {
+					ManPageFolder folder = (ManPageFolder) element;
+					return folder.getPath();
+				}
+				return super.getText(element);
+			}
+
+		};
 	}
+
+	private List folders = null;
+
+	private String getFoldersAsXML() {
+		if (folders == null)
+			return null;
+
+		// Create the Document and the top-level node
+		DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
+		DocumentBuilder docBuilder;
+		try {
+			docBuilder = dfactory.newDocumentBuilder();
+		} catch (ParserConfigurationException e1) {
+			e1.printStackTrace();
+			return null;
+		}
+		Document doc = docBuilder.newDocument();
+
+		Element topElement = doc.createElement("manPages");		
+		doc.appendChild(topElement);
+
+		for (Iterator iterator = folders.iterator(); iterator.hasNext();) {
+			ManPageFolder f = (ManPageFolder) iterator.next();
+			Element location = doc.createElement("location");
+			topElement.appendChild(location);			
+			location.setAttribute("path", f.getPath());
+			for (Iterator iterator2 = f.getPages().keySet().iterator(); iterator2
+					.hasNext();) {
+				String name = (String) iterator2.next();
+				String file = (String) f.getPages().get(name);
+				Element page = doc.createElement("page");
+				location.appendChild(page);
+				page.setAttribute("keyword", name);
+				page.setAttribute("file", file);
+			}
+		}
+
 		
-	private class ManLocationsContentProvider implements IStructuredContentProvider {
-		
-		private Viewer fViewer;
-		
-		private File[] fLocations = new File[0];
+		ByteArrayOutputStream s = new ByteArrayOutputStream();
+
+		try {
+			TransformerFactory factory = TransformerFactory.newInstance();
+			Transformer transformer;
+			transformer = factory.newTransformer();
+			transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
+			transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+
+			DOMSource source = new DOMSource(doc);
+			StreamResult outputTarget = new StreamResult(s);
+			transformer.transform(source, outputTarget);
+		} catch (TransformerConfigurationException e) {
+			e.printStackTrace();
+		} catch (TransformerException e) {
+			e.printStackTrace();
+		}
+
+		String result = null;
+		try {
+			result = s.toString("UTF8");
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+
+		return result; //$NON-NLS-1$
+	}
+
+	
+
+	private class ManLocationsContentProvider implements ITreeContentProvider {
+
+		public Object[] getChildren(Object parentElement) {
+			if (parentElement instanceof ManPageFolder) {
+				ManPageFolder folder = (ManPageFolder) parentElement;
+				String[] ch = new String[folder.getPages().size()];
+				int i = 0;
+				for (Iterator iterator = folder.getPages().keySet().iterator(); iterator
+						.hasNext();) {
+					String kw = (String) iterator.next();
+					String file = (String) folder.getPages().get(kw);
+					ch[i++] = kw + " (" + file + ")";
+				}
+				return ch;
+			}
+			return new Object[0];
+		}
+
+		public Object getParent(Object element) {
+			return null;
+		}
+
+		public boolean hasChildren(Object element) {
+			if (element instanceof ManPageFolder)
+				return true;
+			return false;
+		}
 
 		public Object[] getElements(Object inputElement) {
-			return fLocations;
+			if (folders == null)
+				return new Object[0];
+			return folders.toArray(new Object[folders.size()]);
 		}
 
 		public void dispose() {
 		}
 
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			fViewer = viewer;
-		}
-		
-		public void setLocations (File[] locs) {
-			fLocations = new File[locs.length];
-			for (int i = 0; i < locs.length; i++) {
-				fLocations[i] = new File(locs[i].getAbsolutePath());
-			}
-			fViewer.refresh();
 		}
 
-		public File[] getLocations() {
-			return fLocations;
-		}
-		
-		/**
-		 * Returns the list of locations in the given selection. 
-		 */
-		private Set getSelectedLocations(IStructuredSelection selection) {
-			Set locs= new HashSet();
-			for (Iterator iter= selection.iterator(); iter.hasNext();) {
-				Object element= iter.next();
-				if (element instanceof File) {
-					locs.add(element);
-				}
-			}
-			return locs;
-		}
-		
-		/**
-		 * Move the locations of the given selection up.
-		 */
-		public void up(IStructuredSelection selection) {
-			Set locations= getSelectedLocations(selection);
-			for (int i= 0; i < fLocations.length - 1; i++) {
-				if (locations.contains(fLocations[i + 1])) {
-					File temp= fLocations[i];
-					fLocations[i]= fLocations[i + 1];
-					fLocations[i + 1]= temp;
-				}
-			}
-			fViewer.refresh();
-			fViewer.setSelection(selection);
-		}
-
-		/**
-		 * Move the locations of the given selection down.
-		 */
-		public void down(IStructuredSelection selection) {
-			Set locations= getSelectedLocations(selection);
-			for (int i= fLocations.length - 1; i > 0; i--) {
-				if (locations.contains(fLocations[i - 1])) {
-					File temp= fLocations[i];
-					fLocations[i]= fLocations[i - 1];
-					fLocations[i - 1]= temp;
-				}
-			}
-			fViewer.refresh();
-			fViewer.setSelection(selection);
-		}
-
-		/**
-		 * Remove the locations contained in the given selection.
-		 */
-		public void remove(IStructuredSelection selection) {
-			List newLocations = new ArrayList();
-			for (int i = 0; i < fLocations.length; i++) {
-				newLocations.add(fLocations[i]);
-			}
-			Iterator iterator = selection.iterator();
-			while (iterator.hasNext()) {
-				Object element = iterator.next();
-				if (element instanceof File) {
-					newLocations.remove(element);
-				} 
-			}
-			fLocations = (File[]) newLocations.toArray(new File[newLocations.size()]);
-			fViewer.refresh();
-		}
-		
-		/**
-		 * Add the given locations before the selection, or after the existing locations
-		 * if the selection is empty.
-		 */
-		public void add(File[] locs, IStructuredSelection selection) {
-			List newLocations = new ArrayList(fLocations.length + locs.length);
-			for (int i = 0; i < fLocations.length; i++) {
-				newLocations.add(fLocations[i]);
-			}
-			List toAdd = new ArrayList(locs.length);
-			for (int i = 0; i < locs.length; i++) {
-				toAdd.add(new File(locs[i].getAbsolutePath()));
-			}
-			if (selection.isEmpty()) {
-				newLocations.addAll(toAdd);
-			} else {
-				Object element= selection.getFirstElement();
-				File firstLoc = (File) element;			 
-				int index = newLocations.indexOf(firstLoc);
-				newLocations.addAll(index, toAdd);
-			}
-			fLocations= (File[]) newLocations.toArray(new File[newLocations.size()]);
-			fViewer.refresh();
-			fViewer.setSelection(new StructuredSelection(locs), true);
-		}
-		
 	};
-	
+
 	/**
 	 * Creates and returns the source lookup control.
 	 * 
-	 * @param parent the parent widget of this control
+	 * @param parent
+	 *            the parent widget of this control
 	 */
 	public Control createControl(Composite parent) {
 		Font font = parent.getFont();
-		
+
 		Composite comp = new Composite(parent, SWT.NONE);
 		GridLayout topLayout = new GridLayout();
 		topLayout.numColumns = 2;
 		topLayout.marginHeight = 0;
 		topLayout.marginWidth = 0;
-		comp.setLayout(topLayout);		
+		comp.setLayout(topLayout);
 		GridData gd = new GridData(GridData.FILL_BOTH);
 		comp.setLayoutData(gd);
-		
-		fLocationsViewer= new ListViewer(comp);
+
+		fLocationsViewer = new TreeViewer(comp);
 		gd = new GridData(GridData.FILL_BOTH);
 		gd.heightHint = 6;
 		fLocationsViewer.getControl().setLayoutData(gd);
-		fLocationsContentProvider= new ManLocationsContentProvider();
+		fLocationsContentProvider = new ManLocationsContentProvider();
+		fLocationsViewer.setSorter(new ViewerSorter());
 		fLocationsViewer.setContentProvider(fLocationsContentProvider);
 		fLocationsViewer.setLabelProvider(getLabelProvider());
 		fLocationsViewer.setInput(this);
 		fLocationsViewer.addSelectionChangedListener(this);
-		
+
 		Composite pathButtonComp = new Composite(comp, SWT.NONE);
 		GridLayout pathButtonLayout = new GridLayout();
 		pathButtonLayout.marginHeight = 0;
 		pathButtonLayout.marginWidth = 0;
 		pathButtonComp.setLayout(pathButtonLayout);
-		gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL);
+		gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING
+				| GridData.HORIZONTAL_ALIGN_FILL);
 		pathButtonComp.setLayoutData(gd);
 		pathButtonComp.setFont(font);
-		
-		fAddButton= createPushButton(pathButtonComp, "Add");
+
+		fAddButton = createPushButton(pathButtonComp, "Add folder...");
 		fAddButton.addSelectionListener(this);
-		
-		fRemoveButton= createPushButton(pathButtonComp, "Remove");
+
+		fRemoveButton = createPushButton(pathButtonComp, "Remove");
 		fRemoveButton.addSelectionListener(this);
-		
-		fUpButton= createPushButton(pathButtonComp, "Up");
-		fUpButton.addSelectionListener(this);
-		
-		fDownButton= createPushButton(pathButtonComp, "Down");
-		fDownButton.addSelectionListener(this);
-		
+
+		fClearButton = createPushButton(pathButtonComp, "Remove All");
+		fClearButton.addSelectionListener(this);
+
 		return comp;
 	}
 
-	
 	/**
-	 * Creates and returns a button 
+	 * Creates and returns a button
 	 * 
-	 * @param parent parent widget
-	 * @param label label
+	 * @param parent
+	 *            parent widget
+	 * @param label
+	 *            label
 	 * @return Button
 	 */
 	protected Button createPushButton(Composite parent, String label) {
@@ -276,62 +309,55 @@
 		button.setFont(parent.getFont());
 		button.setText(label);
 		setButtonLayoutData(button);
-		return button;	
+		return button;
 	}
-	
-	protected void setButtonLayoutData(Button button) {						
+
+	protected void setButtonLayoutData(Button button) {
 		GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
-		int widthHint = 100;
+		int widthHint = 80;
 		Point minSize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
 		data.widthHint = Math.max(widthHint, minSize.x);
 		button.setLayoutData(data);
 	}
-	
+
 	/**
-	 * Create some empty space 
+	 * Create some empty space
 	 */
 	protected void createVerticalSpacer(Composite comp, int colSpan) {
 		Label label = new Label(comp, SWT.NONE);
 		GridData gd = new GridData();
 		gd.horizontalSpan = colSpan;
 		label.setLayoutData(gd);
-	}	
-	
+	}
+
 	/**
-	 * Updates buttons and status based on current libraries
+	 * Updates buttons and status based on current mans
 	 */
 	public void update() {
 		updateButtons();
-		IStatus status = Status.OK_STATUS;
-		
-		File[] locs = fLocationsContentProvider.getLocations();
-		for (int i = 0; i < locs.length; i++) {
-			IStatus st = validateLocation (locs[i]);
-			if (!st.isOK()) {
-				status = st;
-				break;
+
+		if (folders != null) {
+			for (Iterator iterator = folders.iterator(); iterator.hasNext();) {
+				ManPageFolder v = (ManPageFolder) iterator.next();
+				if (!v.verify()) {
+					iterator.remove();
+				}
 			}
 		}
-		
+
 		fLocationsViewer.refresh();
-				
-		updatePageStatus (status);
+
+		updatePageStatus(Status.OK_STATUS);
 	}
-	
-	public void setDefaults () {
-		String res = fStore.getDefaultString(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS);
+
+	public void setDefaults() {
+		String res = fStore
+				.getDefaultString(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS);
 		fStore.setValue(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS, res);
 		initialize();
 	}
-	
-	protected IStatus validateLocation (File location) {
-		if (location.isDirectory())
-			return Status.OK_STATUS;
-		else
-			return new Status(Status.ERROR, TclPlugin.PLUGIN_ID, 0, "Location should be a directory!", null);
-	}
-	
-	protected void updatePageStatus (IStatus status) {
+
+	protected void updatePageStatus(IStatus status) {
 		if (fPage == null)
 			return;
 		fPage.setValid(status.isOK());
@@ -340,89 +366,175 @@
 		else
 			fPage.setErrorMessage(null);
 	}
-	
-	public void initialize () {
-		String value = fStore.getString(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS);
-		String[] names = value.split(">");
-		ArrayList files = new ArrayList (names.length);
-		for (int i = 0; i < names.length; i++) {			
-			if (names[i].trim().length() == 0)
-				continue;
-			File f = new File (names[i]);
-			files.add(f);
- 		}
-		fLocationsContentProvider.setLocations((File[])files.toArray(new File[files.size()]));
+
+	public void initialize() {
+		String value = fStore
+				.getString(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS);
+		try {
+			this.folders = ManPageFolder.readXML(value);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+
 		update();
 	}
-	
+
 	/**
 	 * Saves settings
 	 */
-	public void performApply() {		
-		File[] locs = fLocationsContentProvider.getLocations();
-		StringBuffer buf = new StringBuffer();
-		for (int i = 0; i < locs.length; i++) {
-			buf.append(locs[i].getAbsolutePath());
-			buf.append(">");
-		}
-		String value = buf.toString();
-		fStore.setValue(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS, value);
-	}	
-	
-	/* (non-Javadoc)
+	public void performApply() {
+		String xml = this.getFoldersAsXML();
+		if (xml != null)
+			fStore
+					.setValue(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS,
+							xml);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 	 */
 	public void widgetSelected(SelectionEvent e) {
-		Object source= e.getSource();
-		if (source == fUpButton) {
-			fLocationsContentProvider.up((IStructuredSelection) fLocationsViewer.getSelection());
-		} else if (source == fDownButton) {
-			fLocationsContentProvider.down((IStructuredSelection) fLocationsViewer.getSelection());
+		Object source = e.getSource();
+		if (source == fClearButton) {
+			folders.clear();
 		} else if (source == fRemoveButton) {
-			fLocationsContentProvider.remove((IStructuredSelection) fLocationsViewer.getSelection());
+			IStructuredSelection selection = (IStructuredSelection) fLocationsViewer
+					.getSelection();
+			Object[] array = selection.toArray();
+			for (int i = 0; i < array.length; i++) {
+				if (array[i] instanceof ManPageFolder) {
+					for (Iterator iterator = folders.iterator(); iterator
+							.hasNext();) {
+						ManPageFolder f = (ManPageFolder) iterator.next();
+						if (f == array[i]) {
+							iterator.remove();
+							break;
+						}
+					}
+				}
+			}
 		} else if (source == fAddButton) {
-			add((IStructuredSelection) fLocationsViewer.getSelection());
-		} 
-		
+			add();
+		}
+
 		update();
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
 	 */
-	public void widgetDefaultSelected(SelectionEvent e) {}
-
-	
-	private void add(IStructuredSelection selection) { 
-		File locs = add();
-		if (locs == null)
-			return;
-		fLocationsContentProvider.add(new File[] {locs}, selection);
-		update ();
+	public void widgetDefaultSelected(SelectionEvent e) {
 	}
-	
+
 	/**
 	 * Open the file selection dialog, and add the return locations.
 	 */
-	protected File add() {
-		DirectoryDialog dialog = new DirectoryDialog(fLocationsViewer.getControl().getShell());
-		dialog.setMessage("Select directory directly containing .html files with man pages");
+	protected void add() {
+		DirectoryDialog dialog = new DirectoryDialog(fLocationsViewer
+				.getControl().getShell());
+		dialog.setMessage("Select directory to search into");
 		String result = dialog.open();
-		if (result != null) {;
-			File file = new File(result);
-			if (file != null) {
-				if (!validateLocation(file).isOK()) {
-					ErrorDialog errDlg = new ErrorDialog(fLocationsViewer.getControl().getShell(), "Error", "It is not correct location", validateLocation(file), 0);
-					errDlg.open();
-					return null;
+		if (result != null) {
+			final File file = new File(result);
+			if (this.folders == null)
+				this.folders = new ArrayList();
+			if (file != null && file.isDirectory()) {
+				ProgressMonitorDialog dialog2 = new ProgressMonitorDialog(null);
+				try {
+					dialog2.run(true, true, new IRunnableWithProgress() {
+						public void run(IProgressMonitor monitor) {
+							monitor.beginTask("Searching for man pages", 1);
+							performSearch(file);
+							monitor.done();
+						}
+
+					});
+				} catch (InvocationTargetException e) {
+					e.printStackTrace();
+				} catch (InterruptedException e) {
+					e.printStackTrace();
 				}
-				return file;
+
 			}
 		}
-		return null;
 	}
 
-	/* (non-Javadoc)
+	private void performSearch(File dir) {
+		if (!dir.isDirectory())
+			return;
+
+		String name = dir.getName();
+
+		if (name.equals("TkLib") || name.equals("TclLib")
+				|| name.equals("Keywords") || name.equals("UserCmd"))
+			return;
+
+		File[] childs = dir.listFiles(new FileFilter() {
+
+			public boolean accept(File file) {
+				if (file.isDirectory())
+					return true;
+				if (file.getName().startsWith("contents.htm"))
+					return true;
+				return false;
+			}
+
+		});
+		for (int i = 0; i < childs.length; i++) {
+			if (childs[i].isDirectory()) {
+				performSearch(childs[i]);
+			}
+			if (childs[i].getName().startsWith("contents.htm")) {				
+				ManPageFolder folder = new ManPageFolder(dir.getAbsolutePath());
+				parseContentsFile(childs[i], folder);
+				if (folder.getPages().size() > 0 && !folders.contains(folder)) {					
+					this.folders.add(folder);
+				}
+			}
+		}
+	}
+
+	private void parseContentsFile(File c, ManPageFolder folder) {
+		FileReader reader;
+		try {
+			reader = new FileReader(c);
+		} catch (FileNotFoundException e) {
+			return;
+		}
+		StringBuffer buf = new StringBuffer();
+		while (true) {
+			char cbuf[] = new char[1024];
+			try {
+				int read = reader.read(cbuf);
+				if (read >= 0) {
+					buf.append(cbuf, 0, read);
+				} else
+					break;
+			} catch (IOException e) {
+				break;
+			}
+		}
+		String result = buf.toString();
+		Pattern pattern = Pattern.compile(
+				"<a\\s+href=\"([a-zA-Z_0-9]+\\.html?)\"\\s*>(\\w+)</a>",
+				Pattern.CASE_INSENSITIVE);
+		Matcher matcher = pattern.matcher(result);
+		while (matcher.find()) {
+			String file = matcher.group(1);
+			if (file.equalsIgnoreCase("Copyright.htm"))
+				continue;
+			String word = matcher.group(2);
+			folder.addPage(word, file);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
 	 */
 	public void selectionChanged(SelectionChangedEvent event) {
@@ -433,32 +545,26 @@
 	 * Refresh the enable/disable state for the buttons.
 	 */
 	private void updateButtons() {
-		IStructuredSelection selection = (IStructuredSelection) fLocationsViewer.getSelection();
-		fRemoveButton.setEnabled(!selection.isEmpty());
-		boolean enableUp = true, 
-				enableDown = true;
-		Object[] libraries = fLocationsContentProvider.getElements(null);
-		if (selection.isEmpty() || libraries.length == 0) {
-			enableUp = false;
-			enableDown = false;
-		} else {
-			Object first = libraries[0];
-			Object last = libraries[libraries.length - 1];
-			for (Iterator iter= selection.iterator(); iter.hasNext();) {
-				Object element= iter.next();
-				Object lib;
-				lib = element;
-				if (lib == first) {
-					enableUp = false;
-				}
-				if (lib == last) {
-					enableDown = false;
-				}
-			}
-		}
-		fUpButton.setEnabled(enableUp);
-		fDownButton.setEnabled(enableDown);		
-	}
-	
+		fClearButton.setEnabled(folders != null && folders.size() > 0);
+		IStructuredSelection selection = (IStructuredSelection) fLocationsViewer
+				.getSelection();
 		
+		boolean canRemove = true;
+		if (folders == null)
+			canRemove = false;
+		else {
+			List list = selection.toList();
+			for (Iterator iterator = list.iterator(); iterator.hasNext();) {
+				Object o = (Object) iterator.next();
+				if (!folders.contains(o))
+					canRemove = false;
+				break;				
+			}
+			if (selection.isEmpty())
+				canRemove = false;
+		}
+		
+		fRemoveButton.setEnabled(canRemove);		
+	}
+
 }
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/TclManPagesDocumentationProvider.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/TclManPagesDocumentationProvider.java
index 50094b1..00ddbfa 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/TclManPagesDocumentationProvider.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/documentation/TclManPagesDocumentationProvider.java
@@ -10,21 +10,29 @@
 package org.eclipse.dltk.tcl.internal.ui.documentation;
 
 import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
 import java.io.Reader;
+import java.io.StringReader;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.dltk.core.IMember;
 import org.eclipse.dltk.tcl.internal.ui.TclUI;
 import org.eclipse.dltk.tcl.ui.TclPreferenceConstants;
 import org.eclipse.dltk.ui.documentation.IScriptDocumentationProvider;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
 
 public class TclManPagesDocumentationProvider implements
 		IScriptDocumentationProvider {
 
-	private IManPagesLocation[] locations;
-
-	private int oldHash = -1;
+	private List folders = null;
 
 	public Reader getInfo(IMember element, boolean lookIntoParents,
 			boolean lookIntoExternal) {
@@ -32,35 +40,51 @@
 	}
 
 	public Reader getInfo(String content) {
-		initalizeLocations();
-		for (int i = 0; i < locations.length; i++) {
-			IManPagesLocation loc = locations[i];
-			Reader reader = loc.getHtmlInfo(content);
-			if (reader != null) { // TODO: what if several results there are?
-				return reader;
+		initalizeLocations(false);
+
+		if (folders != null) {
+			for (Iterator iterator = folders.iterator(); iterator.hasNext();) {
+				ManPageFolder f = (ManPageFolder) iterator.next();
+				HashMap pages = f.getPages();
+				String ans = (String) pages.get(content);
+				if (ans != null) {
+					IPath filePath = new Path(f.getPath()).append(ans);
+					File file = filePath.toFile();
+					if (file != null && file.isFile()) {
+						try {
+							return new FileReader(file);
+						} catch (FileNotFoundException e) {
+							e.printStackTrace();
+						}
+					}
+					break;
+				}
 			}
 		}
+
 		return null;
 	}
 
-	private void initalizeLocations() {
+	private void initalizeLocations(boolean force) {
+		if (!force && this.folders != null)
+			return;
+
+		TclUI.getDefault().getPreferenceStore().addPropertyChangeListener(
+				new IPropertyChangeListener() {
+
+					public void propertyChange(PropertyChangeEvent event) {
+						initalizeLocations(true);
+					}
+
+				});
+
 		String value = TclUI.getDefault().getPreferenceStore().getString(
 				TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS);
-		
-		if (locations == null || value.hashCode() != oldHash) {
-			oldHash = value.hashCode();
-			final String[] locs = value.split(">");
 
-			final List list = new ArrayList();
-			for (int i = 0; i < locs.length; i++) {
-				File file = new File(locs[i].trim());
-				if (file.isDirectory()) {
-					list.add(new HtmlManPagesLocation(file));
-				}
-			}
-
-			locations = (IManPagesLocation[]) list
-					.toArray(new IManPagesLocation[list.size()]);
+		try {
+			this.folders = ManPageFolder.readXML(value);
+		} catch (IOException e) {
+			e.printStackTrace();
 		}
 	}
 }
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/editor/TclEditor.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/editor/TclEditor.java
index 72b23ca..bd3aae2 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/editor/TclEditor.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/editor/TclEditor.java
@@ -23,7 +23,7 @@
 import org.eclipse.dltk.tcl.ui.TclPreferenceConstants;
 import org.eclipse.dltk.tcl.ui.text.TclPartitions;
 import org.eclipse.dltk.ui.PreferenceConstants;
-import org.eclipse.dltk.ui.actions.IDLTKEditorActionDefinitionIds;
+import org.eclipse.dltk.ui.actions.IScriptEditorActionDefinitionIds;
 import org.eclipse.dltk.ui.text.ScriptTextTools;
 import org.eclipse.dltk.ui.text.folding.IFoldingStructureProvider;
 import org.eclipse.jface.action.Action;
@@ -78,7 +78,7 @@
 		Action action = new TextOperationAction(DLTKEditorMessages
 				.getBundleForConstructedKeys(),
 				"Comment.", this, ITextOperationTarget.PREFIX); //$NON-NLS-1$
-		action.setActionDefinitionId(IDLTKEditorActionDefinitionIds.COMMENT);
+		action.setActionDefinitionId(IScriptEditorActionDefinitionIds.COMMENT);
 		setAction("Comment", action); //$NON-NLS-1$
 		markAsStateDependentAction("Comment", true); //$NON-NLS-1$
 
@@ -86,7 +86,7 @@
 		action = new TextOperationAction(DLTKEditorMessages
 				.getBundleForConstructedKeys(),
 				"Uncomment.", this, ITextOperationTarget.STRIP_PREFIX); //$NON-NLS-1$
-		action.setActionDefinitionId(IDLTKEditorActionDefinitionIds.UNCOMMENT);
+		action.setActionDefinitionId(IScriptEditorActionDefinitionIds.UNCOMMENT);
 		setAction("Uncomment", action); //$NON-NLS-1$
 		markAsStateDependentAction("Uncomment", true); //$NON-NLS-1$
 
@@ -94,7 +94,7 @@
 		action = new ToggleCommentAction(DLTKEditorMessages
 				.getBundleForConstructedKeys(), "ToggleComment.", this); //$NON-NLS-1$
 		action
-				.setActionDefinitionId(IDLTKEditorActionDefinitionIds.TOGGLE_COMMENT);
+				.setActionDefinitionId(IScriptEditorActionDefinitionIds.TOGGLE_COMMENT);
 		setAction("ToggleComment", action); //$NON-NLS-1$
 		markAsStateDependentAction("ToggleComment", true); //$NON-NLS-1$
 		configureToggleCommentAction();
@@ -131,7 +131,7 @@
 		return TclUI.getDefault().getPreferenceStore(); 
 	}
 	
-	protected ScriptTextTools getTextTools() {
+	public ScriptTextTools getTextTools() {
 		return TclUI.getDefault().getTextTools();
 	}
 
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/navigation/ElementsView.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/navigation/ElementsView.java
index ae97b37..044566a 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/navigation/ElementsView.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/navigation/ElementsView.java
@@ -42,7 +42,6 @@
 import org.eclipse.dltk.internal.ui.filters.IFilterElementNameProvider;
 import org.eclipse.dltk.tcl.core.TclLanguageToolkit;
 import org.eclipse.dltk.tcl.core.TclNature;
-import org.eclipse.dltk.tcl.core.TclPlugin;
 import org.eclipse.dltk.tcl.internal.ui.TclUI;
 import org.eclipse.dltk.ui.DLTKPluginImages;
 import org.eclipse.dltk.ui.ModelElementSorter;
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/preferences/PreviewFile.txt b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/preferences/PreviewFile.txt
index 90cba6f..1d4275c 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/preferences/PreviewFile.txt
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/preferences/PreviewFile.txt
@@ -1,28 +1,21 @@
-# Print the contents of a global array on stdout.
-#
-# RCS: @(#) $Id: PreviewFile.txt,v 1.1 2007/02/22 08:40:13 asobolev Exp $
-#
-# Copyright (c) 1991-1993 The Regents of the University of California.
-# Copyright (c) 1994 Sun Microsystems, Inc.
-#
-# See the file "license.terms" for information on usage and redistribution
-# of this file, and for a DISCLAIMER OF ALL WARRANTIES.
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# 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
 #
 
-proc parray {a {pattern *}} {
-    upvar 1 $a array
-    if {![array exists array]} {
-        error "\"$a\" isn't an array"
-    }
-    set maxl 0
-    foreach name [lsort [array names array $pattern]] {
-        if {[string length $name] > $maxl} {
-            set maxl [string length $name]
-        }
-    }
-    set maxl [expr {$maxl + [string length $a] + 2}]
-    foreach name [lsort [array names array $pattern]] {
-        set nameString [format %s(%s) $a $name]
-        puts stdout [format "%-*s = %s" $maxl $nameString $array($name)]
-    }
+###############################################################################
+
+namespace eval myNamespace {
+	proc myproc ( a { b 20 } } {
+		upvar 1 $a array
+		s = [string length $a]
+		puts $array
+		set t 2.4
+		set s "Alfa"
+		return [expr { s + b }]
+	}
 }
+
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/text/TclSourceViewerConfiguration.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/text/TclSourceViewerConfiguration.java
index 30f6010..ee8a21b 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/text/TclSourceViewerConfiguration.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/text/TclSourceViewerConfiguration.java
@@ -16,6 +16,7 @@
 import org.eclipse.dltk.ui.CodeFormatterConstants;
 import org.eclipse.dltk.ui.text.AbstractScriptScanner;
 import org.eclipse.dltk.ui.text.IColorManager;
+import org.eclipse.dltk.ui.text.ScriptPresentationReconciler;
 import org.eclipse.dltk.ui.text.ScriptSourceViewerConfiguration;
 import org.eclipse.dltk.ui.text.SingleTokenScriptScanner;
 import org.eclipse.dltk.ui.text.completion.ContentAssistProcessor;
@@ -60,7 +61,6 @@
 
 	public String[] getIndentPrefixes(ISourceViewer sourceViewer,
 			String contentType) {
-		// TODO: what's a shit this method returns?
 		return new String[] { "\t", "    " }; //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
@@ -108,7 +108,7 @@
 
 	public IPresentationReconciler getPresentationReconciler(
 			ISourceViewer sourceViewer) {
-		PresentationReconciler reconciler = new PresentationReconciler();
+		PresentationReconciler reconciler = new ScriptPresentationReconciler();
 		reconciler
 				.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
 
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/text/TclTextTools.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/text/TclTextTools.java
index 4352b96..77ea985 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/text/TclTextTools.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/internal/ui/text/TclTextTools.java
@@ -9,6 +9,8 @@
  *******************************************************************************/
 package org.eclipse.dltk.tcl.internal.ui.text;
 
+import org.eclipse.dltk.internal.ui.editor.semantic.highlighting.PositionUpdater;
+import org.eclipse.dltk.internal.ui.editor.semantic.highlighting.SemanticHighlighting;
 import org.eclipse.dltk.tcl.ui.text.TclPartitions;
 import org.eclipse.dltk.ui.text.ScriptSourceViewerConfiguration;
 import org.eclipse.dltk.ui.text.ScriptTextTools;
@@ -42,4 +44,14 @@
 		return fPartitionScanner;
 	}
 
+
+	public SemanticHighlighting[] getSemanticHighlightings() {
+		return new SemanticHighlighting[0];
+	}
+
+
+	public PositionUpdater getSemanticPositionUpdater() {
+		return null;
+	}
+
 }
diff --git a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/ui/TclPreferenceConstants.java b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/ui/TclPreferenceConstants.java
index ccb7c92..0481c58 100644
--- a/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/ui/TclPreferenceConstants.java
+++ b/tcl/plugins/org.eclipse.dltk.tcl.ui/src/org/eclipse/dltk/tcl/ui/TclPreferenceConstants.java
@@ -402,7 +402,7 @@
 				TclPreferenceConstants.EDITOR_VARIABLE_COLOR,
 				new RGB(200, 0, 0));
 
-		store.setDefault(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS, "");
+		store.setDefault(TclPreferenceConstants.DOC_MAN_PAGES_LOCATIONS, "<manPages></manPages>");
 
 		store.setDefault(
 				TclPreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_BOLD, false);