diff --git a/Kieker.WebGUI/.pmd b/Kieker.WebGUI/.pmd
index 8305b0f7e8abc632746c5f9ef4f8578f9128fb42..7b9043677dd900577bb4b0367b6bd7965422946a 100644
--- a/Kieker.WebGUI/.pmd
+++ b/Kieker.WebGUI/.pmd
@@ -4,440 +4,416 @@
     <ruleSetFile>.ruleset</ruleSetFile>
     <rules>
         <rule>
-            <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
-            <ruleset>Basic Rules</ruleset>
-        </rule>
-        <rule>
-            <name>AvoidMultipleUnaryOperators</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AbstractClassWithoutAbstractMethod</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidThreadGroup</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AbstractClassWithoutAnyMethod</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidUsingHardCodedIP</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AbstractNaming</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidUsingOctalValues</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AccessorClassGeneration</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>BigIntegerInstantiation</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AddEmptyString</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>BooleanInstantiation</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AppendCharacterWithChar</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>BrokenNullCheck</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AssignmentToNonFinalStatic</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>CheckResultSet</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AtLeastOneConstructor</name>
+            <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>ClassCastExceptionWithToArray</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidAccessibilityAlteration</name>
+            <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>CollapsibleIfStatements</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidArrayLoops</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>DoubleCheckedLocking</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidAssertAsIdentifier</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyCatchBlock</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidCallingFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyFinallyBlock</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidCatchingThrowable</name>
+            <ruleset>Strict Exception Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyIfStmt</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidConstantsInterface</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyInitializer</name>
+            <name>AvoidDecimalLiteralsInBigDecimalConstructor</name>
             <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyStatementNotInLoop</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidDeeplyNestedIfStmts</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyStaticInitializer</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidDollarSigns</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptySwitchStatements</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidEnumAsIdentifier</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptySynchronizedBlock</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidFieldNameMatchingMethodName</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyTryBlock</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidFieldNameMatchingTypeName</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyWhileStmt</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidInstanceofChecksInCatchClause</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>ForLoopShouldBeWhileLoop</name>
+            <name>AvoidMultipleUnaryOperators</name>
             <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>JumbledIncrementer</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidProtectedFieldInFinalClass</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>MisplacedNullCheck</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidReassigningParameters</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>OverrideBothEqualsAndHashcode</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidRethrowingException</name>
+            <ruleset>Strict Exception Rules</ruleset>
         </rule>
         <rule>
-            <name>ReturnFromFinallyBlock</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidStringBufferField</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>UnconditionalIfStatement</name>
+            <name>AvoidThreadGroup</name>
             <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>UnnecessaryConversionTemporary</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidThrowingNewInstanceOfSameException</name>
+            <ruleset>Strict Exception Rules</ruleset>
         </rule>
         <rule>
-            <name>UnnecessaryReturn</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidThrowingRawExceptionTypes</name>
+            <ruleset>Strict Exception Rules</ruleset>
         </rule>
         <rule>
-            <name>UnusedNullCheckInEquals</name>
+            <name>AvoidUsingHardCodedIP</name>
             <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>UselessOperationOnImmutable</name>
-            <ruleset>Basic Rules</ruleset>
+            <name>AvoidUsingNativeCode</name>
+            <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>UselessOverridingMethod</name>
+            <name>AvoidUsingOctalValues</name>
             <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>ForLoopsMustUseBraces</name>
-            <ruleset>Braces Rules</ruleset>
-        </rule>
-        <rule>
-            <name>IfElseStmtsMustUseBraces</name>
-            <ruleset>Braces Rules</ruleset>
-        </rule>
-        <rule>
-            <name>IfStmtsMustUseBraces</name>
-            <ruleset>Braces Rules</ruleset>
-        </rule>
-        <rule>
-            <name>WhileLoopsMustUseBraces</name>
-            <ruleset>Braces Rules</ruleset>
-        </rule>
-        <rule>
-            <name>CloneThrowsCloneNotSupportedException</name>
-            <ruleset>Clone Implementation Rules</ruleset>
-        </rule>
-        <rule>
-            <name>ProperCloneImplementation</name>
-            <ruleset>Clone Implementation Rules</ruleset>
-        </rule>
-        <rule>
-            <name>AssignmentInOperand</name>
+            <name>AvoidUsingShortType</name>
             <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>AtLeastOneConstructor</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>BadComparison</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidAccessibilityAlteration</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>BigIntegerInstantiation</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidUsingNativeCode</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>BooleanGetMethodName</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidUsingShortType</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>BooleanInstantiation</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
             <name>BooleanInversion</name>
             <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>DefaultPackage</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>BrokenNullCheck</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>DoNotCallGarbageCollectionExplicitly</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>ByteInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>DontImportSun</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>CheckResultSet</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>NullAssignment</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>ClassCastExceptionWithToArray</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>SuspiciousOctalEscape</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>ClassNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>UnnecessaryParentheses</name>
-            <ruleset>Controversial Rules</ruleset>
+            <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AbstractClassWithoutAbstractMethod</name>
-            <ruleset>Design Rules</ruleset>
+            <name>CloneMethodMustImplementCloneable</name>
+            <ruleset>Type Resolution Rules</ruleset>
         </rule>
         <rule>
-            <name>AbstractClassWithoutAnyMethod</name>
-            <ruleset>Design Rules</ruleset>
+            <name>CloneThrowsCloneNotSupportedException</name>
+            <ruleset>Clone Implementation Rules</ruleset>
         </rule>
         <rule>
-            <name>AccessorClassGeneration</name>
+            <name>CloseResource</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AssignmentToNonFinalStatic</name>
-            <ruleset>Design Rules</ruleset>
+            <name>CollapsibleIfStatements</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidConstantsInterface</name>
+            <name>CompareObjectsWithEquals</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidDeeplyNestedIfStmts</name>
-            <ruleset>Design Rules</ruleset>
+            <name>ConsecutiveLiteralAppends</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidInstanceofChecksInCatchClause</name>
+            <name>ConstructorCallsOverridableMethod</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidProtectedFieldInFinalClass</name>
+            <name>DefaultLabelNotLastInSwitchStmt</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidReassigningParameters</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DefaultPackage</name>
+            <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>BadComparison</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DoNotCallGarbageCollectionExplicitly</name>
+            <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>ClassWithOnlyPrivateConstructorsShouldBeFinal</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DoNotCallSystemExit</name>
+            <ruleset>J2EE Rules</ruleset>
         </rule>
         <rule>
-            <name>CloseResource</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DoNotExtendJavaLangError</name>
+            <ruleset>Strict Exception Rules</ruleset>
         </rule>
         <rule>
-            <name>CompareObjectsWithEquals</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DoNotThrowExceptionInFinally</name>
+            <ruleset>Strict Exception Rules</ruleset>
         </rule>
         <rule>
-            <name>ConstructorCallsOverridableMethod</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DoNotUseThreads</name>
+            <ruleset>J2EE Rules</ruleset>
         </rule>
         <rule>
-            <name>DefaultLabelNotLastInSwitchStmt</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DontImportJavaLang</name>
+            <ruleset>Import Statement Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DontImportSun</name>
+            <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>EqualsNull</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DoubleCheckedLocking</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>FinalFieldCouldBeStatic</name>
-            <ruleset>Design Rules</ruleset>
+            <name>DuplicateImports</name>
+            <ruleset>Import Statement Rules</ruleset>
         </rule>
         <rule>
