diff --git a/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF b/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
index 2051273..37435bf 100644
--- a/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.capra.generic.persistence/META-INF/MANIFEST.MF
@@ -11,4 +11,5 @@
  org.eclipse.capra.core
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.capra.generic.persistance
+Import-Package: org.slf4j
 Automatic-Module-Name: org.eclipse.capra.generic.persistence
diff --git a/bundles/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java b/bundles/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java
index 80ea702..970ccb9 100644
--- a/bundles/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java
+++ b/bundles/org.eclipse.capra.generic.persistence/src/org/eclipse/capra/generic/persistance/TracePersistenceAdapter.java
@@ -29,6 +29,8 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * This generic implementation of
@@ -38,6 +40,8 @@
  */
 public class TracePersistenceAdapter implements org.eclipse.capra.core.adapters.TracePersistenceAdapter {
 
+	private static final Logger LOG = LoggerFactory.getLogger(TracePersistenceAdapter.class);
+
 	private static final String DEFAULT_PROJECT_NAME = "__WorkspaceTraceModels";
 	private static final String DEFAULT_TRACE_MODEL_NAME = "traceModel.xmi";
 	private static final String DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME = "artifactWrappers.xmi";
@@ -51,7 +55,7 @@
 
 				return Optional.of(resource.getContents().get(0));
 			} catch (IOException e) {
-				e.printStackTrace();
+				LOG.error("Could not load model", e);
 			}
 		}
 		return Optional.empty();
@@ -59,7 +63,7 @@
 
 	@Override
 	public EObject getTraceModel(ResourceSet resourceSet) {
-		TraceMetaModelAdapter adapter = ExtensionPointHelper.getTraceMetamodelAdapter().get();
+		TraceMetaModelAdapter adapter = ExtensionPointHelper.getTraceMetamodelAdapter().orElseThrow();
 		return loadModel(resourceSet, DEFAULT_TRACE_MODEL_NAME).orElse(adapter.createModel());
 	}
 
@@ -99,14 +103,13 @@
 			resourceForArtifacts.save(null);
 			resource.save(null);
 		} catch (Exception e) {
-			System.err.println("Unable to save trace model!");
-			e.printStackTrace();
+			LOG.error("Unable to save trace model!", e);
 		}
 	}
 
 	@Override
 	public EObject getArtifactWrappers(ResourceSet resourceSet) {
-		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().get();
+		ArtifactMetaModelAdapter adapter = ExtensionPointHelper.getArtifactWrapperMetaModelAdapter().orElseThrow();
 		return loadModel(resourceSet, DEFAULT_ARTIFACT_WRAPPER_MODEL_NAME).orElse(adapter.createModel());
 	}
 
diff --git a/bundles/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java b/bundles/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java
index 859b705..fc76d14 100644
--- a/bundles/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java
+++ b/bundles/org.eclipse.capra.generic.priority/src/org/eclipse/capra/generic/priority/DefaultPriorityHandler.java
@@ -31,7 +31,7 @@
 	public <T> IArtifactHandler<? extends T> getSelectedHandler(
 			Collection<? extends IArtifactHandler<? extends T>> handlers, Object artifact) {
 		return handlers.stream().filter(handler -> handler.canHandleArtifact(artifact))
-				.max(new ArtifactHandlerPriorityComparator()).get();
+				.max(new ArtifactHandlerPriorityComparator()).orElseThrow();
 	}
 
 	/**
diff --git a/bundles/org.eclipse.capra.generic.tracemodel/src/org/eclipse/capra/generic/tracemodel/GenericMetaModelAdapter.java b/bundles/org.eclipse.capra.generic.tracemodel/src/org/eclipse/capra/generic/tracemodel/GenericMetaModelAdapter.java
index 56ea5d7..f7c6624 100644
--- a/bundles/org.eclipse.capra.generic.tracemodel/src/org/eclipse/capra/generic/tracemodel/GenericMetaModelAdapter.java
+++ b/bundles/org.eclipse.capra.generic.tracemodel/src/org/eclipse/capra/generic/tracemodel/GenericMetaModelAdapter.java
@@ -28,16 +28,12 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.emf.ecore.util.EcoreUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Provides generic functionality to deal with traceability meta models.
  */
 public class GenericMetaModelAdapter extends AbstractMetaModelAdapter implements TraceMetaModelAdapter {
 
-	private static final Logger LOG = LoggerFactory.getLogger(GenericMetaModelAdapter.class);
-
 	private static final int DEFAULT_INITIAL_TRANSITIVITY_DEPTH = 1;
 
 	public GenericMetaModelAdapter() {
@@ -64,7 +60,7 @@
 		EObject trace = TracemodelFactory.eINSTANCE.create(traceType);
 		RelatedTo relatedToTrace = (RelatedTo) trace;
 		relatedToTrace.getItem().addAll(selection);
-		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+		TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().orElseThrow();
 		EObject artifactModel = persistenceAdapter.getArtifactWrappers(new ResourceSetImpl());
 		ArtifactHelper artifactHelper = new ArtifactHelper(artifactModel);
 
@@ -74,7 +70,7 @@
 		StringBuilder name = new StringBuilder();
 		for (Object obj : selection) {
 			name.append(" ")
-					.append(artifactHelper.getHandler(artifactHelper.unwrapWrapper(obj)).get()
+					.append(artifactHelper.getHandler(artifactHelper.unwrapWrapper(obj)).orElseThrow()
 							.withCastedHandler(artifactHelper.unwrapWrapper(obj), (h, e) -> h.getDisplayName(e))
 							.orElseGet(obj::toString));
 		}
@@ -86,18 +82,16 @@
 	@Override
 	public boolean isThereATraceBetween(EObject firstElement, EObject secondElement, EObject traceModel) {
 		GenericTraceModel root = (GenericTraceModel) traceModel;
-		List<RelatedTo> relevantLinks = new ArrayList<RelatedTo>();
+		List<RelatedTo> relevantLinks = new ArrayList<>();
 		List<RelatedTo> allTraces = root.getTraces();
 
 		for (RelatedTo trace : allTraces) {
-			if (!firstElement.equals(secondElement)) {
-				if (EMFHelper.isElementInList(trace.getItem(), firstElement)
-						&& EMFHelper.isElementInList(trace.getItem(), secondElement)) {
-					relevantLinks.add(trace);
-				}
+			if (!firstElement.equals(secondElement) && EMFHelper.isElementInList(trace.getItem(), firstElement)
+					&& EMFHelper.isElementInList(trace.getItem(), secondElement)) {
+				relevantLinks.add(trace);
 			}
 		}
-		return relevantLinks.size() > 0;
+		return !relevantLinks.isEmpty();
 	}
 
 	@Override
@@ -128,7 +122,7 @@
 		List<Connection> connections = new ArrayList<>();
 		List<RelatedTo> traces = root.getTraces();
 
-		if (selectedRelationshipTypes.size() == 0
+		if (selectedRelationshipTypes.isEmpty()
 				|| selectedRelationshipTypes.contains(TracemodelPackage.eINSTANCE.getRelatedTo().getName())) {
 			if (element instanceof RelatedTo) {
 				RelatedTo trace = (RelatedTo) element;
@@ -205,7 +199,8 @@
 				tModel.getTraces().remove(trace);
 			}
 
-			TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter().get();
+			TracePersistenceAdapter persistenceAdapter = ExtensionPointHelper.getTracePersistenceAdapter()
+					.orElseThrow();
 			persistenceAdapter.saveTracesAndArtifacts(tModel,
 					persistenceAdapter.getArtifactWrappers(new ResourceSetImpl()));
 		}
