diff --git a/SrcBehaviorLoader/PluginLoader.cpp b/SrcBehaviorLoader/PluginLoader.cpp
index 70355ca3c6e4dec0fd4123169d30ca4284d1f8fb..0c75aad742c0bc7192e2d895d11c74ad8bde7bd7 100644
--- a/SrcBehaviorLoader/PluginLoader.cpp
+++ b/SrcBehaviorLoader/PluginLoader.cpp
@@ -202,6 +202,12 @@ std::vector<std::string> PluginLoader::searchDirectoriesForPlugins(std::vector<s
 PluginLoader::PluginLoader(QObject *parent)
 {
 	m_PluginLoader = new QPluginLoader(this);
+	m_PluginListModel = new QStringListModel();
+}
+PluginLoader::~PluginLoader()
+{
+	delete m_PluginLoader;
+	delete m_PluginListModel;
 }
 
 bool PluginLoader::loadPluginFromFilename(QString const& filename)
@@ -236,6 +242,40 @@ bool PluginLoader::loadPluginFromFilename(QString const& filename)
 	return retval;
 }
 
+bool PluginLoader::loadPluginFromName(QString name) {
+	QString filename = m_PluginMap.find(name)->second;
+	return loadPluginFromFilename(filename);
+}
+
+void PluginLoader::addToPluginList(QString filename) {
+
+	bool isLib = QLibrary::isLibrary(filename);
+
+	if (isLib) {
+
+		QPluginLoader loader;
+		loader.setFileName(filename);
+		QJsonValue pluginMeda(loader.metaData().value("MetaData"));
+		QJsonObject metaObj = pluginMeda.toObject();
+		QString mstring = metaObj.value("name").toString();
+		if (!m_PluginList.contains(mstring))
+			m_PluginList.append(mstring);
+		m_PluginListModel->setStringList(m_PluginList);
+		m_PluginMap.insert(std::pair<QString, QString>(mstring, filename));
+	}
+	else {
+		qWarning() << "Error reading plugin: " << filename;
+	}
+}
+
+QStringListModel* PluginLoader::getPluginList() {
+	return m_PluginListModel;
+}
+
+QObject* PluginLoader::getPluginInstance() {
+	return (m_PluginLoader->instance());
+}
+
 QJsonObject PluginLoader::getPluginMetaData() const
 {
 	return m_MetaData;
@@ -245,3 +285,18 @@ void PluginLoader::readMetaDataFromPlugin()
 {
 	m_MetaData = m_PluginLoader->metaData().value("MetaData").toObject();
 }
+
+bool PluginLoader::getIsPluginLoaded() {
+	return m_isPluginLoaded;
+}
+
+QString PluginLoader::getCurrentPluginName() {
+	return m_currentPluginName;
+}
+const std::map<QString, QString> &PluginLoader::getPluginMap() const
+{
+    return m_PluginMap;
+}
+
+
+
diff --git a/SrcBehaviorLoader/PluginLoader.h b/SrcBehaviorLoader/PluginLoader.h
index b9d4542a769726ed6960fff52d1f1ba35dd59610..f0184fea63c3d8aa4ff03cceca593fc873138ff0 100644
--- a/SrcBehaviorLoader/PluginLoader.h
+++ b/SrcBehaviorLoader/PluginLoader.h
@@ -5,28 +5,94 @@
 #include "QPluginLoader"
 #include "QStringListModel"
 #include "QPointer"
+#include <map>
 
 class PluginLoader : QObject
 { 
 	Q_OBJECT
 public:
 	explicit PluginLoader(QObject *parent = 0);
+	
+	~PluginLoader();
 
+	/**
+	* Loads a file as a QT plugin and reads it's name from the metadata.
+	* It will then be added to the stringlist and is selectable via "loadPluginFromName".
+	* This function does not actually set the plugin instance.
+	*/
+	void addToPluginList(QString p);
+	
+	/**
+	* Returns a QStrinListModel with the names of all seen Plugins.
+	*/
+	QStringListModel* getPluginList();
+
+	/**
+	* Loads a BioTracker Plugin from a filpaht. It returns true if the Plugin could be loaded, otherwise false.
+	*/
 	bool loadPluginFromFilename(QString const& filename);
+
+	/**
+	* Loads a plugin from it's name (given in the metadata) instead of the filename.
+	* Only works if it is already known to the pluginloader, i.e. was loaded manually or automatically before or
+	* or has been added to the pluginlist via "addToPluginList"
+	*/
+	bool loadPluginFromName(QString name);
+
 	QJsonObject getPluginMetaData() const;
 
 	static std::vector<std::string> queryRegistryBehaviors(std::string path);
+
 	static std::vector<std::string> searchDirectoriesForPlugins(std::vector<std::string> list, std::string suffix);
 
 	//return oldPath
 	static const char* addDllPath(std::string file);
+
 	static void delDllPath(const char* oldPath);
+
+	// Is a plugin loaded or not?
+	bool getIsPluginLoaded();
+
+	// Gets the name of the currently loaded plugin
+	QString getCurrentPluginName();
+	
+	/**
+	* Returns the Instance of the BioTracker Plugin.
+	*/
+	QObject *getPluginInstance();
+
+	/**
+	* Returns a map containing the mapping "plugin name -> filename"
+	*/
+	std::map<QString, QString> const& getPluginMap() const;
+
 private:
 
+	//a map containing the mapping "plugin name -> filename"
+	std::map<QString, QString> m_PluginMap;
+
+	/**
+	* Gets the metadata from the currently loaded plugin.
+	* Currently this is nothing but the advertised name of the plugin
+	*/
 	void readMetaDataFromPlugin();
 
+	// The QT object to actually load the plugins
 	QPluginLoader *m_PluginLoader;
+
 	QJsonObject m_MetaData;
+
+	//nomen est omen
+	bool m_isPluginLoaded;
+
+	// List of all available plugins 
+	QStringList m_PluginList;
+
+	//Name of the currently loaded plugin
+	QString m_currentPluginName;
+
+	// Entire ListModel of the metadata (actually containing all metadata, not only name)
+	QStringListModel* m_PluginListModel;
 };
 
 #endif // PLUGINLOADER_H
\ No newline at end of file