diff --git a/Kieker.WebGUI/lib/kieker-1.5-SNAPSHOT.jar b/Kieker.WebGUI/lib/kieker-1.5-SNAPSHOT.jar
index ac109796b7bdfaa0b6818ef6332b0de816c05d36..15c8b031e00eafcb48dd93e1ff8222848b5f3211 100644
Binary files a/Kieker.WebGUI/lib/kieker-1.5-SNAPSHOT.jar and b/Kieker.WebGUI/lib/kieker-1.5-SNAPSHOT.jar differ
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 92e90171c12984e66883ff1330e63d97f189776b..7c04fe091af0e75f8d4116489f273e583e3eaa58 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
@@ -88,7 +88,7 @@ public class AvailableDependenciesBean {
 					}
 				}
 				try {
-					PluginClassLoader.getInstance().addURL(new URL("file", "localhost", dependency.getFilePath()));
+					PluginClassLoader.getInstance().addURL(new URL("file", "localhost", FileManager.getInstance().getFullPath(dependency)));
 					this.dependencies.add(dependency);
 				} catch (final MalformedURLException ex) {
 					AvailableDependenciesBean.LOG.error("Could not add the dependency to the ClassLoader.", ex);
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 885b227e759d307a1cad402959b6e0aec45580ee..10c4412ffededcc92da1aa93f224eaf28101d4e3 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
@@ -29,11 +29,16 @@ import javax.faces.application.FacesMessage;
 import javax.faces.bean.ManagedBean;
 import javax.faces.bean.SessionScoped;
 import javax.faces.context.FacesContext;
+import kieker.analysis.model.analysisMetaModel.MIAnalysisPlugin;
 
 import kieker.analysis.model.analysisMetaModel.MIDependency;
 import kieker.analysis.model.analysisMetaModel.MIProject;
+import kieker.analysis.model.analysisMetaModel.MIReader;
+import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory;
 import kieker.analysis.plugin.AbstractAnalysisPlugin;
+import kieker.analysis.plugin.AbstractPlugin;
 import kieker.analysis.plugin.AbstractReaderPlugin;
+import kieker.webgui.common.FileManager;
 import kieker.webgui.common.PluginClassLoader;
 import kieker.webgui.common.PluginFinder;
 
@@ -175,22 +180,23 @@ public class SelectedProjectBean {
 	 * 
 	 * @return A list with all readers.
 	 */
-	public final List<Class<?>> getAvailableReaders() {
-		final List<Class<?>> list = new ArrayList<Class<?>>();
+	public final List<Class<AbstractReaderPlugin>> getAvailableReaders() {
+		final List<Class<AbstractReaderPlugin>> list = new ArrayList<Class<AbstractReaderPlugin>>();
 
 		if (this.mainProject != null) {
 			for (final MIDependency lib : this.mainProject.getDependencies()) {
 				try {
-					PluginClassLoader.getInstance().addURL(new URL(SelectedProjectBean.URL_PROTOCOL_FILE, SelectedProjectBean.URL_LOCALHOST, lib.getFilePath()));
+					PluginClassLoader.getInstance().addURL(
+							new URL(SelectedProjectBean.URL_PROTOCOL_FILE, SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib)));
 				} catch (final MalformedURLException ex) {
 					// TODO Log exception
 				}
 				try {
 					final List<Class<?>> plugins = PluginFinder.getAllPluginsWithinJar(new URL(SelectedProjectBean.URL_PROTOCOL_FILE,
-							SelectedProjectBean.URL_LOCALHOST, lib.getFilePath()));
+							SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib)));
 					for (final Class<?> plugin : plugins) {
 						if (!Modifier.isAbstract(plugin.getModifiers()) && AbstractReaderPlugin.class.isAssignableFrom(plugin)) {
-							list.add(plugin);
+							list.add((Class<AbstractReaderPlugin>) plugin);
 						}
 					}
 				} catch (final MalformedURLException ex) {
@@ -208,22 +214,23 @@ public class SelectedProjectBean {
 	 * 
 	 * @return A list with all filter.
 	 */
-	public final List getAvailableFilters() {
-		final List<Class<?>> list = new ArrayList<Class<?>>();
+	public final List<Class<AbstractAnalysisPlugin>> getAvailableFilters() {
+		final List<Class<AbstractAnalysisPlugin>> list = new ArrayList<Class<AbstractAnalysisPlugin>>();
 
 		if (this.mainProject != null) {
 			for (final MIDependency lib : this.mainProject.getDependencies()) {
 				try {
-					PluginClassLoader.getInstance().addURL(new URL(SelectedProjectBean.URL_PROTOCOL_FILE, SelectedProjectBean.URL_LOCALHOST, lib.getFilePath()));
+					PluginClassLoader.getInstance().addURL(
+							new URL(SelectedProjectBean.URL_PROTOCOL_FILE, SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib)));
 				} catch (final MalformedURLException ex) {
 					// TODO Log exception
 				}
 				try {
 					final List<Class<?>> plugins = PluginFinder.getAllPluginsWithinJar(new URL(SelectedProjectBean.URL_PROTOCOL_FILE,
-							SelectedProjectBean.URL_LOCALHOST, lib.getFilePath()));
+							SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib)));
 					for (final Class<?> plugin : plugins) {
 						if (!Modifier.isAbstract(plugin.getModifiers()) && AbstractAnalysisPlugin.class.isAssignableFrom(plugin)) {
-							list.add(plugin);
+							list.add((Class<AbstractAnalysisPlugin>) plugin);
 						}
 					}
 				} catch (final MalformedURLException ex) {
@@ -257,7 +264,7 @@ public class SelectedProjectBean {
 				}
 				try {
 					final List<Class<?>> plugins = PluginFinder.getAllPluginsWithinJar(new URL(SelectedProjectBean.URL_PROTOCOL_FILE,
-							SelectedProjectBean.URL_LOCALHOST, lib.getFilePath()));
+							SelectedProjectBean.URL_LOCALHOST, FileManager.getInstance().getFullPath(lib)));
 					for (final Class<?> plugin : plugins) {
 						if (!Modifier.isAbstract(plugin.getModifiers())) {
 							if (AbstractReaderPlugin.class.isAssignableFrom(plugin)) {
@@ -277,4 +284,23 @@ public class SelectedProjectBean {
 		}
 		return root;
 	}
+
+	public final void addPlugin(final Class<AbstractPlugin> pluginClass) {
+        // TODO It seems like it is necessary to completly load all properties, including the available ports in order to work
+		final MAnalysisMetaModelFactory factory = new MAnalysisMetaModelFactory();
+
+		if (AbstractReaderPlugin.class.isAssignableFrom(pluginClass)) {
+			final MIReader reader = factory.createReader();
+			reader.setClassname(pluginClass.getCanonicalName());
+			reader.setName(pluginClass.getSimpleName());
+
+			this.mainProject.getPlugins().add(reader);
+		} else {
+			final MIAnalysisPlugin filter = factory.createAnalysisPlugin();
+			filter.setClassname(pluginClass.getCanonicalName());
+			filter.setName(pluginClass.getSimpleName());
+
+			this.mainProject.getPlugins().add(filter);
+		}
+	}
 }
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 401e351bc20ecb6ea1522b1c77681146af983bb6..7ecdbc3ad1bc502f21e0636c3012cd2de72effc6 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/common/FileManager.java
@@ -30,6 +30,8 @@ import javax.faces.application.FacesMessage;
 import javax.faces.context.FacesContext;
 
 import kieker.analysis.AnalysisController;
+import kieker.analysis.model.analysisMetaModel.*;
+import kieker.analysis.model.analysisMetaModel.*;
 import kieker.analysis.model.analysisMetaModel.MIDependency;
 import kieker.analysis.model.analysisMetaModel.MIProject;
 import kieker.analysis.model.analysisMetaModel.impl.MAnalysisMetaModelFactory;
@@ -274,7 +276,7 @@ public final class FileManager {
 			}
 		}
 		final MIDependency dependency = this.factory.createDependency();
-		dependency.setFilePath(depFile.getAbsolutePath());
+		dependency.setFilePath(depFile.getName());
 		return dependency;
 	}
 
@@ -302,7 +304,7 @@ public final class FileManager {
 			for (final File file : files) {
 				if (file.isFile() && file.getName().endsWith(FileManager.JAR_EXTENSION)) {
 					final MIDependency dependency = this.factory.createDependency();
-					dependency.setFilePath(file.getAbsolutePath());
+					dependency.setFilePath(file.getName());
 					resultList.add(dependency);
 				}
 			}
@@ -319,7 +321,7 @@ public final class FileManager {
 	 * @return true iff the dependency exists and the removal was succesful.
 	 */
 	public final synchronized boolean deleteDependency(final MIDependency dependency) {
-		final File file = new File(dependency.getFilePath());
+		final File file = new File(FileManager.LIB_DIR, dependency.getFilePath());
 		if (file.isFile()) {
 			return file.delete();
 		}
@@ -366,6 +368,9 @@ public final class FileManager {
 			return AnalysisController.loadFromFile(projectFile);
 		}
 		return null;
+	}
 
+	public String getFullPath(final MIDependency dependency) {
+		return new File(FileManager.LIB_DIR, dependency.getFilePath()).getAbsolutePath();
 	}
 }
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 89d7ffad1f71339e352bce38aac7b115874d3a62..88964223ff2decb9cde814687d92c40e4809998c 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/converter/MIDependencyToCountPluginsConverter.java
@@ -30,6 +30,7 @@ import javax.faces.convert.Converter;
 import javax.faces.convert.FacesConverter;
 
 import kieker.analysis.model.analysisMetaModel.MIDependency;
+import kieker.webgui.common.FileManager;
 import kieker.webgui.common.PluginFinder;
 
 /**
@@ -113,7 +114,8 @@ public class MIDependencyToCountPluginsConverter implements Converter {
 			}
 			String result;
 			try {
-				result = Integer.toString(PluginFinder.getAllPluginsWithinJar(new URL("file", "localhost", ((MIDependency) o).getFilePath())).size());
+				result = Integer.toString(PluginFinder.getAllPluginsWithinJar(new URL("file", "localhost", FileManager.getInstance().getFullPath((MIDependency) o)))
+						.size());
 			} catch (final MalformedURLException ex) {
 				result = "";
 			} catch (final NullPointerException ex) {
diff --git a/Kieker.WebGUI/src/main/webapp/main.xhtml b/Kieker.WebGUI/src/main/webapp/main.xhtml
index b48b150b4b43483a3f00ed92484bcc1156b7e4a2..43945563355ce4fd92e45984695ff6b0b6db431a 100644
--- a/Kieker.WebGUI/src/main/webapp/main.xhtml
+++ b/Kieker.WebGUI/src/main/webapp/main.xhtml
@@ -101,6 +101,10 @@
                 <!-- ******************************************************************************** -->
                 <!-- The following layout unit is within the center and used for the graph. -->
                 <p:layoutUnit position="center" id="centerLayout">
+                    <ui:repeat id="centerRepeat" value="#{selectedProjectBean.mainProject.plugins}" var="plugin">
+                        <p:panel header="#{plugin.name}" id="plugin" style="width: 30%"/>
+                        <p:draggable for="plugin"/>
+                    </ui:repeat>
                 </p:layoutUnit>
                 <!-- ******************************************************************************** -->
 
@@ -148,12 +152,12 @@
                         <p:accordionPanel multiple="true" activeIndex="">
                             <p:tab title="Reader">
                                 <ui:repeat value="#{selectedProjectBean.availableReaders}" var="reader">
-                                    <p:commandLink value="#{reader.simpleName}"/><br/>
+                                    <p:commandLink value="#{reader.simpleName}" action="#{selectedProjectBean.addPlugin(reader)}" update=":projectsForm :centerLayout" /><br/>
                                 </ui:repeat>
                             </p:tab>
                             <p:tab title="Filter">
                                 <ui:repeat value="#{selectedProjectBean.availableFilters}" var="filter">
-                                    <p:commandLink value="#{filter.simpleName}"/><br/>
+                                    <p:commandLink value="#{filter.simpleName}" action="#{selectedProjectBean.addPlugin(filter)}" update=":projectsForm :centerLayout"/><br/>
                                 </ui:repeat>
                             </p:tab>
                         </p:accordionPanel>