-            <name>IdempotentOperations</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyCatchBlock</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>ImmutableField</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyFinalizer</name>
+            <ruleset>Finalizer Rules</ruleset>
         </rule>
         <rule>
-            <name>InstantiationToGetClass</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyFinallyBlock</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>MissingBreakInSwitch</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyIfStmt</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>MissingStaticMethodInNonInstantiatableClass</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyInitializer</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>NonCaseLabelInSwitchStatement</name>
+            <name>EmptyMethodInAbstractClassShouldBeAbstract</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>NonStaticInitializer</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyStatementNotInLoop</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>NonThreadSafeSingleton</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyStaticInitializer</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>OptimizableToArrayCall</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptySwitchStatements</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>PositionLiteralsFirstInComparisons</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptySynchronizedBlock</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>PreserveStackTrace</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyTryBlock</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>ReturnEmptyArrayRatherThanNull</name>
-            <ruleset>Design Rules</ruleset>
+            <name>EmptyWhileStmt</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>SimpleDateFormatNeedsLocale</name>
+            <name>EqualsNull</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>SimplifyBooleanExpressions</name>
-            <ruleset>Design Rules</ruleset>
+            <name>ExceptionAsFlowControl</name>
+            <ruleset>Strict Exception Rules</ruleset>
         </rule>
         <rule>
-            <name>SimplifyBooleanReturns</name>
+            <name>FinalFieldCouldBeStatic</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>SimplifyConditional</name>
-            <ruleset>Design Rules</ruleset>
+            <name>FinalizeDoesNotCallSuperFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
         </rule>
         <rule>
-            <name>SingularField</name>
-            <ruleset>Design Rules</ruleset>
+            <name>FinalizeOnlyCallsSuperFinalize</name>
+            <ruleset>Finalizer Rules</ruleset>
         </rule>
         <rule>
-            <name>SwitchDensity</name>
-            <ruleset>Design Rules</ruleset>
+            <name>FinalizeOverloaded</name>
+            <ruleset>Finalizer Rules</ruleset>
         </rule>
         <rule>
-            <name>SwitchStmtsShouldHaveDefault</name>
-            <ruleset>Design Rules</ruleset>
+            <name>FinalizeShouldBeProtected</name>
+            <ruleset>Finalizer Rules</ruleset>
         </rule>
         <rule>
-            <name>TooFewBranchesForASwitchStatement</name>
-            <ruleset>Design Rules</ruleset>
+            <name>ForLoopShouldBeWhileLoop</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>UncommentedEmptyConstructor</name>
-            <ruleset>Design Rules</ruleset>
+            <name>ForLoopsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
         </rule>
         <rule>
-            <name>UncommentedEmptyMethod</name>
+            <name>IdempotentOperations</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>UnnecessaryLocalBeforeReturn</name>
-            <ruleset>Design Rules</ruleset>
+            <name>IfElseStmtsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
         </rule>
         <rule>
-            <name>UnsynchronizedStaticDateFormatter</name>
-            <ruleset>Design Rules</ruleset>
+            <name>IfStmtsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
         </rule>
         <rule>
-            <name>UseCollectionIsEmpty</name>
+            <name>ImmutableField</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>UseLocaleWithCaseConversions</name>
-            <ruleset>Design Rules</ruleset>
+            <name>ImportFromSamePackage</name>
+            <ruleset>Import Statement Rules</ruleset>
         </rule>
         <rule>
-            <name>UseNotifyAllInsteadOfNotify</name>
-            <ruleset>Design Rules</ruleset>
+            <name>InefficientEmptyStringCheck</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>UseSingleton</name>
+            <name>InefficientStringBuffering</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>InstantiationToGetClass</name>
             <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidCallingFinalize</name>
-            <ruleset>Finalizer Rules</ruleset>
+            <name>InsufficientStringBufferDeclaration</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>EmptyFinalizer</name>
-            <ruleset>Finalizer Rules</ruleset>
+            <name>IntegerInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>FinalizeDoesNotCallSuperFinalize</name>
-            <ruleset>Finalizer Rules</ruleset>
+            <name>JumbledIncrementer</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>FinalizeOnlyCallsSuperFinalize</name>
-            <ruleset>Finalizer Rules</ruleset>
+            <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>FinalizeOverloaded</name>
-            <ruleset>Finalizer Rules</ruleset>
+            <name>JUnit4TestShouldUseAfterAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>FinalizeShouldBeProtected</name>
-            <ruleset>Finalizer Rules</ruleset>
+            <name>JUnit4TestShouldUseBeforeAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>DontImportJavaLang</name>
-            <ruleset>Import Statement Rules</ruleset>
+            <name>JUnit4TestShouldUseTestAnnotation</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>DuplicateImports</name>
-            <ruleset>Import Statement Rules</ruleset>
+            <name>JUnitAssertionsShouldIncludeMessage</name>
+            <ruleset>JUnit Rules</ruleset>
         </rule>
         <rule>
-            <name>ImportFromSamePackage</name>
-            <ruleset>Import Statement Rules</ruleset>
+            <name>JUnitSpelling</name>
+            <ruleset>JUnit Rules</ruleset>
         </rule>
         <rule>
-            <name>TooManyStaticImports</name>
-            <ruleset>Import Statement Rules</ruleset>
+            <name>JUnitStaticSuite</name>
+            <ruleset>JUnit Rules</ruleset>
         </rule>
         <rule>
-            <name>DoNotCallSystemExit</name>
-            <ruleset>J2EE Rules</ruleset>
+            <name>JUnitTestsShouldIncludeAssert</name>
+            <ruleset>JUnit Rules</ruleset>
         </rule>
         <rule>
-            <name>DoNotUseThreads</name>
-            <ruleset>J2EE Rules</ruleset>
+            <name>JUnitUseExpected</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
             <name>LocalHomeNamingConvention</name>
@@ -448,112 +424,96 @@
             <ruleset>J2EE Rules</ruleset>
         </rule>
         <rule>
-            <name>MDBAndSessionBeanNamingConvention</name>
-            <ruleset>J2EE Rules</ruleset>
-        </rule>
-        <rule>
-            <name>RemoteInterfaceNamingConvention</name>
-            <ruleset>J2EE Rules</ruleset>
+            <name>LocalVariableCouldBeFinal</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>RemoteSessionInterfaceNamingConvention</name>
-            <ruleset>J2EE Rules</ruleset>
+            <name>LongInstantiation</name>
+            <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>StaticEJBFieldShouldBeFinal</name>
-            <ruleset>J2EE Rules</ruleset>
+            <name>LooseCoupling</name>
+            <ruleset>Type Resolution Rules</ruleset>
         </rule>
         <rule>
-            <name>UseProperClassLoader</name>
+            <name>MDBAndSessionBeanNamingConvention</name>
             <ruleset>J2EE Rules</ruleset>
         </rule>
         <rule>
