diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/common/exception/LibraryAlreadyExistingException.java b/Kieker.WebGUI/src/main/java/kieker/webgui/common/exception/LibraryAlreadyExistingException.java
deleted file mode 100644
index 19eb1e9bcf6b4cea6f37c03653c5609a8fa66eb8..0000000000000000000000000000000000000000
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/exception/LibraryAlreadyExistingException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/***************************************************************************
- * Copyright 2012 Kieker Project (http://kieker-monitoring.net)
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ***************************************************************************/
-
-package kieker.webgui.common.exception;
-
-/**
- * This exception shows that a library with the same name exists already.
- * 
- * @author Nils Christian Ehmke
- */
-public final class LibraryAlreadyExistingException extends AbstractKiekerWebGUIException {
-
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Creates a new instance of this class.
-	 */
-	public LibraryAlreadyExistingException() {
-		super();
-	}
-
-	/**
-	 * Creates a new instance of this class using the given parameters.
-	 * 
-	 * @param msg
-	 *            The message used for the exception.
-	 */
-	public LibraryAlreadyExistingException(final String msg) {
-		super(msg);
-	}
-
-	/**
-	 * Creates a new instance of this class using the given parameters.
-	 * 
-	 * @param msg
-	 *            The message used for the exception.
-	 * @param cause
-	 *            The cause for the exception.
-	 */
-	public LibraryAlreadyExistingException(final String msg, final Throwable cause) {
-		super(msg, cause);
-	}
-}
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/IProjectDAO.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/IProjectDAO.java
index 3468746a11894fc3f3922438616fc13474416728..89398ec8b72bce5f9311702d37b11c8893eb5031 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/IProjectDAO.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/IProjectDAO.java
@@ -28,7 +28,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import kieker.analysis.model.analysisMetaModel.MIDependency;
 import kieker.analysis.model.analysisMetaModel.MIProject;
 import kieker.webgui.common.ClassAndMethodContainer;
-import kieker.webgui.common.exception.LibraryAlreadyExistingException;
 import kieker.webgui.common.exception.NewerProjectException;
 import kieker.webgui.common.exception.ProjectAlreadyExistingException;
 import kieker.webgui.common.exception.ProjectNotExistingException;
