diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/ParserUtils.java b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/ParserUtils.java
index 973795a..89f30b1 100644
--- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/ParserUtils.java
+++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/ParserUtils.java
@@ -111,7 +111,7 @@
 
 	public static File fromOSGiJarToOSGiInstallArea(String path) {
 		IPath parentFolder = new Path(path).removeLastSegments(1);
-		if (parentFolder.lastSegment().equalsIgnoreCase("plugins")) //$NON-NLS-1$
+		if ("plugins".equalsIgnoreCase(parentFolder.lastSegment())) //$NON-NLS-1$
 			return parentFolder.removeLastSegments(1).toFile();
 		return parentFolder.toFile();
 	}
diff --git a/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/AllTests.java b/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/AllTests.java
index b6ab89d..0af378a 100644
--- a/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/AllTests.java
+++ b/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/AllTests.java
@@ -30,6 +30,7 @@
 		suite.addTestSuite(NoConfigurationValueInEclipseIni.class);
 		suite.addTestSuite(NoRenamingLauncherIni.class);
 		suite.addTestSuite(OSGiVersionChange.class);
+		suite.addTestSuite(ParserUtilsTest.class);
 		suite.addTestSuite(ReaderTest1.class);
 		suite.addTestSuite(ReaderTest2.class);
 		suite.addTestSuite(ReaderTest3.class);
diff --git a/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/ManipulatorTests.java b/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/ManipulatorTests.java
index e8897ef..d151c7a 100644
--- a/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/ManipulatorTests.java
+++ b/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/ManipulatorTests.java
@@ -12,10 +12,9 @@
 package org.eclipse.equinox.frameworkadmin.tests;
 
 import java.io.*;
-import java.util.*;
+import java.util.Properties;
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.URIUtil;
-import org.eclipse.equinox.internal.frameworkadmin.equinox.ParserUtils;
 import org.eclipse.equinox.internal.provisional.frameworkadmin.*;
 
 public class ManipulatorTests extends AbstractFwkAdminTest {
@@ -100,50 +99,4 @@
 		assertContents(ini, new String[] {"-foo", "bar", "-console", "-vmargs", "-Xmx256m", "-Xms64m"});
 	}
 	
-	public void testParserUtils_removeArgument() throws Exception {
-		String [] args = new String [] { "-bar", "-foo", "-other"};
-		ParserUtils.removeArgument("-foo", Arrays.asList(args));
-		assertEquals(args, new String [] {"-bar", null, "-other"});
-		
-		args = new String [] { "-bar", "-foo", "other"};
-		ParserUtils.removeArgument("-foo", Arrays.asList(args));
-		assertEquals(args, new String [] {"-bar", null, null});
-		
-		args = new String [] { "-bar", "-foo", "s-pecial"};
-		ParserUtils.removeArgument("-foo", Arrays.asList(args));
-		assertEquals(args, new String [] {"-bar", null, null});
-	}
-	
-	public void testParserUtils_setValueForArgument() throws Exception {
-		List args = new ArrayList();
-		ParserUtils.setValueForArgument("-foo", "bar", args);
-		assertTrue(args.size() == 2);
-		assertEquals(args.get(0), "-foo");
-		assertEquals(args.get(1), "bar");
-		
-		args.add("-other");
-		args.set(1, "s-pecial");
-		ParserUtils.setValueForArgument("-foo", "bas", args);
-		assertTrue(args.size() == 3);
-		assertEquals(args.get(0), "-foo");
-		assertEquals(args.get(1), "bas");
-		assertEquals(args.get(2), "-other");
-		
-		args.remove(1);
-		ParserUtils.setValueForArgument("-foo", "bas", args);
-		assertTrue(args.size() == 3);
-		assertEquals(args.get(0), "-foo");
-		assertEquals(args.get(1), "bas");
-		assertEquals(args.get(2), "-other");
-	}
-	
-	public void testParserUtils_getValueForArgument() throws Exception {
-		List args = new ArrayList();
-		args.add("-foo");
-		args.add("bar");
-		assertEquals( "bar", ParserUtils.getValueForArgument("-foo", args));
-		
-		args.set(1, "-bar");
-		assertEquals(null, ParserUtils.getValueForArgument("-foo", args));
-	}
 }
diff --git a/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/ParserUtilsTest.java b/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/ParserUtilsTest.java
new file mode 100644
index 0000000..88b77bc
--- /dev/null
+++ b/bundles/org.eclipse.equinox.frameworkadmin.test/src/org/eclipse/equinox/frameworkadmin/tests/ParserUtilsTest.java
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2009 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
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.frameworkadmin.tests;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.equinox.internal.frameworkadmin.equinox.ParserUtils;
+
+/**
+ * Tests for {@link ParserUtils}.
+ */
+public class ParserUtilsTest extends AbstractFwkAdminTest {
+
+	public ParserUtilsTest(String name) {
+		super(name);
+	}
+	public void testGetValueForArgument() throws Exception {
+		List args = new ArrayList();
+		args.add("-foo");
+		args.add("bar");
+		assertEquals( "bar", ParserUtils.getValueForArgument("-foo", args));
+		
+		args.set(1, "-bar");
+		assertEquals(null, ParserUtils.getValueForArgument("-foo", args));
+	}
+	
+	public void testRemoveArgument() throws Exception {
+		String [] args = new String [] { "-bar", "-foo", "-other"};
+		ParserUtils.removeArgument("-foo", Arrays.asList(args));
+		assertEquals(args, new String [] {"-bar", null, "-other"});
+		
+		args = new String [] { "-bar", "-foo", "other"};
+		ParserUtils.removeArgument("-foo", Arrays.asList(args));
+		assertEquals(args, new String [] {"-bar", null, null});
+		
+		args = new String [] { "-bar", "-foo", "s-pecial"};
+		ParserUtils.removeArgument("-foo", Arrays.asList(args));
+		assertEquals(args, new String [] {"-bar", null, null});
+	}
+	
+	public void testSetValueForArgument() throws Exception {
+		List args = new ArrayList();
+		ParserUtils.setValueForArgument("-foo", "bar", args);
+		assertTrue(args.size() == 2);
+		assertEquals(args.get(0), "-foo");
+		assertEquals(args.get(1), "bar");
+		
+		args.add("-other");
+		args.set(1, "s-pecial");
+		ParserUtils.setValueForArgument("-foo", "bas", args);
+		assertTrue(args.size() == 3);
+		assertEquals(args.get(0), "-foo");
+		assertEquals(args.get(1), "bas");
+		assertEquals(args.get(2), "-other");
+		
+		args.remove(1);
+		ParserUtils.setValueForArgument("-foo", "bas", args);
+		assertTrue(args.size() == 3);
+		assertEquals(args.get(0), "-foo");
+		assertEquals(args.get(1), "bas");
+		assertEquals(args.get(2), "-other");
+	}
+	
+	public void testFromOSGiJarToOSGiInstallArea() {
+		String path = "";
+		File result =ParserUtils.fromOSGiJarToOSGiInstallArea(path);
+		assertNotNull("1.0", result);
+		
+		path = "osgi.jar";
+		result =ParserUtils.fromOSGiJarToOSGiInstallArea(path);
+		assertNotNull("1.0", result);
+		assertEquals("1.1", "", result.toString());
+	}
+
+}