-            <name>ProperLogger</name>
-            <ruleset>Jakarta Commons Logging Rules</ruleset>
-        </rule>
-        <rule>
-            <name>UseCorrectExceptionLogging</name>
-            <ruleset>Jakarta Commons Logging Rules</ruleset>
-        </rule>
-        <rule>
-            <name>JUnitAssertionsShouldIncludeMessage</name>
-            <ruleset>JUnit Rules</ruleset>
-        </rule>
-        <rule>
-            <name>JUnitSpelling</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>MethodArgumentCouldBeFinal</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>JUnitStaticSuite</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>MethodNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>JUnitTestsShouldIncludeAssert</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>MethodWithSameNameAsEnclosingClass</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>SimplifyBooleanAssertion</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>MisleadingVariableName</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>TestClassWithoutTestCases</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>MisplacedNullCheck</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>UnnecessaryBooleanAssertion</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>MissingBreakInSwitch</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>UseAssertEqualsInsteadOfAssertTrue</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>MissingStaticMethodInNonInstantiatableClass</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>UseAssertNullInsteadOfAssertTrue</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>NonCaseLabelInSwitchStatement</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>UseAssertSameInsteadOfAssertTrue</name>
-            <ruleset>JUnit Rules</ruleset>
+            <name>NonStaticInitializer</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidAssertAsIdentifier</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>NonThreadSafeSingleton</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidEnumAsIdentifier</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>NoPackage</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>ByteInstantiation</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>OptimizableToArrayCall</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>IntegerInstantiation</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>OverrideBothEqualsAndHashcode</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>JUnit4SuitesShouldUseSuiteAnnotation</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>PositionLiteralsFirstInComparisons</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>JUnit4TestShouldUseAfterAnnotation</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>PreserveStackTrace</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>JUnit4TestShouldUseBeforeAnnotation</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>ProperCloneImplementation</name>
+            <ruleset>Clone Implementation Rules</ruleset>
         </rule>
         <rule>
-            <name>JUnit4TestShouldUseTestAnnotation</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>ProperLogger</name>
+            <ruleset>Jakarta Commons Logging Rules</ruleset>
         </rule>
         <rule>
-            <name>JUnitUseExpected</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>RemoteInterfaceNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
         </rule>
         <rule>
-            <name>LongInstantiation</name>
-            <ruleset>Migration Rules</ruleset>
+            <name>RemoteSessionInterfaceNamingConvention</name>
+            <ruleset>J2EE Rules</ruleset>
         </rule>
         <rule>
             <name>ReplaceEnumerationWithIterator</name>
@@ -567,53 +527,65 @@
             <name>ReplaceVectorWithList</name>
             <ruleset>Migration Rules</ruleset>
         </rule>
+        <rule>
+            <name>ReturnEmptyArrayRatherThanNull</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>ReturnFromFinallyBlock</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
         <rule>
             <name>ShortInstantiation</name>
             <ruleset>Migration Rules</ruleset>
         </rule>
         <rule>
-            <name>AbstractNaming</name>
+            <name>ShortMethodName</name>
             <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidDollarSigns</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>SimpleDateFormatNeedsLocale</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidFieldNameMatchingMethodName</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>SimplifyBooleanAssertion</name>
+            <ruleset>JUnit Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidFieldNameMatchingTypeName</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>SimplifyBooleanExpressions</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>BooleanGetMethodName</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>SimplifyBooleanReturns</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>ClassNamingConventions</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>SimplifyConditional</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>MethodNamingConventions</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>SimplifyStartsWith</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>MethodWithSameNameAsEnclosingClass</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>SingularField</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>MisleadingVariableName</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>StaticEJBFieldShouldBeFinal</name>
+            <ruleset>J2EE Rules</ruleset>
         </rule>
         <rule>
-            <name>NoPackage</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>StringBufferInstantiationWithChar</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>ShortMethodName</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>StringInstantiation</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
+        </rule>
+        <rule>
+            <name>StringToString</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
             <name>SuspiciousConstantFieldName</name>
@@ -628,112 +600,124 @@
             <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>VariableNamingConventions</name>
-            <ruleset>Naming Rules</ruleset>
+            <name>SuspiciousOctalEscape</name>
+            <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>AddEmptyString</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>SwitchDensity</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidArrayLoops</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>SwitchStmtsShouldHaveDefault</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>LocalVariableCouldBeFinal</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>TestClassWithoutTestCases</name>
+            <ruleset>JUnit Rules</ruleset>
         </rule>
         <rule>
-            <name>MethodArgumentCouldBeFinal</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>TooFewBranchesForASwitchStatement</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>SimplifyStartsWith</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>TooManyStaticImports</name>
+            <ruleset>Import Statement Rules</ruleset>
         </rule>
         <rule>
-            <name>UnnecessaryWrapperObjectCreation</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>UncommentedEmptyConstructor</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>UseArrayListInsteadOfVector</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>UncommentedEmptyMethod</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>UseArraysAsList</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>UnconditionalIfStatement</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>UseStringBufferForStringAppends</name>
-            <ruleset>Optimization Rules</ruleset>
+            <name>UnnecessaryBooleanAssertion</name>
+            <ruleset>JUnit Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidCatchingThrowable</name>
-            <ruleset>Strict Exception Rules</ruleset>
+            <name>UnnecessaryCaseChange</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidRethrowingException</name>
-            <ruleset>Strict Exception Rules</ruleset>
+            <name>UnnecessaryConversionTemporary</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidThrowingNewInstanceOfSameException</name>
-            <ruleset>Strict Exception Rules</ruleset>
+            <name>UnnecessaryLocalBeforeReturn</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidThrowingRawExceptionTypes</name>
-            <ruleset>Strict Exception Rules</ruleset>
+            <name>UnnecessaryParentheses</name>
+            <ruleset>Controversial Rules</ruleset>
         </rule>
         <rule>
-            <name>DoNotExtendJavaLangError</name>
-            <ruleset>Strict Exception Rules</ruleset>
+            <name>UnnecessaryReturn</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>DoNotThrowExceptionInFinally</name>
-            <ruleset>Strict Exception Rules</ruleset>
+            <name>UnnecessaryWrapperObjectCreation</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>ExceptionAsFlowControl</name>
-            <ruleset>Strict Exception Rules</ruleset>
+            <name>UnsynchronizedStaticDateFormatter</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>AppendCharacterWithChar</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UnusedFormalParameter</name>
+            <ruleset>Unused Code Rules</ruleset>
         </rule>
         <rule>
-            <name>AvoidStringBufferField</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UnusedImports</name>
+            <ruleset>Type Resolution Rules</ruleset>
         </rule>
         <rule>
-            <name>ConsecutiveLiteralAppends</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UnusedLocalVariable</name>
+            <ruleset>Unused Code Rules</ruleset>
         </rule>
         <rule>
-            <name>InefficientEmptyStringCheck</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UnusedNullCheckInEquals</name>
+            <ruleset>Basic Rules</ruleset>
         </rule>
         <rule>
-            <name>InefficientStringBuffering</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UnusedPrivateField</name>
+            <ruleset>Unused Code Rules</ruleset>
         </rule>
         <rule>
-            <name>InsufficientStringBufferDeclaration</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UnusedPrivateMethod</name>
+            <ruleset>Unused Code Rules</ruleset>
         </rule>
         <rule>
-            <name>StringBufferInstantiationWithChar</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UseArrayListInsteadOfVector</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>StringInstantiation</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UseArraysAsList</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>StringToString</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UseAssertEqualsInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
         </rule>
         <rule>
