diff --git a/ant/org.eclipse.ant.ui/Ant Editor Content Assist Dev/TaskXMLFileMerger.java b/ant/org.eclipse.ant.ui/Ant Editor Content Assist Dev/TaskXMLFileMerger.java
index 51e7ffd..9a00251 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor Content Assist Dev/TaskXMLFileMerger.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor Content Assist Dev/TaskXMLFileMerger.java
@@ -49,13 +49,13 @@
 public class TaskXMLFileMerger {
 
 	//Definitions for the HTML Generated XML File
-    public static String HTML_TASKS_DESCRIPTION_XML_FILE_NAME = "/tasks.xml"; //$NON-NLS-1$
-    public static String HTML_XML_TAG_TASKS = "TASKS"; //$NON-NLS-1$
-    public static String HTML_XML_TAG_TASK = "TASK"; //$NON-NLS-1$
-    public static String HTML_XML_TAG_ATTRIBUTE = "ATTRIBUTE"; //$NON-NLS-1$
-    //public static String HTML_XML_TAG_DESCRIPTION = "DESCRIPTION";
-    public static String HTML_XML_ATTRIBUTE_NAME = "NAME"; //$NON-NLS-1$
-    public static String HTML_XML_ATTRIBUTE_REQUIRED = "REQUIRED"; //$NON-NLS-1$
+	public static String HTML_TASKS_DESCRIPTION_XML_FILE_NAME = "/tasks.xml"; //$NON-NLS-1$
+	public static String HTML_XML_TAG_TASKS = "TASKS"; //$NON-NLS-1$
+	public static String HTML_XML_TAG_TASK = "TASK"; //$NON-NLS-1$
+	public static String HTML_XML_TAG_ATTRIBUTE = "ATTRIBUTE"; //$NON-NLS-1$
+	//public static String HTML_XML_TAG_DESCRIPTION = "DESCRIPTION";
+	public static String HTML_XML_ATTRIBUTE_NAME = "NAME"; //$NON-NLS-1$
+	public static String HTML_XML_ATTRIBUTE_REQUIRED = "REQUIRED"; //$NON-NLS-1$
 
 	//Definitions for the XDoclet Genereated XML File
 	public static String XDOC_TASKS_DESCRIPTION_XML_FILE_NAME = "/XDOCtasks.xml"; //$NON-NLS-1$
@@ -70,56 +70,56 @@
 	public static String XDOC_XML_TAG_REQUIRED = "required"; //$NON-NLS-1$
 	
 
-    protected NodeList taskNodes_HTML = null;
+	protected NodeList taskNodes_HTML = null;
 	protected NodeList taskNodes_XDOC = null;
 	public Document xdocXMLDocument = null;
 
-    /**
-     * Creates an initialized instance.
-     */
-    public TaskXMLFileMerger() {
-        initialize();
-    }
+	/**
+	 * Creates an initialized instance.
+	 */
+	public TaskXMLFileMerger() {
+		initialize();
+	}
 
-    
-    /**
-     * Parses the task description xml files and stores the information.
-     */
+	
+	/**
+	 * Parses the task description xml files and stores the information.
+	 */
 	private void initialize() {
-    	
-    	Document tmpDocument = null;
-    	
-    	//Get All the Tasks in the HTML XML Generated file and store in the taskNodes_HTML
-    	tmpDocument = parseFile(HTML_TASKS_DESCRIPTION_XML_FILE_NAME);
-    	taskNodes_HTML = tmpDocument.getFirstChild().getChildNodes();
-    	
-    	//Do the same for the XDOC XML Generated file
-    	tmpDocument = parseFile(XDOC_TASKS_DESCRIPTION_XML_FILE_NAME);
-    	taskNodes_XDOC = tmpDocument.getFirstChild().getChildNodes();
-    	xdocXMLDocument = tmpDocument;
-/*   	
-        Document tempDocument = parseFile(aFileName);
-        Node tempRootNode = tempDocument.getDocumentElement();
-        NodeList tempChildNodes = tempRootNode.getChildNodes();
-        for(int i=0; i<tempChildNodes.getLength(); i++) {
-            Node tempNode = tempChildNodes.item(i);
-            if(tempNode.getNodeType() == Node.ELEMENT_NODE) {
-                String tempTagName = tempNode.getNodeName();
-                if(tempTagName.equals(anXML_TAG_TASK)) {
-                    NamedNodeMap tempAttributes = tempNode.getAttributes();
-                    Node tempAttributeNode = tempAttributes.getNamedItem(anXML_ATTRIBUTE_NAME);
-                    if(tempAttributeNode != null) {
-                        String tempTaskName = tempAttributeNode.getNodeValue();
-                        if(tempTaskName != null) {
-                           aHashMap.put(tempTaskName, tempNode);
-                        }
-                    }
-                }
-            }
-        }
+		
+		Document tmpDocument = null;
+		
+		//Get All the Tasks in the HTML XML Generated file and store in the taskNodes_HTML
+		tmpDocument = parseFile(HTML_TASKS_DESCRIPTION_XML_FILE_NAME);
+		taskNodes_HTML = tmpDocument.getFirstChild().getChildNodes();
+		
+		//Do the same for the XDOC XML Generated file
+		tmpDocument = parseFile(XDOC_TASKS_DESCRIPTION_XML_FILE_NAME);
+		taskNodes_XDOC = tmpDocument.getFirstChild().getChildNodes();
+		xdocXMLDocument = tmpDocument;
+/*
+		Document tempDocument = parseFile(aFileName);
+		Node tempRootNode = tempDocument.getDocumentElement();
+		NodeList tempChildNodes = tempRootNode.getChildNodes();
+		for(int i=0; i<tempChildNodes.getLength(); i++) {
+			Node tempNode = tempChildNodes.item(i);
+			if(tempNode.getNodeType() == Node.ELEMENT_NODE) {
+				String tempTagName = tempNode.getNodeName();
+				if(tempTagName.equals(anXML_TAG_TASK)) {
+					NamedNodeMap tempAttributes = tempNode.getAttributes();
+					Node tempAttributeNode = tempAttributes.getNamedItem(anXML_ATTRIBUTE_NAME);
+					if(tempAttributeNode != null) {
+						String tempTaskName = tempAttributeNode.getNodeValue();
+						if(tempTaskName != null) {
+							aHashMap.put(tempTaskName, tempNode);
+						}
+					}
+				}
+			}
+		}
 */
-    }
-    
+	}
+	
 
 	/**
 	 * This is the function that does all the work. Calling this
@@ -168,13 +168,13 @@
 			Node tmpTaskNode = taskNodes_HTML.item(i);
 			if(tmpTaskNode.getNodeType() == Node.ELEMENT_NODE ) {
 				String tmpTagName = tmpTaskNode.getNodeName();
-                if(tmpTagName.equals(HTML_XML_TAG_TASK)) {
-                	NamedNodeMap tmpMap = tmpTaskNode.getAttributes();
-                	Node tmpNameNode = tmpMap.getNamedItem(HTML_XML_ATTRIBUTE_NAME);
-                	if( aTaskName.equals(tmpNameNode.getNodeValue()) ) {
-                		return tmpTaskNode;
-                	}
-                }
+				if(tmpTagName.equals(HTML_XML_TAG_TASK)) {
+					NamedNodeMap tmpMap = tmpTaskNode.getAttributes();
+					Node tmpNameNode = tmpMap.getNamedItem(HTML_XML_ATTRIBUTE_NAME);
+					if( aTaskName.equals(tmpNameNode.getNodeValue()) ) {
+						return tmpTaskNode;
+					}
+				}
 			}
 		}
 		//Not found
@@ -182,16 +182,16 @@
 	}
 	
 	private void replaceAttributeRequiredInXMLTaskNodeWithAttributeRequiredInHTMLNode(Node aTargetTaskNode,
-																						  Node aSourceTaskNode) {
+																						Node aSourceTaskNode) {
 		
 			Node tmpStructureNode = getChildNodeNamedWithTypeFromNode( XDOC_XML_TAG_STRUCTURE,
-															  			Node.ELEMENT_NODE,
-															  			aTargetTaskNode );
-															  
+																		Node.ELEMENT_NODE,
+																		aTargetTaskNode );
+															
 			if(tmpStructureNode != null ) {
 				Node tmpTargetAttributesNode = getChildNodeNamedWithTypeFromNode(XDOC_XML_TAG_ATTRIBUTES,
-															  					  Node.ELEMENT_NODE,
-															  					  tmpStructureNode);
+																					Node.ELEMENT_NODE,
+																					tmpStructureNode);
 				if(tmpTargetAttributesNode != null ) {
 					Vector tmpTargetAttributesVector = getAttributeNodesFromXMLAttributesNode(tmpTargetAttributesNode);
 					Vector tmpSourceAttributesVector = getAttributeNodesFromHTMLTaskNode(aSourceTaskNode);
@@ -258,16 +258,16 @@
 	}
 	
 	/**
-     * Returns the ChildNode of the node defined by the Arguments. The
-     * first child found matching the criterias is returned.
-     * 
-     * @param aNodeName The Name of the Node to return.
-     * @param aType The Type of the node @see Node
-     * @param aParentNode The Node to get the child from
-     * 
-     * @return The First Child Node found matching the criterias,
-     * or null if none is found.
-     */																		  			
+	 * Returns the ChildNode of the node defined by the Arguments. The
+	 * first child found matching the criterias is returned.
+	 * 
+	 * @param aNodeName The Name of the Node to return.
+	 * @param aType The Type of the node @see Node
+	 * @param aParentNode The Node to get the child from
+	 * 
+	 * @return The First Child Node found matching the criterias,
+	 * or null if none is found.
+	 */	
 	private Node getChildNodeNamedWithTypeFromNode(String aName, short aNodeType, Node aNode ) {
 		
 		NodeList tmpNodeList = aNode.getChildNodes();
@@ -282,45 +282,45 @@
 	} 
 			
 		
