diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceConfiguration.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceConfiguration.java
index 3e2a406..a11b535 100644
--- a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceConfiguration.java
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/FrameworkInstanceConfiguration.java
@@ -69,6 +69,10 @@
 		return configPath;
 	}
 
+	/**
+	 * @param folder  unused
+	 * @param monitor unused
+	 */
 	public void load(IFolder folder, IProgressMonitor monitor)
 			throws CoreException {
 
@@ -149,6 +153,9 @@
 			propertyListeners.remove(listener);
 	}
 
+	/**
+	 * @param isTestEnv unused 
+	 */
 	public void importFromPath(IPath path, boolean isTestEnv,
 			IProgressMonitor monitor) throws CoreException {
 		load(path, monitor);
diff --git a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/ModuleTraverser.java b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/ModuleTraverser.java
index a65d451..33c8d4c 100644
--- a/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/ModuleTraverser.java
+++ b/plugins/org.eclipse.libra.framework.core/src/org/eclipse/libra/framework/core/internal/debug/ModuleTraverser.java
@@ -55,6 +55,9 @@
 
  
 
+    /**
+	 * @param monitor unused 
+	 */
     private static void traverseOSGIComponent(IVirtualComponent component,
             IModuleVisitor visitor, IProgressMonitor monitor)
             throws CoreException {
diff --git a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxPlugin.java b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxPlugin.java
index 0158d93..564f1f9 100644
--- a/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxPlugin.java
+++ b/plugins/org.eclipse.libra.framework.equinox/src/org/eclipse/libra/framework/equinox/EquinoxPlugin.java
@@ -71,6 +71,9 @@
 		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
 	}
 	
+	/**
+	 * @param id unused 
+	 */
 	public static IEquinoxVersionHandler getEquinoxVersionHandler(String id) {
 //		if (id.indexOf("runtime") > 0)
 //			id = id.substring(0, 30) + id.substring(38);
diff --git a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixPlugin.java b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixPlugin.java
index 7b66740..336ba40 100644
--- a/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixPlugin.java
+++ b/plugins/org.eclipse.libra.framework.felix/src/org/eclipse/libra/framework/felix/FelixPlugin.java
@@ -71,6 +71,9 @@
 		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
 	}
 	
+	/**
+	 * @param id unused 
+	 */
 	public static IFelixVersionHandler getFelixVersionHandler(String id) {
 //		if (id.indexOf("runtime") > 0)
 //			id = id.substring(0, 30) + id.substring(38);
diff --git a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasPlugin.java b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasPlugin.java
index 297246d..04da65a 100644
--- a/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasPlugin.java
+++ b/plugins/org.eclipse.libra.framework.jonas/src/org/eclipse/libra/framework/jonas/JonasPlugin.java
@@ -71,6 +71,9 @@
 		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
 	}
 	
+	/**
+	 * @param id unused 
+	 */
 	public static IJonasVersionHandler getJonasVersionHandler(String id) {
 //		if (id.indexOf("runtime") > 0)
 //			id = id.substring(0, 30) + id.substring(38);
diff --git a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishPlugin.java b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishPlugin.java
index a87eefa..70383df 100644
--- a/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishPlugin.java
+++ b/plugins/org.eclipse.libra.framework.knopflerfish/src/org/eclipse/libra/framework/knopflerfish/KnopflerfishPlugin.java
@@ -71,6 +71,9 @@
 		(new DefaultScope()).getNode(PLUGIN_ID).put(id, value);
 	}
 	
+	/**
+	 * @param id unused 
+	 */
 	public static IKnopflerfishVersionHandler getFelixVersionHandler(String id) {
 //		if (id.indexOf("runtime") > 0)
 //			id = id.substring(0, 30) + id.substring(38);
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/FrameworkUIPlugin.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/FrameworkUIPlugin.java
index 27ad9a7..51c712e 100644
--- a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/FrameworkUIPlugin.java
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/FrameworkUIPlugin.java
@@ -38,7 +38,7 @@
 public class FrameworkUIPlugin extends AbstractUIPlugin {
 	protected static FrameworkUIPlugin singleton;
 
-	protected Map imageDescriptors = new HashMap();
+	protected Map<String, ImageDescriptor> imageDescriptors = new HashMap<String, ImageDescriptor>();
 
 	// base url for icons
 	private static URL ICON_BASE_URL;
@@ -96,7 +96,7 @@
 	public static ImageDescriptor getImageDescriptor(String key) {
 		try {
 			getInstance().getImageRegistry();
-			return (ImageDescriptor) getInstance().imageDescriptors.get(key);
+			return getInstance().imageDescriptors.get(key);
 		} catch (Exception e) {
 			return null;
 		}
diff --git a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkComposite.java b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkComposite.java
index 32a9fb5..9df0818 100644
--- a/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkComposite.java
+++ b/plugins/org.eclipse.libra.framework.ui/src/org/eclipse/libra/framework/ui/OSGIFrameworkComposite.java
@@ -80,7 +80,7 @@
 	protected Text installDir;
 	protected Text name;
 	protected Combo combo;
-	protected List installedJREs;
+	protected List<IVMInstall> installedJREs;
 	protected String[] jreNames;
 	protected IInstallableRuntime ir;
 	protected Job installRuntimeJob;
@@ -280,7 +280,7 @@
 				int sel = combo.getSelectionIndex();
 				IVMInstall vmInstall = null;
 				if (sel > 0)
-					vmInstall = (IVMInstall) installedJREs.get(sel - 1);
+					vmInstall = installedJREs.get(sel - 1);
 				
 				runtime.setVMInstall(vmInstall);
 				validate();
@@ -316,7 +316,7 @@
 
 	protected void updateJREs() {
 		// get all installed JVMs
-		installedJREs = new ArrayList();
+		installedJREs = new ArrayList<IVMInstall>();
 		IVMInstallType[] vmInstallTypes = JavaRuntime.getVMInstallTypes();
 		int size = vmInstallTypes.length;
 		for (int i = 0; i < size; i++) {
@@ -332,7 +332,7 @@
 		jreNames = new String[size+1];
 		jreNames[0] = Messages.runtimeDefaultJRE;
 		for (int i = 0; i < size; i++) {
-			IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
+			IVMInstall vmInstall = installedJREs.get(i);
 			jreNames[i+1] = vmInstall.getName();
 		}
 	}
@@ -375,7 +375,7 @@
 			boolean found = false;
 			int size = installedJREs.size();
 			for (int i = 0; i < size; i++) {
-				IVMInstall vmInstall = (IVMInstall) installedJREs.get(i);
+				IVMInstall vmInstall = installedJREs.get(i);
 				if (vmInstall.equals(runtime.getVMInstall())) {
 					combo.select(i + 1);
 					found = true;
