diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java
index 1840faf7ac87b7d43fb2d0da6caf85bec0315910..2158483d2c854f6bcfb461b97c3f86efe157d328 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableDependenciesBean.java
@@ -30,10 +30,18 @@ import kieker.webgui.common.FileManager;
 
 import org.primefaces.model.UploadedFile;
 
+/**
+ * 
+ * @author Nils Christian Ehmke
+ * @version 1.0
+ */
 @ManagedBean
 @ApplicationScoped
 public class AvailableDependenciesBean {
 
+	/**
+	 * The list containing the depenencies.
+	 */
 	private final List<MIDependency> dependencies;
 
 	/**
@@ -58,7 +66,7 @@ public class AvailableDependenciesBean {
 	 * @param file
 	 *            The file to be uploaded.
 	 */
-	public void uploadDependency(final UploadedFile file) {
+	public synchronized void uploadDependency(final UploadedFile file) {
 		final MIDependency dependency = FileManager.getInstance().uploadDependency(file);
 		if (dependency != null) {
 			/*
@@ -80,7 +88,7 @@ public class AvailableDependenciesBean {
 	 * @param dependency
 	 *            The dependency to be removed.
 	 */
-	public void deleteDependency(final MIDependency dependency) {
+	public synchronized void deleteDependency(final MIDependency dependency) {
 		final boolean result = FileManager.getInstance().deleteDependency(dependency);
 		if (result) {
 			this.dependencies.remove(dependency);
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java
index 435f60632ba1305ff3629351d7298cd2fd5e0369..3173feb2b28dab73690301ac8e10398b0e4ed5bb 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/AvailableProjectsBean.java
@@ -38,6 +38,7 @@ import org.primefaces.model.TreeNode;
  * This bean can be used to handle all available projects within the program.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @ManagedBean
 @ApplicationScoped
@@ -121,7 +122,7 @@ public class AvailableProjectsBean {
 	 *            The project to be saved.
 	 */
 	public synchronized void saveProject(final MIProject project) {
-		// TODO Fill method
+		FileManager.getInstance().saveProject(project);
 	}
 
 	/**
@@ -131,7 +132,10 @@ public class AvailableProjectsBean {
 	 *            The project to be removed.
 	 */
 	public synchronized void deleteProject(final MIProject project) {
-		// TODO Fill method
+		final boolean result = FileManager.getInstance().deleteProject(project);
+		if (result) {
+			this.projects.remove(project);
+		}
 	}
 
 	/**
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ThemeSwitcherBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ThemeSwitcherBean.java
index bd61b5ccad0cb0dbff3dc2b7be65a6c01d608ec6..44295e53236513a2e0d58eda379f62ad98b18595 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ThemeSwitcherBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/ThemeSwitcherBean.java
@@ -33,6 +33,7 @@ import javax.faces.bean.ManagedBean;
  * import new themes during runtime.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @ManagedBean
 @ApplicationScoped
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/package-info.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/package-info.java
index 3fd1c061e0306a2da94720f10e9e9e0882bd369f..4f8458542a82969f0bd39038bc00bc6119cc8655 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/package-info.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/application/package-info.java
@@ -22,3 +22,4 @@
  * This package contains all beans with application scope.
  */
 package kieker.webgui.beans.application;
+
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/SelectedDependenciesBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/SelectedDependenciesBean.java
index e248b5dabc2c154fcc396c09d019070ede1219ce..e11bee3c35289ae436d195abb6a76def3c0497ee 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/SelectedDependenciesBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/SelectedDependenciesBean.java
@@ -38,6 +38,7 @@ import org.primefaces.model.DualListModel;
  * This bean contains the currently choosen dependencies.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @ManagedBean
 @RequestScoped
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/StringBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/StringBean.java
index 1f9cf3f2ab55692e5d8d7ddb63226566d2fd402c..7c262f19620ff7611ab6f7ac02e56a2f6eced928 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/StringBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/request/StringBean.java
@@ -27,6 +27,7 @@ import javax.faces.bean.RequestScoped;
  * This simple bean can be used to store a string. It can be used for a single request.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @ManagedBean
 @RequestScoped
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentThemeBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentThemeBean.java
index fd015ad48aa8d06b0cec565118cb2136d83d8ad5..f7c4adf335d864bdd6caa1fa49f086bdbd0d0706 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentThemeBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/CurrentThemeBean.java
@@ -37,6 +37,7 @@ import kieker.webgui.beans.application.ThemeSwitcherBean;
  * @author Nils Christian Ehmke
  * 
  * @see ThemeSwitcherBean
+ * @version 1.0
  */
 @ManagedBean
 @SessionScoped
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java
index f88d4c87897efc14d2c60ee6de3cf4948c2ed16e..8817b7033b0eb04f29de4e5d1009addf0ef074f0 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/DependencyUploadController.java
@@ -31,6 +31,7 @@ import org.primefaces.model.UploadedFile;
 /**
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @ManagedBean
 @SessionScoped
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedProjectBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedProjectBean.java
index 5e2eb636e76143d6c4db2ef89eadabd9d26747ca..4ed3136e53a74d229b53344a629ef366d885474f 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedProjectBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/beans/session/SelectedProjectBean.java
@@ -33,6 +33,7 @@ import org.primefaces.model.TreeNode;
  * main project for the user within a session.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @ManagedBean
 @SessionScoped
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java
index b611ea37f96495043054b40702b98decd3efefa2..a49fe2c9a43f632dd9177b1f9eed44375aa93955 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java
@@ -19,11 +19,11 @@
  ***************************************************************************/
 package kieker.webgui.common;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -46,6 +46,7 @@ import org.primefaces.model.UploadedFile;
  * implemented in the future.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 public final class FileManager {
 
@@ -232,14 +233,14 @@ public final class FileManager {
 	public final synchronized MIDependency uploadDependency(final UploadedFile file) {
 		final File depFile = new File(FileManager.LIB_DIR, file.getFileName());
 
-		InputStream in = null;
-		OutputStream out = null;
+		BufferedInputStream in = null;
+		BufferedOutputStream out = null;
 		try {
 			/*
 			 * Get the streams.
 			 */
-			in = file.getInputstream();
-			out = new FileOutputStream(depFile);
+			in = new BufferedInputStream(file.getInputstream());
+			out = new BufferedOutputStream(new FileOutputStream(depFile));
 			final byte[] buf = new byte[FileManager.BUF_SIZE];
 			int count;
 
@@ -261,6 +262,10 @@ public final class FileManager {
 				if (in != null) {
 					in.close();
 				}
+			} catch (final IOException ex) {
+				FileManager.LOG.warn("Error while uploading dependency '" + file.getFileName() + "'.");
+			}
+			try {
 				if (out != null) {
 					out.close();
 				}
@@ -320,4 +325,29 @@ public final class FileManager {
 		}
 		return false;
 	}
+
+	/**
+	 * This method tries to delete a project, by removing the directory of
+	 * the project and its contents. If something went wrong, the integrity
+	 * of the folder structure is not guaruanteed.
+	 * 
+	 * @param project
+	 *            The project to be removed.
+	 * @return true iff the project has been removed sucessfully.
+	 */
+	public final synchronized boolean deleteProject(final MIProject project) {
+		final String projectName = project.getName();
+
+		final File dirProject = new File(FileManager.PROJECT_DIR + File.separator + projectName);
+		if (dirProject.isDirectory()) {
+			final File[] files = dirProject.listFiles();
+			for (File file : files) {
+				if (!file.delete()) {
+					return false;
+				}
+			}
+			return dirProject.delete();
+		}
+		return false;
+	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java
index 3b1be94fe245e7a0211a182e68a5c3b91c04dbae..5e1057064c5d9432206ebc0e5a958b4c4e8ea01b 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/PluginFinder.java
@@ -19,6 +19,7 @@
  ***************************************************************************/
 package kieker.webgui.common;
 
+import edu.umd.cs.findbugs.ba.AnalysisContext;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
@@ -28,6 +29,7 @@ import java.util.Enumeration;
 import java.util.List;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
+import kieker.analysis.AnalysisController;
 
 import kieker.analysis.plugin.port.Plugin;
 import kieker.common.logging.Log;
@@ -35,6 +37,7 @@ import kieker.common.logging.LogFactory;
 
 /**
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 public final class PluginFinder {
 
@@ -63,7 +66,7 @@ public final class PluginFinder {
 			 * Get a classloader and make sure that it has the system class
 			 * loader as parent and that it knows the url.
 			 */
-			final ClassLoader classLoader = new URLClassLoader(new URL[] { url }, ClassLoader.getSystemClassLoader());
+			final ClassLoader classLoader = new URLClassLoader(new URL[] { url }, AnalysisController.class.getClassLoader());
 			/*
 			 * Open the jar file and run through all entries within this file.
 			 */
@@ -84,14 +87,14 @@ public final class PluginFinder {
 					 * If it is a class and has the annotation - put it into our
 					 * list.
 					 */
-					// TODO It seems like the classloader knows two annotations with the same name...
 					if (c.isAnnotationPresent(Plugin.class)) {
 						result.add(c);
 					}
 				} catch (final Throwable ex) {
-					PluginFinder.LOG.error("Error while scanning jar-file '" + url.getFile() + "'.");
+					/* Ignore error. */
 				}
 			}
+			jarFile.close();
 			return result;
 		} catch (final IOException ex) {
 			ex.printStackTrace();
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java
index c16d8981d779bd03703dbad9829202c137d045c4..929d2a673ee208d7f39979b32d275de12bf5632e 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java
@@ -21,6 +21,9 @@ package kieker.webgui.converter;
 
 import java.io.File;
 import java.net.MalformedURLException;
+import java.text.DecimalFormat;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
@@ -32,9 +35,12 @@ import kieker.webgui.common.PluginFinder;
 
 /**
  * This converter can be used to convert an instance of <i>MIDependency</i> to
- * the size (in MiBByte) of the dependency, but of course <b>not</b> vice versa.
+ * the number of plugins within the dependency, but of course <b>not</b> vice
+ * versa. The number is cached to avoid that the converter holds the file
+ * permanently.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @FacesConverter(value = MIDependencyToCountPluginsConverter.NAME)
 public class MIDependencyToCountPluginsConverter implements Converter {
@@ -44,11 +50,22 @@ public class MIDependencyToCountPluginsConverter implements Converter {
 	 */
 	public static final String NAME = "kieker.webgui.converter.MIDependencyToCountPluginsConverter";
 
+	/**
+	 * The maximal number of dependencies stored within the cache.
+	 */
+	private static final int MAX_CACHE_SIZE = 20;
+
+	/**
+	 * This map is the cache and contains the number of plugins within the
+	 * dependencies.
+	 */
+	private final Map<MIDependency, String> cache;
+
 	/**
 	 * Creates a new instance of this class.
 	 */
 	public MIDependencyToCountPluginsConverter() {
-		/* No code necessary. */
+		this.cache = new HashMap<MIDependency, String>();
 	}
 
 	/**
@@ -87,14 +104,24 @@ public class MIDependencyToCountPluginsConverter implements Converter {
 		if (!(o instanceof MIDependency)) {
 			return "";
 		} else {
+			/* Try to find the library within the cache. */
+			if (this.cache.containsKey((MIDependency) o)) {
+				return this.cache.get((MIDependency) o);
+			}
+			/* If the cache is too big, remove one of the objects. */
+			if (this.cache.size() > MIDependencyToCountPluginsConverter.MAX_CACHE_SIZE) {
+				this.cache.remove(this.cache.keySet().iterator().next());
+			}
+			String result;
 			try {
-				// TODO check why toURI().toURL() does not work instead of toURL()
-				return Integer.toString(PluginFinder.getAllPluginsWithinJar(new File(((MIDependency) o).getFilePath()).toURL()).size());
+				result = Integer.toString(PluginFinder.getAllPluginsWithinJar(new File(((MIDependency) o).getFilePath()).toURL()).size());
 			} catch (final MalformedURLException ex) {
-				return "";
+				result = "";
 			} catch (final NullPointerException ex) {
-				return "";
+				result = "";
 			}
+			this.cache.put((MIDependency) o, result);
+			return result;
 		}
 	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToSizeConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToSizeConverter.java
index e811ce980a563b24cc46788c9e615f0c7a9d1f58..f63bbcca19185c381de6dad2c16407c5680248d4 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToSizeConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToSizeConverter.java
@@ -34,6 +34,7 @@ import kieker.analysis.model.analysisMetaModel.MIDependency;
  * the size (in MiBByte) of the dependency, but of course <b>not</b> vice versa.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @FacesConverter(value = MIDependencyToSizeConverter.NAME)
 public class MIDependencyToSizeConverter implements Converter {
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToStringConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToStringConverter.java
index 240a44a28ed1718719d1fb980c823711d0a015be..ef439027d4450137edf6a0c4e02c593c719c50d5 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToStringConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToStringConverter.java
@@ -33,6 +33,7 @@ import kieker.analysis.model.analysisMetaModel.MIDependency;
  * human readable string, but <b>not</b> vice versa.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @FacesConverter(value = MIDependencyToStringConverter.NAME)
 public class MIDependencyToStringConverter implements Converter {
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIProjectToStringConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIProjectToStringConverter.java
index e0b6a480f6a2ee314dcf7b6d8e693df5388a4302..b9b5cf317af77d0a87c6a56c6bc5f39954b0862c 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIProjectToStringConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIProjectToStringConverter.java
@@ -31,6 +31,7 @@ import kieker.analysis.model.analysisMetaModel.MIProject;
  * human readable string, but <b>not</b> vice versa.
  * 
  * @author Nils Christian Ehmke
+ * @version 1.0
  */
 @FacesConverter(value = MIProjectToStringConverter.NAME)
 public class MIProjectToStringConverter implements Converter {