-            <name>UnnecessaryCaseChange</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UseAssertNullInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseAssertSameInsteadOfAssertTrue</name>
+            <ruleset>JUnit Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseCollectionIsEmpty</name>
+            <ruleset>Design Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UseCorrectExceptionLogging</name>
+            <ruleset>Jakarta Commons Logging Rules</ruleset>
         </rule>
         <rule>
             <name>UseEqualsToCompareStrings</name>
@@ -743,41 +727,49 @@
             <name>UseIndexOfChar</name>
             <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
+        <rule>
+            <name>UselessOperationOnImmutable</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
+        <rule>
+            <name>UselessOverridingMethod</name>
+            <ruleset>Basic Rules</ruleset>
+        </rule>
         <rule>
             <name>UselessStringValueOf</name>
             <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>UseStringBufferLength</name>
-            <ruleset>String and StringBuffer Rules</ruleset>
+            <name>UseLocaleWithCaseConversions</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>CloneMethodMustImplementCloneable</name>
-            <ruleset>Type Resolution Rules</ruleset>
+            <name>UseNotifyAllInsteadOfNotify</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>LooseCoupling</name>
-            <ruleset>Type Resolution Rules</ruleset>
+            <name>UseProperClassLoader</name>
+            <ruleset>J2EE Rules</ruleset>
         </rule>
         <rule>
-            <name>UnusedImports</name>
-            <ruleset>Type Resolution Rules</ruleset>
+            <name>UseSingleton</name>
+            <ruleset>Design Rules</ruleset>
         </rule>
         <rule>
-            <name>UnusedFormalParameter</name>
-            <ruleset>Unused Code Rules</ruleset>
+            <name>UseStringBufferForStringAppends</name>
+            <ruleset>Optimization Rules</ruleset>
         </rule>
         <rule>
-            <name>UnusedLocalVariable</name>
-            <ruleset>Unused Code Rules</ruleset>
+            <name>UseStringBufferLength</name>
+            <ruleset>String and StringBuffer Rules</ruleset>
         </rule>
         <rule>
-            <name>UnusedPrivateField</name>
-            <ruleset>Unused Code Rules</ruleset>
+            <name>VariableNamingConventions</name>
+            <ruleset>Naming Rules</ruleset>
         </rule>
         <rule>
-            <name>UnusedPrivateMethod</name>
-            <ruleset>Unused Code Rules</ruleset>
+            <name>WhileLoopsMustUseBraces</name>
+            <ruleset>Braces Rules</ruleset>
         </rule>
     </rules>
     <includeDerivedFiles>false</includeDerivedFiles>
diff --git a/Kieker.WebGUI/config/quality-config/pmdrules.xml b/Kieker.WebGUI/config/quality-config/pmdrules.xml
index 3dc278260a401fc8161b174c0dfcca556c9fd07f..6f91926fd458895477aecb3c1c2bf65517f9aab2 100644
--- a/Kieker.WebGUI/config/quality-config/pmdrules.xml
+++ b/Kieker.WebGUI/config/quality-config/pmdrules.xml
@@ -30,6 +30,7 @@
     <exclude name="UnnecessaryConstructor"/>
 	<exclude name="UseConcurrentHashMap"/>
 	<exclude name="AssignmentInOperand"/>
+	<exclude name="NullAssignment"/>
   </rule>
   
   <!--<rule ref="rulesets/coupling.xml">-->
diff --git a/Kieker.WebGUI/pom.xml b/Kieker.WebGUI/pom.xml
index 7f1069d599b639b8ee175c37fb90e438ba6c707f..2325abc30bc1d6ecc5cc31d2387e7539d68ecc76 100644
--- a/Kieker.WebGUI/pom.xml
+++ b/Kieker.WebGUI/pom.xml
@@ -45,6 +45,11 @@
     </repositories>
 
     <dependencies>
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>2.0.1</version>
+        </dependency>
         <dependency>
             <groupId>net.vidageek</groupId>
             <artifactId>mirror</artifactId>
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 433753eef018e913303e4ca1b2aa4d1667828893..f93a98c97e6baba668d575031cd21924334aeac2 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
@@ -24,7 +24,6 @@ import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.lang.ref.WeakReference;
-import java.lang.reflect.Modifier;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.security.AccessController;
@@ -38,11 +37,16 @@ import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
 
+import javax.annotation.Nullable;
 import javax.annotation.PostConstruct;
 
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
 import com.google.common.io.Files;
 
 import kieker.analysis.AnalysisController;
+import kieker.analysis.analysisComponent.AbstractAnalysisComponent;
 import kieker.analysis.model.analysisMetaModel.MIAnalysisMetaModelFactory;
 import kieker.analysis.model.analysisMetaModel.MIProject;
 import kieker.analysis.plugin.filter.AbstractFilterPlugin;
@@ -62,6 +66,7 @@ import kieker.webgui.persistence.IProjectDAO;
 import kieker.webgui.persistence.impl.util.Class2ModelInstanceConverter;
 import kieker.webgui.persistence.impl.util.CloseableURLClassLoader;
 import kieker.webgui.persistence.impl.util.PluginFinder;
+import kieker.webgui.persistence.impl.util.SimpleCastFunction;
 
 import org.primefaces.model.UploadedFile;
 