@@ -144,7 +143,7 @@ public interface IProjectDAO {
 	public abstract long getCurrTimeStamp(String projectName) throws ProjectNotExistingException;
 
 	/**
-	 * This method tries to upload a dependency to the given project.
+	 * This method tries to upload a dependency to the given project. AN existing version will be overwritten.
 	 * 
 	 * @param file
 	 *            The file to be uploaded to the project.
@@ -154,11 +153,9 @@ public interface IProjectDAO {
 	 *             If a project with the given name does not exist.
 	 * @throws IOException
 	 *             If something went wrong during the uploading.
-	 * @throws LibraryAlreadyExistingException
-	 *             If a library with the same name exists already.
 	 */
 	@PreAuthorize("hasAnyRole('User', 'Administrator')")
-	public abstract void uploadLibrary(UploadedFile file, String projectName) throws ProjectNotExistingException, IOException, LibraryAlreadyExistingException;
+	public abstract void uploadLibrary(UploadedFile file, String projectName) throws ProjectNotExistingException, IOException;
 
 	/**
 	 * This method delivers a class loader containing the currently available libraries of the given project.
@@ -228,4 +225,7 @@ public interface IProjectDAO {
 	@PreAuthorize("isAuthenticated()")
 	public abstract File getProjectFile(String projectName);
 
+	@PreAuthorize("hasAnyRole('User', 'Administrator')")
+	public abstract boolean deleteLibrary(String projectName, String libName);
+
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/FSProjectDAOImpl.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/FSProjectDAOImpl.java
index d15bcc71bdedb6ff4d2fd1bfc33f426e69a13451..8869c43d1be438a9fc104db81ab8f5515ac797da 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/FSProjectDAOImpl.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/FSProjectDAOImpl.java
@@ -19,15 +19,12 @@ package kieker.webgui.persistence.impl;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.nio.channels.ByteChannel;
-import java.nio.channels.FileChannel;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
@@ -55,7 +52,6 @@ import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory;
 import kieker.common.logging.Log;
 import kieker.common.logging.LogFactory;
 import kieker.webgui.common.ClassAndMethodContainer;
-import kieker.webgui.common.exception.LibraryAlreadyExistingException;
 import kieker.webgui.common.exception.NewerProjectException;
 import kieker.webgui.common.exception.ProjectAlreadyExistingException;
 import kieker.webgui.common.exception.ProjectNotExistingException;
@@ -197,12 +193,12 @@ public class FSProjectDAOImpl implements IProjectDAO, ReleaseListener {
 		try {
 			if (dstProjDir.mkdir() && dstLibDir.mkdir()) {
 				// Copy the kax file
-				this.copyFile(srcKaxFile, dstKaxFile);
+				FileCopyUtils.copy(srcKaxFile, dstKaxFile);
 
 				// Copy the libs
 				for (final File lib : srcLibDir.listFiles()) {
 					final File dstLibFile = new File(dstLibDir, lib.getName());
-					this.copyFile(lib, dstLibFile);
+					FileCopyUtils.copy(lib, dstLibFile);
 				}
 			} else {
 				throw new IOException("Could not create directories.");
@@ -312,7 +308,7 @@ public class FSProjectDAOImpl implements IProjectDAO, ReleaseListener {
 	 */
 	@Override
 	@PreAuthorize("hasAnyRole('User', 'Administrator')")
-	public void uploadLibrary(final UploadedFile file, final String projectName) throws ProjectNotExistingException, IOException, LibraryAlreadyExistingException {
+	public void uploadLibrary(final UploadedFile file, final String projectName) throws ProjectNotExistingException, IOException {
 		// Check whether the project exists
 		if (!this.projectExists(projectName)) {
 			throw new ProjectNotExistingException("A project with the name '" + projectName + "' does not exist.");
@@ -322,49 +318,12 @@ public class FSProjectDAOImpl implements IProjectDAO, ReleaseListener {
 		final File libDir = this.assembleLibDir(projectName);
 		final File dstFile = new File(libDir, file.getFileName());
 
-		// Now copy the file - if it doesn't already exist
-		if (dstFile.exists()) {
-			throw new LibraryAlreadyExistingException("The library with the name '" + file.getFileName() + "' exists already.");
-		}
+		// Get the streams
+		final BufferedInputStream in = new BufferedInputStream(file.getInputstream());
+		final BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(dstFile));
 
-		BufferedInputStream in = null;
-		BufferedOutputStream out = null;
-		IOException occException = null;
-		try {
-			// Get the streams.
-			in = new BufferedInputStream(file.getInputstream());
-			out = new BufferedOutputStream(new FileOutputStream(dstFile));
-			final byte[] buf = new byte[FSProjectDAOImpl.BUF_SIZE_BYTES];
-			int count;
-
-			// Transfer the file.
-			count = in.read(buf);
-			while (count != -1) {
-				out.write(buf, 0, count);
-				count = in.read(buf);
-			}
-		} finally {
-			// Try to make sure that the streams will be closed.
-			try {
-				if (in != null) {
-					in.close();
-				}
-			} catch (final IOException ex) {
-				occException = ex;
-			}
-
-			try {
-				if (out != null) {
-					out.close();
-				}
-			} catch (final IOException ex) {
-				occException = ex;
-			}
-		}
-		// If something went wrong, rethrow the exception
-		if (occException != null) {
-			throw occException;
-		}
+		// Copy the data - the streams will be closed in this method.
+		FileCopyUtils.copy(in, out);
 	}
 
 	/*
@@ -477,83 +436,6 @@ public class FSProjectDAOImpl implements IProjectDAO, ReleaseListener {
 		return result;
 	}
 
-	/**
-	 * This method copies the given source file to the given destination file.
-	 * 
-	 * @param src
-	 *            The source element. This should be a file.
-	 * @param dst
-	 *            The destination element. This should be a (non existing) file.
-	 * @throws IOException
-	 *             If something went wrong. In this case the method will try to close all streams nevertheless.
-	 */
-	private void copyFile(final File src, final File dst) throws IOException {
-		boolean result = true;
-		// Open the files
-		FileInputStream fileInputStream = null;
-		FileOutputStream fileOutputStream = null;
-
-		try {
-			fileInputStream = new FileInputStream(src);
-			fileOutputStream = new FileOutputStream(dst);
-			final FileChannel inputChannel = fileInputStream.getChannel();
-			final FileChannel outputChannel = fileOutputStream.getChannel();
-
-			// Copy the data
-			this.transfer(inputChannel, outputChannel, src.length());
-
-			// This is just necessary to calm findbugs
-			result = dst.setLastModified(src.lastModified());
-
-		} catch (final IOException ex) {
-			FSProjectDAOImpl.LOG.error("An IO error occured", ex);
-			result = false;
-		} finally {
-			// Try to close the streams
-			if (fileInputStream != null) {
-				try {
-					fileInputStream.close();
-				} catch (final IOException ex) {
-					FSProjectDAOImpl.LOG.error("An IO error occured", ex);
-					result = false;
-				}
-			}
-			if (fileOutputStream != null) {
-				try {
-					fileOutputStream.close();
-				} catch (final IOException ex) {
-					FSProjectDAOImpl.LOG.error("An IO error occured", ex);
-					result = false;
-				}
-			}
-		}
-
-		if (!result) {
-			throw new IOException("An IO error occured");
-		}
-	}
-
-	/**
-	 * This method transfers data from one channel to the other.
-	 * 
-	 * @param fileChannel
-	 *            The input channel.
-	 * @param byteChannel
-	 *            The output channel.
-	 * @param lengthInBytes
-	 *            The size in bytes to be copied.
-	 * @throws IOException
-	 *             If something went wrong.
-	 */
-	private void transfer(final FileChannel fileChannel, final ByteChannel byteChannel, final long lengthInBytes) throws IOException {
-		long overallBytesTransfered = 0L;
-		while (overallBytesTransfered < lengthInBytes) {
-			final long count = Math.min(FSProjectDAOImpl.BUF_SIZE_BYTES, lengthInBytes - overallBytesTransfered);
-			final long bytesTransfered = fileChannel.transferTo(overallBytesTransfered, count, byteChannel);
-			overallBytesTransfered += bytesTransfered;
-		}
-	}
-
 	/**
 	 * Checks whether a project with the name exists on the file system.
 	 * 
@@ -611,6 +493,19 @@ public class FSProjectDAOImpl implements IProjectDAO, ReleaseListener {
 		return new File(FSProjectDAOImpl.ROOT_DIRECTORY + File.separator + projectName + File.separator + FSProjectDAOImpl.LIB_DIRECTORY);
 	}
 
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see kieker.webgui.persistence.IProjectDAO#deleteLibrary(java.lang.String, java.lang.String)
+	 */
+	@Override
+	@PreAuthorize("hasAnyRole('User', 'Administrator')")
+	public boolean deleteLibrary(final String projectName, final String libName) {
+		final File libDir = this.assembleLibDir(projectName);
+		final File libFile = new File(libDir, libName);
+		return libFile.delete();
+	}
+
 	/*
 	 * (non-Javadoc)
 	 * 
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java
index fc30376a0b4f9345f32f8a19a708b7638f695acf..5ea4c4760a216e795d3497ca236dce48f9ed6085 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java
@@ -29,7 +29,6 @@ import kieker.webgui.common.ClassAndMethodContainer;
 import kieker.webgui.common.exception.AnalysisInitializationException;
 import kieker.webgui.common.exception.AnalysisStateException;
 import kieker.webgui.common.exception.DisplayNotFoundException;
-import kieker.webgui.common.exception.LibraryAlreadyExistingException;
 import kieker.webgui.common.exception.LibraryLoadException;
 import kieker.webgui.common.exception.NewerProjectException;
 import kieker.webgui.common.exception.ProjectAlreadyExistingException;
@@ -142,7 +141,7 @@ public interface IProjectService {
 	public long getCurrTimeStamp(final String projectName) throws ProjectNotExistingException;
 
 	/**
-	 * This method tries to upload a dependency to the given project.
+	 * This method tries to upload a dependency to the given project. An existing version of the library will be overwritten.
 	 * 
 	 * @param file
 	 *            The file to be uploaded to the project.
@@ -152,10 +151,8 @@ public interface IProjectService {
 	 *             If a project with the given name does not exist.
 	 * @throws IOException
 	 *             If something went wrong during the uploading.
-	 * @throws LibraryAlreadyExistingException
-	 *             If a library with the same name exists already.
 	 */
-	public void uploadLibrary(final UploadedFile file, final String projectName) throws ProjectNotExistingException, IOException, LibraryAlreadyExistingException;
+	public void uploadLibrary(final UploadedFile file, final String projectName) throws ProjectNotExistingException, IOException;
 
 	/**
 	 * This method delivers a class loader containing the currently available libraries of the given project.
@@ -198,6 +195,7 @@ public interface IProjectService {
 	 * @return A list with all repository-classes.
 	 * @throws LibraryLoadException
 	 *             If something went wrong during the loading of the library.
+	 * @throws IOException
 	 */
 	public List<Class<AbstractRepository>> getAllRepositoriesWithinLib(final MIDependency lib, final String project, final ClassLoader classLoader,
 			final ClassAndMethodContainer classAndMethodContainer) throws LibraryLoadException;
@@ -346,4 +344,6 @@ public interface IProjectService {
 	 *             If the analysis is in an invalid state to deliver the entries.
 	 */
 	public Object[] getLogEntries(final String projectName) throws AnalysisStateException;
+
+	public boolean deleteLibrary(String projectName, String libName);
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/ProjectServiceImpl.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/ProjectServiceImpl.java
index c156a6ca4d9951bbd3b93f829b7ec5ed55ea8ec2..0bde1b845332c63df4bb36a38e0df4237f7344e7 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/ProjectServiceImpl.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/ProjectServiceImpl.java
@@ -34,7 +34,6 @@ import kieker.webgui.common.ClassAndMethodContainer;
 import kieker.webgui.common.exception.AnalysisInitializationException;
 import kieker.webgui.common.exception.AnalysisStateException;
 import kieker.webgui.common.exception.DisplayNotFoundException;
-import kieker.webgui.common.exception.LibraryAlreadyExistingException;
 import kieker.webgui.common.exception.LibraryLoadException;
 import kieker.webgui.common.exception.NewerProjectException;
 import kieker.webgui.common.exception.ProjectAlreadyExistingException;
@@ -144,7 +143,7 @@ public final class ProjectServiceImpl implements IProjectService {
 	}
 
 	@Override
-	public void uploadLibrary(final UploadedFile file, final String projectName) throws ProjectNotExistingException, IOException, LibraryAlreadyExistingException {
+	public void uploadLibrary(final UploadedFile file, final String projectName) throws ProjectNotExistingException, IOException {
 		final Object projectLock = this.getLock(projectName, this.fileSystemLocks);
 
 		synchronized (projectLock) {
@@ -171,6 +170,8 @@ public final class ProjectServiceImpl implements IProjectService {
 				return this.pluginFinder.getAllRepositoriesWithinJar(this.projectDAO.getURL(lib, projectName), classLoader, classAndMethodContainer);
 			} catch (final MalformedURLException ex) {
 				throw new LibraryLoadException("An error occured while loading the library.", ex);
+			} catch (final IOException ex) {
+				throw new LibraryLoadException("An error occured while loading the library.", ex);
 			}
 		}
 	}
@@ -185,6 +186,8 @@ public final class ProjectServiceImpl implements IProjectService {
 				return this.pluginFinder.getAllPluginsWithinJar(this.projectDAO.getURL(lib, projectName), classLoader, classAndMethodContainer);
 			} catch (final MalformedURLException ex) {
 				throw new LibraryLoadException("An error occured while loading the library.", ex);
+			} catch (final IOException ex) {
+				throw new LibraryLoadException("An error occured while loading the library.", ex);
 			}
 		}
 	}
@@ -197,6 +200,8 @@ public final class ProjectServiceImpl implements IProjectService {
 
 		} catch (final NullPointerException ex) {
 			throw new LibraryLoadException("An error occured while loading the library.", ex);
+		} catch (final IOException ex) {
+			throw new LibraryLoadException("An error occured while loading the library.", ex);
 		}
 	}
 
@@ -205,9 +210,10 @@ public final class ProjectServiceImpl implements IProjectService {
 			LibraryLoadException {
 		try {
 			return this.pluginFinder.getAllPluginsWithinJar(this.projectDAO.getKiekerURL(), classLoader, classAndMethodContainer);
-
 		} catch (final NullPointerException ex) {
 			throw new LibraryLoadException("An error occured while loading the library.", ex);
+		} catch (final IOException ex) {
+			throw new LibraryLoadException("An error occured while loading the library.", ex);
 		}
 	}
 
@@ -318,4 +324,18 @@ public final class ProjectServiceImpl implements IProjectService {
 			return this.acManager.getLogEntries(projectName);
 		}
 	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see kieker.webgui.service.IProjectService#deleteLibrary(java.lang.String)
+	 */
+	@Override
+	public boolean deleteLibrary(final String projectName, final String libName) {
+		final Object projectLock = this.getLock(projectName, this.fileSystemLocks);
+
+		synchronized (projectLock) {
+			return this.projectDAO.deleteLibrary(projectName, libName);
+		}
+	}
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/PluginFinder.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/PluginFinder.java
index a5ba59b746fc4b543f87d3152e2bae04b02817ea..e55f037d1d8f206ba6192b9ed63f4f70c25e9bd6 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/PluginFinder.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/PluginFinder.java
@@ -53,9 +53,10 @@ public final class PluginFinder {
 	 * @param classAndMethodContainer
 	 *            The container for the necessary reflection methods.
 	 * @return A list containing all available repository-classes or null, if an exception occurred.
+	 * @throws IOException
 	 */
 	public List<Class<AbstractRepository>> getAllRepositoriesWithinJar(final URL url, final ClassLoader classLoader,
-			final ClassAndMethodContainer classAndMethodContainer) {
+			final ClassAndMethodContainer classAndMethodContainer) throws IOException {
 		// Get a list containing all available classes within the given jar
 		final List<Class<?>> clazzes = this.getAllClassesWithinJar(url, classLoader);
 
@@ -86,9 +87,10 @@ public final class PluginFinder {
 	 * @param classAndMethodContainer
 	 *            The container for the necessary reflection methods.
 	 * @return A list containing all available plugin-classes or null, if an exception occurred.
+	 * @throws IOException
 	 */
 	public List<Class<AbstractPlugin>> getAllPluginsWithinJar(final URL url, final ClassLoader classLoader,
-			final ClassAndMethodContainer classAndMethodContainer) {
+			final ClassAndMethodContainer classAndMethodContainer) throws IOException {
 		final List<Class<?>> clazzes = this.getAllClassesWithinJar(url, classLoader);
 		List<Class<AbstractPlugin>> result = null;
 
@@ -115,7 +117,7 @@ public final class PluginFinder {
 	 *            The classloader which should be used to load the classes.
 	 * @return A list containing all available classes or null, if an exception occurred.
 	 */
-	private List<Class<?>> getAllClassesWithinJar(final URL url, final ClassLoader classLoader) {
+	private List<Class<?>> getAllClassesWithinJar(final URL url, final ClassLoader classLoader) throws IOException {
 		JarInputStream stream = null;
 		try {
 			final List<Class<?>> result = new ArrayList<Class<?>>();
@@ -139,17 +141,16 @@ public final class PluginFinder {
 			// Don't forget to close the jar file again.
 			stream.close();
 			return result;
-		} catch (final IOException ex) {
+		} finally {
 			if (stream != null) {
 				try {
 					stream.close();
 				} catch (final IOException ex1) {
+					// Ignore this
 					ex1.printStackTrace();
 				}
 			}
-			ex.printStackTrace();
 		}
-		return null;
 	}
 
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorBean.java b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorBean.java
index 57bb009b61c36205f9d6e880e58ad3003e62cc06..0053064dbe7c624d766daaa00f0cdfa0bda59d55 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorBean.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/web/beans/view/CurrentAnalysisEditorBean.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 import javax.faces.application.FacesMessage;
@@ -54,7 +55,6 @@ import kieker.analysis.repository.AbstractRepository;
 import kieker.common.logging.Log;
 import kieker.common.logging.LogFactory;
 import kieker.webgui.common.ClassAndMethodContainer;
-import kieker.webgui.common.exception.LibraryAlreadyExistingException;
 import kieker.webgui.common.exception.LibraryLoadException;
 import kieker.webgui.common.exception.NewerProjectException;
 import kieker.webgui.common.exception.ProjectLoadException;
@@ -85,6 +85,9 @@ import org.eclipse.emf.ecore.EObject;
  */
 @Component
 @Scope("view")
+// TODO Remove libraries in a clean way
+// TODO Receive libraries once as MIDependencies instead of Strings
+// TODO Use a possibility to reload the classloader explicitly - in this case the manager can close it directly in order to avoid too much memory use
 public final class CurrentAnalysisEditorBean {
 	/**
 	 * This field contains the log-object for the whole class, which will be used to log all important errors and exceptions which occur.
@@ -222,22 +225,29 @@ public final class CurrentAnalysisEditorBean {
 	 * @throws ProjectLoadException
 	 *             If something went wrong during the loading of the libraries.
 	 */
-	private synchronized void initializeToolPalette() throws ProjectLoadException {
-		try {
-			// Clean our tool palette
-			this.availableFilters.clear();
-			this.availableReaders.clear();
-			this.availableRepositories.clear();
-
-			// Run through all libraries and add their content to our lists
-			for (final MIDependency lib : this.project.getDependencies()) {
+	private synchronized void initializeToolPalette() {
+		// Clean our tool palette
+		this.availableFilters.clear();
+		this.availableReaders.clear();
+		this.availableRepositories.clear();
+
+		// Run through all libraries and add their content to our lists
+		final Iterator<MIDependency> dependencies = this.project.getDependencies().iterator();
+		while (dependencies.hasNext()) {
+			final MIDependency lib = dependencies.next();
+			try {
 				this.addContentsToToolPalette(lib);
+			} catch (final NullPointerException ex) {
+				dependencies.remove();
+			} catch (final LibraryLoadException ex) {
+				CurrentAnalysisEditorBean.LOG.error("A library could not be loaded correctly.", ex);
 			}
+		}
+		try {
 			// Run also through the kieker library
 			this.addKiekerContentsToToolPalette();
 		} catch (final LibraryLoadException ex) {
 			CurrentAnalysisEditorBean.LOG.error("A library could not be loaded correctly.", ex);
-			throw new ProjectLoadException("A library could not be loaded correctly.", ex);
 		}
 	}
 
@@ -621,9 +631,6 @@ public final class CurrentAnalysisEditorBean {
 
 			// We have to reinitialize the tool palette completely! This is necessary as some of the already existing classes could need the newly loaded classes.
 			this.initializeToolPalette();
-		} catch (final LibraryAlreadyExistingException ex) {
-			CurrentAnalysisEditorBean.LOG.info("A library with the same name exists already.", ex);
-			GlobalPropertiesBean.showMessage(FacesMessage.SEVERITY_WARN, this.globalPropertiesBean.getMsgLibraryExistingException());
 		} catch (final IOException ex) {
 			CurrentAnalysisEditorBean.LOG.error("An error occured while uploading the library.", ex);
 			GlobalPropertiesBean.showMessage(FacesMessage.SEVERITY_ERROR, this.globalPropertiesBean.getMsgLibraryUploadingException());
@@ -639,6 +646,17 @@ public final class CurrentAnalysisEditorBean {
 		}
 	}
 
+	public synchronized void deleteLibrary(final String name) {
+		if (this.projectService.deleteLibrary(this.projectName, name)) {
+			// Update our class loader and the available plugins & repositories
+			this.reloadClassLoader();
+			this.reloadClassesAndMethods();
+
+			// We have to reinitialize the tool palette completely! This is necessary as some of the already existing classes could need the newly loaded classes.
+			this.initializeToolPalette();
+		}
+	}
+
 	/**
 	 * This method delivers the available libraries of this project as a pair of strings. The first element is the name of the library, the second one the size in
 	 * MiBytes as human readable string. The first element is always the kieker-library.
@@ -653,12 +671,11 @@ public final class CurrentAnalysisEditorBean {
 			return result;
 		} catch (final ProjectNotExistingException ex) {
 			CurrentAnalysisEditorBean.LOG.error("The project does not exist.", ex);
-			return new ArrayList<String>();
 		} catch (final NullPointerException ex) {
 			// This exception occurs when a property has not been initialized correctly.
 			CurrentAnalysisEditorBean.LOG.error("A null pointer exception occured.", ex);
-			return new ArrayList<String>();
 		}
+		return new ArrayList<String>();
 	}
 
 	/**
diff --git a/Kieker.WebGUI/src/main/webapp/WEB-INF/spring-security-config.xml b/Kieker.WebGUI/src/main/webapp/WEB-INF/spring-security-config.xml
index 7b6d72c9c392233052e738b80869e404eaf22480..e945b6401f3ea1b1e0b1c407ba829ef6f5ef56fc 100644
--- a/Kieker.WebGUI/src/main/webapp/WEB-INF/spring-security-config.xml
+++ b/Kieker.WebGUI/src/main/webapp/WEB-INF/spring-security-config.xml
@@ -19,6 +19,7 @@
         <intercept-url pattern="/faces/pages/admin/**" access="hasRole('Administrator')"/>
         
         <!-- The is the guest area. -->
+        <intercept-url pattern="/pages/" access="isAuthenticated()"/>
         <intercept-url pattern="/pages/analysisEditor" access="isAuthenticated()"/>
         <intercept-url pattern="/pages/cockpit" access="isAuthenticated()"/>
         <intercept-url pattern="/faces/pages/analysisEditor" access="isAuthenticated()"/>
diff --git a/Kieker.WebGUI/src/main/webapp/css/DefaultTemplate.css b/Kieker.WebGUI/src/main/webapp/css/DefaultTemplate.css
index e16162507deeaabebc9e58c2950c3b134ff91d77..9454e3e90a5bc3f02bedfb4b6347ece1176faa74 100644
--- a/Kieker.WebGUI/src/main/webapp/css/DefaultTemplate.css
+++ b/Kieker.WebGUI/src/main/webapp/css/DefaultTemplate.css
@@ -26,6 +26,6 @@ div.background {
     background: #ffffff;
     padding: 0 0 0 0;
     margin: auto;
-    width: 1000px;
+    width: 960px;
     min-height: 100%;
 }
\ No newline at end of file
diff --git a/Kieker.WebGUI/src/main/webapp/dialogs/AnalysisEditorPageDialogs.xhtml b/Kieker.WebGUI/src/main/webapp/dialogs/AnalysisEditorPageDialogs.xhtml
index 1374ef41e89bfdbc985a7364e26f41089b27166d..a1d1aaa13956456a76e9c333395b5dce52bff892 100644
--- a/Kieker.WebGUI/src/main/webapp/dialogs/AnalysisEditorPageDialogs.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/dialogs/AnalysisEditorPageDialogs.xhtml
@@ -17,7 +17,7 @@
                 </p:column> 
 
                 <p:column headerText="#{localizedAnalysisEditorPageMessages.libOptions}" style="text-align: center; width:40px">  
-                    <p:commandButton id="deleteButton" icon="ui-icon-delete" disabled="true"/>    
+                    <p:commandButton id="deleteButton" icon="ui-icon-delete" action="#{currentAnalysisEditorBean.deleteLibrary(dependency)}" update=":dependenciesForm :messages :toolpalette"/>    
                     <p:tooltip for="deleteButton" value="Delete Library"/>
                 </p:column> 
             </p:dataTable>  
diff --git a/Kieker.WebGUI/src/main/webapp/img/kieker-header.jpg b/Kieker.WebGUI/src/main/webapp/img/kieker-header.jpg
deleted file mode 100644
index 6fc022be60126ecc932e1ee1fe70d3eb659d38c1..0000000000000000000000000000000000000000
Binary files a/Kieker.WebGUI/src/main/webapp/img/kieker-header.jpg and /dev/null differ
diff --git a/Kieker.WebGUI/src/main/webapp/img/kieker-header.png b/Kieker.WebGUI/src/main/webapp/img/kieker-header.png
new file mode 100644
index 0000000000000000000000000000000000000000..e9a564e94b58a7950ca93b98b57c8f74d574d7e7
Binary files /dev/null and b/Kieker.WebGUI/src/main/webapp/img/kieker-header.png differ