-    /**
-     * Returns the (DOM) document as a result of parsing the file with the 
-     * specified file name.
-     * <P>
-     * The file will be loaded as resource, thus must begin with '/' and must
-     * be relative to the classpath.
-     */
+	/**
+	 * Returns the (DOM) document as a result of parsing the file with the 
+	 * specified file name.
+	 * <P>
+	 * The file will be loaded as resource, thus must begin with '/' and must
+	 * be relative to the classpath.
+	 */
 	private Document parseFile(String aFileName) {
-        Document tempDocument = null;
+		Document tempDocument = null;
 
-        DocumentBuilderFactory tempFactory = DocumentBuilderFactory.newInstance();
-        tempFactory.setIgnoringComments(true);
-        tempFactory.setIgnoringElementContentWhitespace(true);
-        tempFactory.setCoalescing(true);
+		DocumentBuilderFactory tempFactory = DocumentBuilderFactory.newInstance();
+		tempFactory.setIgnoringComments(true);
+		tempFactory.setIgnoringElementContentWhitespace(true);
+		tempFactory.setCoalescing(true);
 
-        try {
-            DocumentBuilder tempDocBuilder = tempFactory.newDocumentBuilder();
-            URL tempURL = getClass().getResource(aFileName);
-            InputSource tempInputSource = new InputSource(tempURL.toExternalForm());
-            tempDocument = tempDocBuilder.parse(tempInputSource);
-        } catch (ParserConfigurationException e) {
+		try {
+			DocumentBuilder tempDocBuilder = tempFactory.newDocumentBuilder();
+			URL tempURL = getClass().getResource(aFileName);
+			InputSource tempInputSource = new InputSource(tempURL.toExternalForm());
+			tempDocument = tempDocBuilder.parse(tempInputSource);
+		} catch (ParserConfigurationException e) {
 			AntUIPlugin.log(e);
-        }
-        catch (IOException ioException) {
+		}
+		catch (IOException ioException) {
 			AntUIPlugin.log(ioException);
-        }
-        catch (SAXException saxException) {
+		}
+		catch (SAXException saxException) {
 			AntUIPlugin.log(saxException);
-        }
+		}
 
-        return tempDocument;
-    }
-    
-    /**
-     * This function writes the XMLDocument to the specified file.
-     * @param aFileName The filename to which the XMLDocument should be written.
-     */
-    public void writeXMLDocumentToFile(String aFileName) {
-    	
+		return tempDocument;
+	}
+	
+	/**
+	 * This function writes the XMLDocument to the specified file.
+	 * @param aFileName The filename to which the XMLDocument should be written.
+	 */
+	public void writeXMLDocumentToFile(String aFileName) {
+		
 //    	try {	
 //    		XmlDocument xmlDocument = (XmlDocument)xdocXMLDocument;
 //    		xmlDocument.write(new FileWriter(aFileName), "UTF-8"); //$NON-NLS-1$
@@ -328,7 +328,7 @@
 //    	catch(IOException ioe) {
 //    		System.out.println(MessageFormat.format(AntEditorToolsMessages.getString("TaskXMLFileMerger.Could_not_print"), new String[]{ioe.toString()})); //$NON-NLS-1$
 //    	} 
-    }
+	}
 	
 	public static void main(String[] args) {
 		
diff --git a/platform/org.eclipse.platform/src-intro/org/eclipse/platform/internal/CheatSheetStandbyContent.java b/platform/org.eclipse.platform/src-intro/org/eclipse/platform/internal/CheatSheetStandbyContent.java
index ae68836..d5c393e 100644
--- a/platform/org.eclipse.platform/src-intro/org/eclipse/platform/internal/CheatSheetStandbyContent.java
+++ b/platform/org.eclipse.platform/src-intro/org/eclipse/platform/internal/CheatSheetStandbyContent.java
@@ -23,102 +23,102 @@
 
 public final class CheatSheetStandbyContent implements IStandbyContentPart {
 
-    private static String MEMENTO_CHEATSHEET_ID_ATT = "cheatsheetId"; //$NON-NLS-1$
+	private static String MEMENTO_CHEATSHEET_ID_ATT = "cheatsheetId"; //$NON-NLS-1$
 
-    //private IIntroPart introPart;
-    private ICheatSheetViewer viewer;
-    private Composite container;
-    private String input;
+	//private IIntroPart introPart;
+	private ICheatSheetViewer viewer;
+	private Composite container;
+	private String input;
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#init(org.eclipse.ui.intro.IIntroPart)
-     */
-    public void init(IIntroPart introPart, IMemento memento) {
-        //this.introPart = introPart;
-        // try to restore last state.
-        input = getCachedInput(memento);
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#init(org.eclipse.ui.intro.IIntroPart)
+	 */
+	public void init(IIntroPart introPart, IMemento memento) {
+		//this.introPart = introPart;
+		// try to restore last state.
+		input = getCachedInput(memento);
+	}
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#createControl(org.eclipse.swt.widgets.Composite,
-     *      org.eclipse.ui.forms.widgets.FormToolkit)
-     */
-    public void createPartControl(Composite parent, FormToolkit toolkit) {
-        container = toolkit.createComposite(parent);
-        FillLayout layout = new FillLayout();
-        layout.marginWidth = layout.marginHeight = 0;
-        container.setLayout(layout);
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#createControl(org.eclipse.swt.widgets.Composite,
+	 *      org.eclipse.ui.forms.widgets.FormToolkit)
+	 */
+	public void createPartControl(Composite parent, FormToolkit toolkit) {
+		container = toolkit.createComposite(parent);
+		FillLayout layout = new FillLayout();
+		layout.marginWidth = layout.marginHeight = 0;
+		container.setLayout(layout);
 
-        viewer = CheatSheetViewerFactory.createCheatSheetView();
-        viewer.createPartControl(container);
-    }
+		viewer = CheatSheetViewerFactory.createCheatSheetView();
+		viewer.createPartControl(container);
+	}
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#getControl()
-     */
-    public Control getControl() {
-        return container;
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#getControl()
+	 */
+	public Control getControl() {
+		return container;
+	}
 
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#setInput(java.lang.Object)
-     */
-    public void setInput(Object input) {
-        // if the new input is null, use cacched input from momento.
-        if (input != null)
-            this.input = (String) input;
-        viewer.setInput(this.input);
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#setInput(java.lang.Object)
+	 */
+	public void setInput(Object input) {
+		// if the new input is null, use cacched input from momento.
+		if (input != null)
+			this.input = (String) input;
+		viewer.setInput(this.input);
+	}
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#setFocus()
-     */
-    public void setFocus() {
-        viewer.setFocus();
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#setFocus()
+	 */
+	public void setFocus() {
+		viewer.setFocus();
+	}
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#dispose()
-     */
-    public void dispose() {
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.intro.internal.parts.IStandbyContentPart#dispose()
+	 */
+	public void dispose() {
 
-    }
+	}
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.eclipse.ui.intro.config.IStandbyContentPart#saveState(org.eclipse.ui.IMemento)
-     */
-    public void saveState(IMemento memento) {
-        String currentCheatSheetId = viewer.getCheatSheetID();
-        if (currentCheatSheetId != null)
-            memento.putString(MEMENTO_CHEATSHEET_ID_ATT, currentCheatSheetId);
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.ui.intro.config.IStandbyContentPart#saveState(org.eclipse.ui.IMemento)
+	 */
+	public void saveState(IMemento memento) {
+		String currentCheatSheetId = viewer.getCheatSheetID();
+		if (currentCheatSheetId != null)
+			memento.putString(MEMENTO_CHEATSHEET_ID_ATT, currentCheatSheetId);
+	}
 
-    /**
-     * Tries to create the last content part viewed, based on content part id..
-     * 
-     * @param memento
-     * @return
-     */
-    private String getCachedInput(IMemento memento) {
-        if (memento == null)
-            return null;
-        return memento.getString(MEMENTO_CHEATSHEET_ID_ATT);
+	/**
+	 * Tries to create the last content part viewed, based on content part id..
+	 * 
+	 * @param memento
+	 * @return
+	 */
+	private String getCachedInput(IMemento memento) {
+		if (memento == null)
+			return null;
+		return memento.getString(MEMENTO_CHEATSHEET_ID_ATT);
 
-    }
+	}
 
 }
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/ConfigurationParser.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/ConfigurationParser.java
index 6381a6b..f59e563 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/ConfigurationParser.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/ConfigurationParser.java
@@ -382,9 +382,9 @@
 			String tag = localName.trim();
 
 			if (tag.equalsIgnoreCase(CFG)) {
-				 // This is a bit of a hack.
-				 // When no features were added to the site, but the site is initialized from platform.xml 
-				 // we need to set the feature set to empty, so we don't try to detect them.
+				// This is a bit of a hack.
+				// When no features were added to the site, but the site is initialized from platform.xml 
+				// we need to set the feature set to empty, so we don't try to detect them.
 				SiteEntry[] sites = config.getSites();
 				for (int i=0; i<sites.length; i++)
 					sites[i].initialized();
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/FeatureEntry.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/FeatureEntry.java
index 5b02ec8..e1ca011 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/FeatureEntry.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/FeatureEntry.java
@@ -338,7 +338,7 @@
 	}
 	
 	public boolean hasBranding() {
-        String bundleId = getFeaturePluginIdentifier();
+		String bundleId = getFeaturePluginIdentifier();
 		return bundleId != null && Utils.getBundle(bundleId) != null;
 	}
 }
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/PluginParser.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/PluginParser.java
index 7d25067..b5683d3 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/PluginParser.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/PluginParser.java
@@ -31,13 +31,13 @@
 		SAXParserFactory.newInstance();
 	private SAXParser parser;
 	private PluginEntry pluginEntry;
-    private String location;
+	private String location;
 
 	private class ParseCompleteException extends SAXException {
 		
-        private static final long serialVersionUID = 1L;
+		private static final long serialVersionUID = 1L;
 
-        public ParseCompleteException(String arg0) {
+		public ParseCompleteException(String arg0) {
 			super(arg0);
 		}
 	}
@@ -79,7 +79,7 @@
 	 */
 	public synchronized PluginEntry parse(InputStream in, String bundleUrl) throws SAXException, IOException {
 		try {
-            location = bundleUrl;
+			location = bundleUrl;
 			pluginEntry = new PluginEntry();
 			pluginEntry.setURL(bundleUrl);
 			parser.parse(new InputSource(in), this);
@@ -116,12 +116,12 @@
 		String version = attributes.getValue("version"); //$NON-NLS-1$
 		if (id == null || id.trim().length() == 0) {
 			id = "_no_id_"; //$NON-NLS-1$
-            Utils.log(NLS.bind(Messages.PluginParser_plugin_no_id, (new String[] { location })));
-        }
-        if (version == null || version.trim().length() == 0) {
-            version = "0.0.0"; //$NON-NLS-1$
-            Utils.log(NLS.bind(Messages.PluginParser_plugin_no_version, (new String[] { location })));
-        }
+			Utils.log(NLS.bind(Messages.PluginParser_plugin_no_id, (new String[] { location })));
+		}
+		if (version == null || version.trim().length() == 0) {
+			version = "0.0.0"; //$NON-NLS-1$
+			Utils.log(NLS.bind(Messages.PluginParser_plugin_no_version, (new String[] { location })));
+		}
 		pluginEntry.setVersionedIdentifier(new VersionedIdentifier(id, version));
 		
 		// stop parsing now
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/SiteEntry.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/SiteEntry.java
index 03b78a4..a2077e8 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/SiteEntry.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/SiteEntry.java
@@ -435,7 +435,7 @@
 		} catch (SAXException e) {
 			String pluginFileString = pluginFile.getAbsolutePath();
 			Utils.log(NLS.bind(Messages.InstalledSiteParser_ErrorParsingFile, (new String[] { pluginFileString })));
-        }
+		}
 	}
 
 	/**
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/Utils.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/Utils.java
index 7fb3d5a..618dc20 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/Utils.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/Utils.java
@@ -484,15 +484,15 @@
 			return url;
 		try {
 			String path = new URL(url).getPath();			
-	        // normalize to not have leading / so we can check the form
-	        File file = new File(path);
-	        path = file.toString().replace('\\', '/');
-            if (Character.isUpperCase(path.charAt(0))) {
-                char[] chars = path.toCharArray();
-                chars[0] = Character.toLowerCase(chars[0]);
-                path = new String(chars);
-                return new File(path).toURL().toExternalForm();
-            }
+			// normalize to not have leading / so we can check the form
+			File file = new File(path);
+			path = file.toString().replace('\\', '/');
+			if (Character.isUpperCase(path.charAt(0))) {
+				char[] chars = path.toCharArray();
+				chars[0] = Character.toLowerCase(chars[0]);
+				path = new String(chars);
+				return new File(path).toURL().toExternalForm();
+			}
 		} catch (MalformedURLException e) {
 			// default to original url
 		}		
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IBundleGroupConstants.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IBundleGroupConstants.java
index d019c42..47e3c95 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IBundleGroupConstants.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IBundleGroupConstants.java
@@ -35,7 +35,7 @@
 
 	/**
 	 * A URL for the feature's welcome page (special XML-based format)
-     * ($nl$/ prefix to permit locale-specific translations of entire file).
+	 * ($nl$/ prefix to permit locale-specific translations of entire file).
 	 * Products designed to run "headless" typically would not have such a page.
 	 */
 	public static final String WELCOME_PAGE = "welcomePage"; //$NON-NLS-1$
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IProductConstants.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IProductConstants.java
index d164f18..1660d73 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IProductConstants.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IProductConstants.java
@@ -44,11 +44,11 @@
 	 * product. Products designed to run "headless" typically would not 
 	 * have such an image.
 	 * <p>
-     * A full-sized product image (no larger than 500x330 pixels) is
-     * shown without the "aboutText" blurb.  A half-sized product image
-     * (no larger than 250x330 pixels) is shown with the "aboutText"
-     * blurb beside it.
-     */
+	 * A full-sized product image (no larger than 500x330 pixels) is
+	 * shown without the "aboutText" blurb.  A half-sized product image
+	 * (no larger than 250x330 pixels) is shown with the "aboutText"
+	 * blurb beside it.
+	 */
 	public static final String ABOUT_IMAGE = "aboutImage"; //$NON-NLS-1$
 
 	/**
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IniFileReader.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IniFileReader.java
index 30df5e5..89c4c49 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IniFileReader.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/branding/IniFileReader.java
@@ -239,7 +239,7 @@
 	 * @param runtimeMappings runtime mappings or <code>null</code>
 	 * @return the resource string
 	 */
-	 public String getResourceString(String value, Hashtable<String, String> runtimeMappings) {
+	public String getResourceString(String value, Hashtable<String, String> runtimeMappings) {
 		
 		if (value == null)
 			return null;