@@ -166,28 +171,28 @@ public class FSProjectDAOImpl implements IProjectDAO, ReleaseListener {
 			final List<RepositoryDecorator> repositories, final URL lib, final ClassLoader classLoader, final ClassAndMethodContainer classAndMethodContainer)
 			throws IOException {
 		// FInd the available classes within the library
-		final List<Class<AbstractRepository>> repositoryClasses = this.pluginFinder.getAllRepositoriesWithinJar(lib, classLoader, classAndMethodContainer);
-		final List<Class<AbstractFilterPlugin>> filterClasses = this.pluginFinder.getAllFiltersWithinJar(lib, classLoader, classAndMethodContainer);
-		final List<Class<AbstractReaderPlugin>> readerClasses = this.pluginFinder.getAllReadersWithinJar(lib, classLoader, classAndMethodContainer);
-
-		// Convert the repositories into model instances
-		for (final Class<AbstractRepository> repository : repositoryClasses) {
-			if (!(Modifier.isAbstract(repository.getModifiers()) || this.class2ModelInstanceConverter.isProgrammaticOnly(repository, classAndMethodContainer))) {
-				repositories.add(this.class2ModelInstanceConverter.convertRepositoryClass2ModelInstance(repository, classAndMethodContainer));
-			}
-		}
-
-		// Convert the plugins into model instances
-		for (final Class<AbstractReaderPlugin> reader : readerClasses) {
-			if (!(Modifier.isAbstract(reader.getModifiers()) || this.class2ModelInstanceConverter.isProgrammaticOnly(reader, classAndMethodContainer))) {
-				readers.add(this.class2ModelInstanceConverter.convertReaderClass2ModelInstance(reader, classAndMethodContainer));
-			}
-		}
-		for (final Class<AbstractFilterPlugin> filter : filterClasses) {
-			if (!(Modifier.isAbstract(filter.getModifiers()) || this.class2ModelInstanceConverter.isProgrammaticOnly(filter, classAndMethodContainer))) {
-				filters.add(this.class2ModelInstanceConverter.convertFilterClass2ModelInstance(filter, classAndMethodContainer));
-			}
-		}
+		final Collection<Class<AbstractRepository>> repositoryClasses = this.pluginFinder.getAllRepositoriesWithinJar(lib, classLoader, classAndMethodContainer);
+		final Collection<Class<AbstractFilterPlugin>> filterClasses = this.pluginFinder.getAllFiltersWithinJar(lib, classLoader, classAndMethodContainer);
+		final Collection<Class<AbstractReaderPlugin>> readerClasses = this.pluginFinder.getAllReadersWithinJar(lib, classLoader, classAndMethodContainer);
+
+		// Rule those out which are for programmatic purposes only and transform the remaining with the converter service into model instances.
+		final Collection<RepositoryDecorator> repositoryModelInstances = Collections2.transform(Collections2.transform(
+				Collections2.filter(repositoryClasses, new IsNotProgrammaticOnly(classAndMethodContainer)),
+				new SimpleCastFunction<Class<? extends AbstractAnalysisComponent>, Class<AbstractRepository>>()), new ConvertRepositoryClass2ModelInstanceFunction(
+				classAndMethodContainer));
+		final Collection<FilterDecorator> filterModelInstances = Collections2.transform(Collections2.transform(
+				Collections2.filter(filterClasses, new IsNotProgrammaticOnly(classAndMethodContainer)),
+				new SimpleCastFunction<Class<? extends AbstractAnalysisComponent>, Class<AbstractFilterPlugin>>()), new ConvertFilterClass2ModelInstanceFunction(
+				classAndMethodContainer));
+		final Collection<ReaderDecorator> readerModelInstances = Collections2.transform(Collections2.transform(
+				Collections2.filter(readerClasses, new IsNotProgrammaticOnly(classAndMethodContainer)),
+				new SimpleCastFunction<Class<? extends AbstractAnalysisComponent>, Class<AbstractReaderPlugin>>()), new ConvertReaderClass2ModelInstanceFunction(
+				classAndMethodContainer));
+
+		// Add the model instances to our lists.
+		repositories.addAll(repositoryModelInstances);
+		readers.addAll(readerModelInstances);
+		filters.addAll(filterModelInstances);
 	}
 
 	private static void createDirectoryIfNecessary(final String dirName) throws IOException {
@@ -862,4 +867,72 @@ public class FSProjectDAOImpl implements IProjectDAO, ReleaseListener {
 		}
 	}
 
+	/**
+	 * A predicate which can be used to check whether a class is for programmatic purposes only or not.
+	 * 
+	 * @author Nils Christian Ehmke
+	 */
+	private class IsNotProgrammaticOnly implements Predicate<Class<? extends AbstractAnalysisComponent>> {
+
+		private final ClassAndMethodContainer classAndMethodContainer;
+
+		public IsNotProgrammaticOnly(final ClassAndMethodContainer classAndMethodContainer) {
+			this.classAndMethodContainer = classAndMethodContainer;
+		}
+
+		@Override
+		public boolean apply(@Nullable final Class<? extends AbstractAnalysisComponent> elem) {
+			return !FSProjectDAOImpl.this.class2ModelInstanceConverter.isProgrammaticOnly(elem, this.classAndMethodContainer);
+		}
+
+	}
+
+	private class ConvertRepositoryClass2ModelInstanceFunction implements Function<Class<AbstractRepository>, RepositoryDecorator> {
+
+		private final ClassAndMethodContainer classAndMethodContainer;
+
+		public ConvertRepositoryClass2ModelInstanceFunction(final ClassAndMethodContainer classAndMethodContainer) {
+			this.classAndMethodContainer = classAndMethodContainer;
+		}
+
+		@Override
+		@Nullable
+		public RepositoryDecorator apply(@Nullable final Class<AbstractRepository> repository) {
+			return FSProjectDAOImpl.this.class2ModelInstanceConverter.convertRepositoryClass2ModelInstance(repository, this.classAndMethodContainer);
+		}
+
+	}
+
+	private class ConvertReaderClass2ModelInstanceFunction implements Function<Class<AbstractReaderPlugin>, ReaderDecorator> {
+
+		private final ClassAndMethodContainer classAndMethodContainer;
+
+		public ConvertReaderClass2ModelInstanceFunction(final ClassAndMethodContainer classAndMethodContainer) {
+			this.classAndMethodContainer = classAndMethodContainer;
+		}
+
+		@Override
+		@Nullable
+		public ReaderDecorator apply(@Nullable final Class<AbstractReaderPlugin> repository) {
+			return FSProjectDAOImpl.this.class2ModelInstanceConverter.convertReaderClass2ModelInstance(repository, this.classAndMethodContainer);
+		}
+
+	}
+
+	private class ConvertFilterClass2ModelInstanceFunction implements Function<Class<AbstractFilterPlugin>, FilterDecorator> {
+
+		private final ClassAndMethodContainer classAndMethodContainer;
+
+		public ConvertFilterClass2ModelInstanceFunction(final ClassAndMethodContainer classAndMethodContainer) {
+			this.classAndMethodContainer = classAndMethodContainer;
+		}
+
+		@Override
+		@Nullable
+		public FilterDecorator apply(@Nullable final Class<AbstractFilterPlugin> repository) {
+			return FSProjectDAOImpl.this.class2ModelInstanceConverter.convertFilterClass2ModelInstance(repository, this.classAndMethodContainer);
+		}
+
+	}
+
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/Class2ModelInstanceConverter.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/Class2ModelInstanceConverter.java
index 0a854cfb36cccfdcde91c154008f7c204edbc510..9cd4a18fe676ef8484f75f995099587772888d72 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/Class2ModelInstanceConverter.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/Class2ModelInstanceConverter.java
@@ -70,14 +70,44 @@ public class Class2ModelInstanceConverter {
 		// No code necessary
 	}
 
+	/**
+	 * Converts the given {@link AbstractReaderPlugin} instance into a model instance using the given parameters.
+	 * 
+	 * @param clazz
+	 *            The class to convert.
+	 * @param classAndMethodContainer
+	 *            The container which will be used during the reflection calls.
+	 * 
+	 * @return A model instance representing the given class as a meta model component.
+	 */
 	public ReaderDecorator convertReaderClass2ModelInstance(final Class<AbstractReaderPlugin> clazz, final ClassAndMethodContainer classAndMethodContainer) {
 		return (ReaderDecorator) this.convertComponentClass2ModelInstance(clazz, classAndMethodContainer, Type.Reader);
 	}
 
+	/**
+	 * Converts the given {@link AbstractFilterPlugin} instance into a model instance using the given parameters.
+	 * 
+	 * @param clazz
+	 *            The class to convert.
+	 * @param classAndMethodContainer
+	 *            The container which will be used during the reflection calls.
+	 * 
+	 * @return A model instance representing the given class as a meta model component.
+	 */
 	public FilterDecorator convertFilterClass2ModelInstance(final Class<AbstractFilterPlugin> clazz, final ClassAndMethodContainer classAndMethodContainer) {
 		return (FilterDecorator) this.convertComponentClass2ModelInstance(clazz, classAndMethodContainer, Type.Filter);
 	}
 
+	/**
+	 * Converts the given {@link AbstractRepository} instance into a model instance using the given parameters.
+	 * 
+	 * @param clazz
+	 *            The class to convert.
+	 * @param classAndMethodContainer
+	 *            The container which will be used during the reflection calls.
+	 * 
+	 * @return A model instance representing the given class as a meta model component.
+	 */
 	public RepositoryDecorator convertRepositoryClass2ModelInstance(final Class<AbstractRepository> clazz, final ClassAndMethodContainer classAndMethodContainer) {
 		return (RepositoryDecorator) this.convertComponentClass2ModelInstance(clazz, classAndMethodContainer, Type.Repository);
 	}
@@ -114,7 +144,7 @@ public class Class2ModelInstanceConverter {
 					((MIFilter) plugin).getInputPorts().addAll(inputPorts);
 				}
 			}
-		} catch (final Throwable ex) { // NOCS (Throwable)
+		} catch (final Throwable ex) { // NOCS NOPMD (Throwable)
 			Class2ModelInstanceConverter.LOG.info("A component with the classname '" + clazz.getCanonicalName() + "' could not be initialized.", ex);
 
 			plugin.getProperties().clear();
@@ -131,22 +161,26 @@ public class Class2ModelInstanceConverter {
 		plugin.setClassname(clazz.getName());
 		plugin.setName(clazz.getSimpleName());
 
+		// Decide what to return
+		AbstractAnalysisComponentDecorator<? extends MIAnalysisComponent> result;
 		switch (type) {
-		case Filter: {
-			return new FilterDecorator((MIFilter) plugin, Collections.unmodifiableMap(propertyDescriptions), description, dependency, fullyInitialized,
+		case Filter:
+			result = new FilterDecorator((MIFilter) plugin, Collections.unmodifiableMap(propertyDescriptions), description, dependency, fullyInitialized,
 					Collections.unmodifiableMap(displayDescriptions));
-		}
-		case Reader: {
-			return new ReaderDecorator((MIReader) plugin, Collections.unmodifiableMap(propertyDescriptions), description, dependency, fullyInitialized,
+			break;
+		case Reader:
+			result = new ReaderDecorator((MIReader) plugin, Collections.unmodifiableMap(propertyDescriptions), description, dependency, fullyInitialized,
 					Collections.unmodifiableMap(displayDescriptions));
-		}
-		case Repository: {
-			return new RepositoryDecorator((MIRepository) plugin, Collections.unmodifiableMap(propertyDescriptions), description, dependency, fullyInitialized);
-
-		}
+			break;
+		case Repository:
+			result = new RepositoryDecorator((MIRepository) plugin, Collections.unmodifiableMap(propertyDescriptions), description, dependency, fullyInitialized);
+			break;
 		default:
-			return null;
+			result = null;
+			break;
 		}
+
+		return result;
 	}
 
 	private void fillInputPorts(final Class<AbstractFilterPlugin> clazz, final ClassAndMethodContainer classAndMethodContainer,
@@ -196,7 +230,6 @@ public class Class2ModelInstanceConverter {
 		return this.getAnnotatedMethods(clazz, classAndMethodContainer.getDisplayAnnotationClass());
 	}
 
-	@SuppressWarnings("unchecked")
 	private void fillOutputPorts(final Class<? extends AbstractPlugin> clazz, final ClassAndMethodContainer classAndMethodContainer,
 			final Collection<MIOutputPort> outputPorts, final MIPlugin parent) {
 		final Annotation annotation = this.getSuitableAnnotation(clazz, classAndMethodContainer);
@@ -209,7 +242,6 @@ public class Class2ModelInstanceConverter {
 		}
 	}
 
-	@SuppressWarnings("unchecked")
 	private void fillProperties(final Class<? extends AbstractAnalysisComponent> clazz, final ClassAndMethodContainer classAndMethodContainer,
 			final Collection<MIProperty> properties, final Map<String, String> propertyDescriptions) {
 		final Annotation annotation = this.getSuitableAnnotation(clazz, classAndMethodContainer);
@@ -258,7 +290,7 @@ public class Class2ModelInstanceConverter {
 	}
 
 	/**
-	 * Tells whether the given class is "programmaticOnly". If there is no annotation which could tell the state of the flag, true will be returned.
+	 * Tells whether the given class is "programmaticOnly".
 	 * 
 	 * @param clazz
 	 *            The class of the plugin or repository.
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/CloseableURLClassLoader.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/CloseableURLClassLoader.java
index a7f24e34ae0b6d516134551c2fe43394938642bb..f2084d59baf70b9adcbcc7b0260922f9d18d76da 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/CloseableURLClassLoader.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/CloseableURLClassLoader.java
@@ -23,8 +23,8 @@ import java.util.Collection;
 
 /**
  * A class loader which extends the {@link URLClassLoader} with a close-method using a hack. This will probably only work for a Sun VM. The class itself will
- * partially <b>not</b> be checked by Findbugs (there is an exception-rule in the configuration-file) as I <b>know</b> that the code is dangerous. It is a hack after
- * all.
+ * partially <b>not</b> be checked by Findbugs (there is an exception-rule in the configuration-file) as we <b>know</b> that the code is dangerous. It is a hack
+ * after all.
  * 
  * @author Nils Christian Ehmke
  */
@@ -36,22 +36,17 @@ public class CloseableURLClassLoader extends URLClassLoader implements Closeable
 	 * Creates a new instance of this class using the given parameters.
 	 * 
 	 * @param urls
-	 *            The URLs to be used by the classloader.
+	 *            The URLs to be used by the class loader.
 	 * @param parent
-	 *            The parent of this classloader.
+	 *            The parent of this class loader.
 	 */
 	public CloseableURLClassLoader(final URL[] urls, final ClassLoader parent) {
 		super(urls, parent);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.io.Closeable#close()
-	 */
 	@Override
 	public synchronized void close() throws IOException {
-		// Make sure that the classloader can only be closed once.
+		// Make sure that the class loader can only be closed once.
 		if (!this.closed) {
 			this.closed = true;
 
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/PluginFinder.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/PluginFinder.java
index 8421655c4ea19a69135b0674e5962c44d802cb80..99e37ee60fc351246ad04f8ab7068e8cbe540aec 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/PluginFinder.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/PluginFinder.java
@@ -16,12 +16,19 @@
 package kieker.webgui.persistence.impl.util;
 
 import java.io.IOException;
+import java.lang.reflect.Modifier;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 import java.util.jar.JarEntry;
 import java.util.jar.JarInputStream;
 
+import javax.annotation.Nullable;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+
 import kieker.analysis.plugin.filter.AbstractFilterPlugin;
 import kieker.analysis.plugin.reader.AbstractReaderPlugin;
 import kieker.analysis.repository.AbstractRepository;
@@ -45,97 +52,84 @@ public class PluginFinder {
 	}
 
 	/**
-	 * This method delivers all classes which are available in the given jar and are compatible with <code>AbstractRepository</code>..
+	 * This method delivers all classes which are available in the given jar and are compatible with <code>AbstractRepository</code>. None of them is abstract.
 	 * 
 	 * @param url
-	 *            The url for the jar.
+	 *            The URL for the jar.
 	 * @param classLoader
-	 *            The classloader which should be used to load the classes.
+	 *            The class loader which should be used to load the classes.
 	 * @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
 	 *             If something went wrong during the opening of the jar file.
 	 */
-	public List<Class<AbstractRepository>> getAllRepositoriesWithinJar(final URL url, final ClassLoader classLoader,
+	public Collection<Class<AbstractRepository>> getAllRepositoriesWithinJar(final URL url, final ClassLoader classLoader,
 			final ClassAndMethodContainer classAndMethodContainer) throws IOException {
-		// Get a list containing all available classes within the given jar
-		final List<Class<?>> clazzes = this.getAllClassesWithinJar(url, classLoader);
-
-		List<Class<AbstractRepository>> result = null;
-
-		result = new ArrayList<Class<AbstractRepository>>();
-		for (final Class<?> clazz : clazzes) {
-			// This is the cast resulting in an unchecked cast warning.
-			if (clazz.isAnnotationPresent(classAndMethodContainer.getRepositoryAnnotationClass())
-					&& classAndMethodContainer.getAbstractRepositoryClass().isAssignableFrom(clazz)) {
-				result.add((Class<AbstractRepository>) clazz);
-			}
-		}
-
-		return result;
+		return Collections2.transform(Collections2.filter(Collections2.filter(this.getAllClassesWithinJar(url, classLoader),
+				new IsRepositoryPredicate(classAndMethodContainer)), new IsNotAbstractPredicate()), new SimpleCastFunction<Class<?>, Class<AbstractRepository>>());
 	}
 
 	/**
 	 * This method delivers all classes which are available in the given jar and have the Plugin-Annotation from the Kieker framework (And are correctly compatible
-	 * with <code>AbstractPlugin</code>).
+	 * with <code>AbstractReaderPlugin</code>). None of them is abstract.
 	 * 
 	 * @param url
-	 *            The url for the jar.
+	 *            The URL for the jar.
 	 * @param classLoader
-	 *            The classloader which should be used to load the classes.
+	 *            The class loader which should be used to load the classes.
 	 * @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
 	 *             If something went wrong during the opening of the jar file.
 	 */
-	public List<Class<AbstractReaderPlugin>> getAllReadersWithinJar(final URL url, final ClassLoader classLoader,
+	public Collection<Class<AbstractReaderPlugin>> getAllReadersWithinJar(final URL url, final ClassLoader classLoader,
 			final ClassAndMethodContainer classAndMethodContainer) throws IOException {
-		final List<Class<?>> clazzes = this.getAllClassesWithinJar(url, classLoader);
-		List<Class<AbstractReaderPlugin>> result = null;
-
-		result = new ArrayList<Class<AbstractReaderPlugin>>();
-		for (final Class<?> clazz : clazzes) {
-			// This is the cast resulting in an unchecked cast warning.
-			if (clazz.isAnnotationPresent(classAndMethodContainer.getPluginAnnotationClass())
-					&& classAndMethodContainer.getAbstractReaderPluginClass().isAssignableFrom(clazz)) {
-				result.add((Class<AbstractReaderPlugin>) clazz);
-			}
-		}
-
-		return result;
+		return Collections2.transform(Collections2.filter(Collections2.filter(this.getAllClassesWithinJar(url, classLoader),
+				new IsReaderPredicate(classAndMethodContainer)), new IsNotAbstractPredicate()), new SimpleCastFunction<Class<?>, Class<AbstractReaderPlugin>>());
 	}
 
-	public List<Class<AbstractFilterPlugin>> getAllFiltersWithinJar(final URL url, final ClassLoader classLoader,
+	/**
+	 * This method delivers all classes which are available in the given jar and have the Plugin-Annotation from the Kieker framework (And are correctly compatible
+	 * with <code>AbstractFilterPlugin</code>). None of them is abstract.
+	 * 
+	 * @param url
+	 *            The URL for the jar.
+	 * @param classLoader
+	 *            The class loader which should be used to load the classes.
+	 * @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
+	 *             If something went wrong during the opening of the jar file.
+	 */
+	public Collection<Class<AbstractFilterPlugin>> getAllFiltersWithinJar(final URL url, final ClassLoader classLoader,
 			final ClassAndMethodContainer classAndMethodContainer) throws IOException {
-		final List<Class<?>> clazzes = this.getAllClassesWithinJar(url, classLoader);
-		List<Class<AbstractFilterPlugin>> result = null;
-
-		result = new ArrayList<Class<AbstractFilterPlugin>>();
-		for (final Class<?> clazz : clazzes) {
-			// This is the cast resulting in an unchecked cast warning.
-			if (clazz.isAnnotationPresent(classAndMethodContainer.getPluginAnnotationClass())
-					&& classAndMethodContainer.getAbstractFilterPluginClass().isAssignableFrom(clazz)) {
-				result.add((Class<AbstractFilterPlugin>) clazz);
-			}
-		}
-
-		return result;
+		return Collections2.transform(Collections2.filter(Collections2.filter(this.getAllClassesWithinJar(url, classLoader),
+				new IsFilterPredicate(classAndMethodContainer)), new IsNotAbstractPredicate()), new SimpleCastFunction<Class<?>, Class<AbstractFilterPlugin>>());
 	}
 
 	/**
 	 * This method delivers all classes which are available in the given jar.
 	 * 
 	 * @param url
-	 *            The url for the jar.
+	 *            The URL for the jar.
 	 * @param classLoader
-	 *            The classloader which should be used to load the classes.
+	 *            The class loader which should be used to load the classes.
+	 * 
 	 * @return A list containing all available classes or null, if an exception occurred.
+	 * 
 	 * @throws IOException
 	 *             If something went wrong during the opening of the jar file.
 	 */
-	private List<Class<?>> getAllClassesWithinJar(final URL url, final ClassLoader classLoader) throws IOException {
+	private Collection<Class<?>> getAllClassesWithinJar(final URL url, final ClassLoader classLoader) throws IOException {
 		JarInputStream stream = null;
 		try {
 			final List<Class<?>> result = new ArrayList<Class<?>>();
@@ -171,4 +165,85 @@ public class PluginFinder {
 		}
 	}
 
+	/**
+	 * A predicate which can be used to check whether a class is a repository or not.
+	 * 
+	 * @author Nils Christian Ehmke
+	 */
+	private static class IsRepositoryPredicate implements Predicate<Class<?>> {
+
+		private final ClassAndMethodContainer classAndMethodContainer;
+
+		public IsRepositoryPredicate(final ClassAndMethodContainer classAndMethodContainer) {
+			this.classAndMethodContainer = classAndMethodContainer;
+		}
+
+		@Override
+		public boolean apply(@Nullable final Class<?> elem) {
+			return elem.isAnnotationPresent(this.classAndMethodContainer.getRepositoryAnnotationClass())
+					&& this.classAndMethodContainer.getAbstractRepositoryClass().isAssignableFrom(elem);
+		}
+
+	}
+
+	/**
+	 * A predicate which can be used to check whether a class is a reader or not.
+	 * 
+	 * @author Nils Christian Ehmke
+	 */
+	private static class IsReaderPredicate implements Predicate<Class<?>> {
+
+		private final ClassAndMethodContainer classAndMethodContainer;
+
+		public IsReaderPredicate(final ClassAndMethodContainer classAndMethodContainer) {
+			this.classAndMethodContainer = classAndMethodContainer;
+		}
+
+		@Override
+		public boolean apply(@Nullable final Class<?> elem) {
+			return elem.isAnnotationPresent(this.classAndMethodContainer.getPluginAnnotationClass())
+					&& this.classAndMethodContainer.getAbstractReaderPluginClass().isAssignableFrom(elem);
+		}
+
+	}
+
+	/**
+	 * A predicate which can be used to check whether a class is a filter or not.
+	 * 
+	 * @author Nils Christian Ehmke
+	 */
+	private static class IsFilterPredicate implements Predicate<Class<?>> {
+
+		private final ClassAndMethodContainer classAndMethodContainer;
+
+		public IsFilterPredicate(final ClassAndMethodContainer classAndMethodContainer) {
+			this.classAndMethodContainer = classAndMethodContainer;
+		}
+
+		@Override
+		public boolean apply(@Nullable final Class<?> elem) {
+			return elem.isAnnotationPresent(this.classAndMethodContainer.getPluginAnnotationClass())
+					&& this.classAndMethodContainer.getAbstractFilterPluginClass().isAssignableFrom(elem);
+		}
+
+	}
+
+	/**
+	 * A predicate which can be used to check whether a class is abstract or not.
+	 * 
+	 * @author Nils Christian Ehmke
+	 */
+	private static class IsNotAbstractPredicate implements Predicate<Class<?>> {
+
+		public IsNotAbstractPredicate() {
+			// No code necessary
+		}
+
+		@Override
+		public boolean apply(@Nullable final Class<?> elem) {
+			return !Modifier.isAbstract(elem.getModifiers());
+		}
+
+	}
+
 }
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/SimpleCastFunction.java b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/SimpleCastFunction.java
new file mode 100644
index 0000000000000000000000000000000000000000..8d74af1b269457e2ec262f010e7a6f5019bde2e7
--- /dev/null
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/persistence/impl/util/SimpleCastFunction.java
@@ -0,0 +1,49 @@
+/***************************************************************************
+ * Copyright 2013 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.persistence.impl.util;
+
+import javax.annotation.Nullable;
+
+import com.google.common.base.Function;
+
+/**
+ * A function which simply casts from the source type to the target type.
+ * 
+ * @author Nils Christian Ehmke
+ * 
+ * @param <S>
+ *            The source type.
+ * @param <T>
+ *            The target type.
+ */
+public class SimpleCastFunction<S, T> implements Function<S, T> {
+
+	/**
+	 * Default constructor.
+	 */
+	public SimpleCastFunction() {
+		// No code necessary
+	}
+
+	@SuppressWarnings("unchecked")
+	@Override
+	@Nullable
+	public T apply(@Nullable final S elem) {
+		return (T) elem;
+	}
+
+}
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 98b54dd29428278c42f011a55a5cbdd0fabef819..ec59a5855acfaa1985fe3061d23e3ba354e41f62 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/IProjectService.java
@@ -24,8 +24,8 @@ import kieker.analysis.AnalysisController.STATE;
 import kieker.analysis.model.analysisMetaModel.MIProject;
 import kieker.webgui.common.ClassAndMethodContainer;
 import kieker.webgui.common.exception.AnalysisInitializationException;
-import kieker.webgui.common.exception.InvalidAnalysisStateException;
 import kieker.webgui.common.exception.DisplayNotFoundException;
+import kieker.webgui.common.exception.InvalidAnalysisStateException;
 import kieker.webgui.common.exception.NewerProjectException;
 import kieker.webgui.common.exception.ProjectAlreadyExistingException;
 import kieker.webgui.common.exception.ProjectNotExistingException;
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 4667d78ba347aa466afe9d9a8b17c0c4d7ad6305..36d71100c3c580788f0ad75de53a91861b846db8 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
@@ -26,8 +26,8 @@ import kieker.analysis.AnalysisController.STATE;
 import kieker.analysis.model.analysisMetaModel.MIProject;
 import kieker.webgui.common.ClassAndMethodContainer;
 import kieker.webgui.common.exception.AnalysisInitializationException;
-import kieker.webgui.common.exception.InvalidAnalysisStateException;
 import kieker.webgui.common.exception.DisplayNotFoundException;
+import kieker.webgui.common.exception.InvalidAnalysisStateException;
 import kieker.webgui.common.exception.NewerProjectException;
 import kieker.webgui.common.exception.ProjectAlreadyExistingException;
 import kieker.webgui.common.exception.ProjectNotExistingException;
diff --git a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/ACManager.java b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/ACManager.java
index 7b5bb12a770e41b12b49af027ecc6541079edac6..afc376759a357088401959c53e1734872154d197 100644
--- a/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/ACManager.java
+++ b/Kieker.WebGUI/src/main/java/kieker/webgui/service/impl/util/ACManager.java
@@ -20,8 +20,8 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import kieker.analysis.AnalysisController.STATE;
 import kieker.webgui.common.exception.AnalysisInitializationException;
-import kieker.webgui.common.exception.InvalidAnalysisStateException;
 import kieker.webgui.common.exception.DisplayNotFoundException;
+import kieker.webgui.common.exception.InvalidAnalysisStateException;
 import kieker.webgui.common.exception.ProjectNotExistingException;
 import kieker.webgui.persistence.IProjectDAO;
 
diff --git a/Kieker.WebGUI/src/test/java/kieker/webgui/persistence/impl/util/PluginFinderTest.java b/Kieker.WebGUI/src/test/java/kieker/webgui/persistence/impl/util/PluginFinderTest.java
index 958d1d3cb850ce9cacbc49dfe04d849cad98facd..b8de9c4bb2fce4dc481cd16516844e5315a4b3ee 100644
--- a/Kieker.WebGUI/src/test/java/kieker/webgui/persistence/impl/util/PluginFinderTest.java
+++ b/Kieker.WebGUI/src/test/java/kieker/webgui/persistence/impl/util/PluginFinderTest.java
@@ -18,7 +18,7 @@ package kieker.webgui.persistence.impl.util;
 
 import java.io.IOException;
 import java.net.URL;
-import java.util.List;
+import java.util.Collection;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -55,9 +55,9 @@ public class PluginFinderTest {
 		final ClassAndMethodContainer classAndMethodContainer = new ClassAndMethodContainer(classLoader);
 
 		try {
-			final List<Class<AbstractFilterPlugin>> filters = pluginFinder.getAllFiltersWithinJar(kiekerURL, classLoader, classAndMethodContainer);
-			final List<Class<AbstractReaderPlugin>> readers = pluginFinder.getAllReadersWithinJar(kiekerURL, classLoader, classAndMethodContainer);
-			final List<Class<AbstractRepository>> repositories = pluginFinder.getAllRepositoriesWithinJar(kiekerURL, classLoader, classAndMethodContainer);
+			final Collection<Class<AbstractFilterPlugin>> filters = pluginFinder.getAllFiltersWithinJar(kiekerURL, classLoader, classAndMethodContainer);
+			final Collection<Class<AbstractReaderPlugin>> readers = pluginFinder.getAllReadersWithinJar(kiekerURL, classLoader, classAndMethodContainer);
+			final Collection<Class<AbstractRepository>> repositories = pluginFinder.getAllRepositoriesWithinJar(kiekerURL, classLoader, classAndMethodContainer);
 
 			// There should be at least one element of both types
 			Assert.assertFalse("No filters found.", filters.isEmpty());