diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java
index ba752805707fae27d8655346149d09995c59e899..64579b6a63558c7ef429822ac6eb22f8fbf0ea0e 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/AlgorithmTask.java
@@ -39,10 +39,11 @@ import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoResult;
 import de.hhu.ba.yoshikoWrapper.graphModel.YoshikoSolution;
 import de.hhu.ba.yoshikoWrapper.gui.ResultPanel;
 import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
+import de.hhu.ba.yoshikoWrapper.swig.ClusterEditingSolutions;
+import de.hhu.ba.yoshikoWrapper.swig.IntVector;
+import de.hhu.ba.yoshikoWrapper.swig.LibraryInput;
 import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface;
-import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_std__vectorT_int_t;
-import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_yskInput__LibraryInput;
-import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_ysk__ClusterEditingSolutions;
+
 
 public class AlgorithmTask extends AbstractTask {
 	
@@ -66,8 +67,8 @@ public class AlgorithmTask extends AbstractTask {
 	private int numberOfSolutions;
 	
 	//temps, need to be freed in C++
-	private SWIGTYPE_p_yskInput__LibraryInput input;
-	private SWIGTYPE_p_ysk__ClusterEditingSolutions result;
+	private LibraryInput input;
+	private ClusterEditingSolutions result;
 
 	public AlgorithmTask(
 			CyNetwork net,
@@ -131,7 +132,7 @@ public class AlgorithmTask extends AbstractTask {
 		taskMonitor.setProgress(0.2);
 
 		//Set the default value for insertion cost
-		LibraryInterface.LibraryInput_setDefaultInsertionCost(input, insertionCostDefault);
+		input.setDefaultInsertionCost(insertionCostDefault);
 
 		//Call Yoshiko <<< Algorithm is performed here
 		result = LibraryInterface.processLibraryInput(
@@ -147,12 +148,12 @@ public class AlgorithmTask extends AbstractTask {
 		
 		taskMonitor.setProgress(0.9);
 		
-		long numberOfSolutions = LibraryInterface.ClusterEditingSolutions_getNumberOfSolutions(result);
+		long numberOfSolutions = result.getNumberOfSolutions();
 		taskMonitor.setStatusMessage("Found: "+numberOfSolutions+" solutions!"); //TODO localize
 				
 		YoshikoResult yoshikoResult = new YoshikoResult();
 		
-		yoshikoResult.editingCost = LibraryInterface.ClusterEditingSolutions_getTotalCost(result);
+		yoshikoResult.editingCost = result.getTotalCost();
 		
 		//Loop over (multiple) solutions
 		for (long i=0;i<numberOfSolutions;i++) {
@@ -165,7 +166,7 @@ public class AlgorithmTask extends AbstractTask {
 			net.getDefaultNodeTable().createColumn(columnName, String.class, false);
 			
 			//Fetch number of clusters in the solution
-			long numberOfClusters = LibraryInterface.ClusterEditingSolutions_getNumberOfClusters(result, i);
+			long numberOfClusters = result.getNumberOfClusters(i);
 			
 			//Loop over cluster
 			for (long k=0;k<numberOfClusters;k++) {
@@ -175,12 +176,12 @@ public class AlgorithmTask extends AbstractTask {
 				
 				taskMonitor.setStatusMessage("Processing cluster "+(k+1)+" of "+numberOfClusters);
 				
-				SWIGTYPE_p_std__vectorT_int_t clusterVector = LibraryInterface.ClusterEditingSolutions_getCluster(result, i, k);
+				IntVector clusterVector = result.getCluster(i, k);
 				
-				long sizeOfCluster = LibraryInterface.IntVector_size(clusterVector);
+				long sizeOfCluster = clusterVector.size();
 				for (int l=0;l<sizeOfCluster;l++) { //Unsafe mismatch int long
 					taskMonitor.setStatusMessage("Processing entry "+(l+1)+ " of "+sizeOfCluster);
-					int nodeID = LibraryInterface.IntVector_get(clusterVector, l);
+					int nodeID = clusterVector.get(l);
 					CyNode node = nodeMap.indexOf(nodeID); //<<< Another int/long conversion
 					cluster.addNode(node);
 					
@@ -190,15 +191,16 @@ public class AlgorithmTask extends AbstractTask {
 			}
 			yoshikoResult.solutions.add(solution);
 		}
-
-		//At this point the C++ objects can be freed, in case that the algorithm terminates beforehand they need to be cleaned-up elsewhere
-		LibraryInterface.delete_LibraryInput(input);
-		LibraryInterface.delete_ClusterEditingSolutions(result);
+		
 		
 		//Provide some useful info
-		if (LibraryInterface.ClusterEditingSolutions_isTimedOut(result)) {
+		if (result.isTimedOut()) {
 			throw new Exception(LocalizationManager.get("timedOutMessage"));
 		}
+
+		//At this point the C++ objects can be freed, in case that the algorithm terminates beforehand they need to be cleaned-up elsewhere
+		input.delete();
+		result.delete();
 		
 		//Generate solutionsPanel
 		ResultPanel solutionsPanel = new ResultPanel(yoshikoResult);
@@ -217,10 +219,10 @@ public class AlgorithmTask extends AbstractTask {
 	public void cancel() {
 		//Free C++ resources
 		if (input != null) {
-			LibraryInterface.delete_LibraryInput(input);
+			input.delete();
 		}
 		if (result != null) {
-			LibraryInterface.delete_ClusterEditingSolutions(result);
+			result.delete();
 		}
 		super.cancel();
 	}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/CallbackHandler.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CallbackHandler.java
new file mode 100644
index 0000000000000000000000000000000000000000..5a021f57731f64b1cfaee663160e9abe32c09050
--- /dev/null
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/CallbackHandler.java
@@ -0,0 +1,14 @@
+package de.hhu.ba.yoshikoWrapper.core;
+
+import de.hhu.ba.yoshikoWrapper.swig.JavaInformer;
+
+public class CallbackHandler extends JavaInformer {
+	public CallbackHandler() {
+	
+	}
+	
+	@Override
+	public void callback() {
+		
+	}
+}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java
index 22e1a6ad69b1464e03dbbcd789af7b6023144e00..314e0e5df39c9290e773d06d873a34b941914121 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/core/NetworkParser.java
@@ -30,15 +30,15 @@ import org.cytoscape.model.CyRow;
 import org.slf4j.Logger;
 
 import de.hhu.ba.yoshikoWrapper.logging.YoshikoLogger;
+import de.hhu.ba.yoshikoWrapper.swig.LibraryInput;
 import de.hhu.ba.yoshikoWrapper.swig.LibraryInterface;
-import de.hhu.ba.yoshikoWrapper.swig.SWIGTYPE_p_yskInput__LibraryInput;
 
 public class NetworkParser {
 	
 	//Symbolic Links
 	private static Logger logger = YoshikoLogger.getInstance().getLogger();
 
-	public static SWIGTYPE_p_yskInput__LibraryInput parseNetwork(
+	public static LibraryInput parseNetwork(
 			CyNetwork net,
 			NodeMap nodeMap,
 			CyColumn weightColumn,
@@ -48,10 +48,10 @@ public class NetworkParser {
 			) 
 	{
 		//Create an empty instance / fetch C++ object pointer
-		SWIGTYPE_p_yskInput__LibraryInput generatedInput = LibraryInterface.new_LibraryInput();
+		LibraryInput generatedInput = new LibraryInput();
 		if (net != null){
 			//Create an empty full graph with a given size
-			LibraryInterface.LibraryInput_setSize(generatedInput,  net.getNodeCount());
+			generatedInput.setSize(net.getNodeCount());
 			//Fetch edges
 			List<CyEdge> edges = net.getEdgeList();
 			
@@ -98,8 +98,7 @@ public class NetworkParser {
 
 				logger.debug("Found Edge: "+edgeEntry.get("name", String.class)+ " with weight:"+weight);
 				
-				LibraryInterface.LibraryInput_addEdge(
-						generatedInput,
+				generatedInput.addEdge(
 						nodeMap.get(e.getSource()),
 						nodeMap.get(e.getTarget()),
 						weight,
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/ClusterEditingSolutions.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/ClusterEditingSolutions.java
new file mode 100644
index 0000000000000000000000000000000000000000..d68381a64522debb0e654ab76b10310c57459906
--- /dev/null
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/ClusterEditingSolutions.java
@@ -0,0 +1,66 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 3.0.8
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package de.hhu.ba.yoshikoWrapper.swig;
+
+public class ClusterEditingSolutions {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected ClusterEditingSolutions(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(ClusterEditingSolutions obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        LibraryInterfaceJNI.delete_ClusterEditingSolutions(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public ClusterEditingSolutions() {
+    this(LibraryInterfaceJNI.new_ClusterEditingSolutions(), true);
+  }
+
+  public long getNumberOfClusters(long i) {
+    return LibraryInterfaceJNI.ClusterEditingSolutions_getNumberOfClusters(swigCPtr, this, i);
+  }
+
+  public IntVector getCluster(long i, long k) {
+    return new IntVector(LibraryInterfaceJNI.ClusterEditingSolutions_getCluster(swigCPtr, this, i, k), false);
+  }
+
+  public SWIGTYPE_p_std__vectorT_std__vectorT_int_t_t getSolution(long i) {
+    return new SWIGTYPE_p_std__vectorT_std__vectorT_int_t_t(LibraryInterfaceJNI.ClusterEditingSolutions_getSolution(swigCPtr, this, i), false);
+  }
+
+  public long getNumberOfSolutions() {
+    return LibraryInterfaceJNI.ClusterEditingSolutions_getNumberOfSolutions(swigCPtr, this);
+  }
+
+  public double getTotalCost() {
+    return LibraryInterfaceJNI.ClusterEditingSolutions_getTotalCost(swigCPtr, this);
+  }
+
+  public boolean isTimedOut() {
+    return LibraryInterfaceJNI.ClusterEditingSolutions_isTimedOut(swigCPtr, this);
+  }
+
+}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/IntVector.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/IntVector.java
new file mode 100644
index 0000000000000000000000000000000000000000..e894d457075f9ade78a542d20b1990b1a445d38f
--- /dev/null
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/IntVector.java
@@ -0,0 +1,78 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 3.0.8
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package de.hhu.ba.yoshikoWrapper.swig;
+
+public class IntVector {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected IntVector(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(IntVector obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        LibraryInterfaceJNI.delete_IntVector(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public IntVector() {
+    this(LibraryInterfaceJNI.new_IntVector__SWIG_0(), true);
+  }
+
+  public IntVector(long n) {
+    this(LibraryInterfaceJNI.new_IntVector__SWIG_1(n), true);
+  }
+
+  public long size() {
+    return LibraryInterfaceJNI.IntVector_size(swigCPtr, this);
+  }
+
+  public long capacity() {
+    return LibraryInterfaceJNI.IntVector_capacity(swigCPtr, this);
+  }
+
+  public void reserve(long n) {
+    LibraryInterfaceJNI.IntVector_reserve(swigCPtr, this, n);
+  }
+
+  public boolean isEmpty() {
+    return LibraryInterfaceJNI.IntVector_isEmpty(swigCPtr, this);
+  }
+
+  public void clear() {
+    LibraryInterfaceJNI.IntVector_clear(swigCPtr, this);
+  }
+
+  public void add(int x) {
+    LibraryInterfaceJNI.IntVector_add(swigCPtr, this, x);
+  }
+
+  public int get(int i) {
+    return LibraryInterfaceJNI.IntVector_get(swigCPtr, this, i);
+  }
+
+  public void set(int i, int val) {
+    LibraryInterfaceJNI.IntVector_set(swigCPtr, this, i, val);
+  }
+
+}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/JavaInformer.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/JavaInformer.java
new file mode 100644
index 0000000000000000000000000000000000000000..2bdfe0b70a7e7c0b9ed5e27ad066abbec67f2582
--- /dev/null
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/JavaInformer.java
@@ -0,0 +1,62 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 3.0.8
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package de.hhu.ba.yoshikoWrapper.swig;
+
+public class JavaInformer {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected JavaInformer(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(JavaInformer obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        LibraryInterfaceJNI.delete_JavaInformer(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  protected void swigDirectorDisconnect() {
+    swigCMemOwn = false;
+    delete();
+  }
+
+  public void swigReleaseOwnership() {
+    swigCMemOwn = false;
+    LibraryInterfaceJNI.JavaInformer_change_ownership(this, swigCPtr, false);
+  }
+
+  public void swigTakeOwnership() {
+    swigCMemOwn = true;
+    LibraryInterfaceJNI.JavaInformer_change_ownership(this, swigCPtr, true);
+  }
+
+  public void callback() {
+    if (getClass() == JavaInformer.class) LibraryInterfaceJNI.JavaInformer_callback(swigCPtr, this); else LibraryInterfaceJNI.JavaInformer_callbackSwigExplicitJavaInformer(swigCPtr, this);
+  }
+
+  public JavaInformer() {
+    this(LibraryInterfaceJNI.new_JavaInformer(), true);
+    LibraryInterfaceJNI.JavaInformer_director_connect(this, swigCPtr, swigCMemOwn, true);
+  }
+
+}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInput.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInput.java
new file mode 100644
index 0000000000000000000000000000000000000000..a2c4e84c6933e82c13f6ca1f27feba03a50120f0
--- /dev/null
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInput.java
@@ -0,0 +1,58 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 3.0.8
+ *
+ * Do not make changes to this file unless you know what you are doing--modify
+ * the SWIG interface file instead.
+ * ----------------------------------------------------------------------------- */
+
+package de.hhu.ba.yoshikoWrapper.swig;
+
+public class LibraryInput {
+  private transient long swigCPtr;
+  protected transient boolean swigCMemOwn;
+
+  protected LibraryInput(long cPtr, boolean cMemoryOwn) {
+    swigCMemOwn = cMemoryOwn;
+    swigCPtr = cPtr;
+  }
+
+  protected static long getCPtr(LibraryInput obj) {
+    return (obj == null) ? 0 : obj.swigCPtr;
+  }
+
+  protected void finalize() {
+    delete();
+  }
+
+  public synchronized void delete() {
+    if (swigCPtr != 0) {
+      if (swigCMemOwn) {
+        swigCMemOwn = false;
+        LibraryInterfaceJNI.delete_LibraryInput(swigCPtr);
+      }
+      swigCPtr = 0;
+    }
+  }
+
+  public LibraryInput() {
+    this(LibraryInterfaceJNI.new_LibraryInput(), true);
+  }
+
+  public void addEdge(long sourceID, long targetID, double cost) {
+    LibraryInterfaceJNI.LibraryInput_addEdge__SWIG_0(swigCPtr, this, sourceID, targetID, cost);
+  }
+
+  public void addEdge(long sourceID, long targetID, double cost, boolean permanent, boolean forbidden) {
+    LibraryInterfaceJNI.LibraryInput_addEdge__SWIG_1(swigCPtr, this, sourceID, targetID, cost, permanent, forbidden);
+  }
+
+  public void setSize(long id) {
+    LibraryInterfaceJNI.LibraryInput_setSize(swigCPtr, this, id);
+  }
+
+  public void setDefaultInsertionCost(double cost) {
+    LibraryInterfaceJNI.LibraryInput_setDefaultInsertionCost(swigCPtr, this, cost);
+  }
+
+}
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterface.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterface.java
index 273cc979460c49704ffb7d0211ef43252d4784a3..123dbf6c08b0b2ffe0e8a1c7f77c54ccc8e49a89 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterface.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterface.java
@@ -9,117 +9,13 @@
 package de.hhu.ba.yoshikoWrapper.swig;
 
 public class LibraryInterface {
-  public static SWIGTYPE_p_std__vectorT_int_t new_IntVector() {
-    long cPtr = LibraryInterfaceJNI.new_IntVector__SWIG_0();
-    return (cPtr == 0) ? null : new SWIGTYPE_p_std__vectorT_int_t(cPtr, true);
-  }
-
-  public static SWIGTYPE_p_std__vectorT_int_t new_IntVector(long n) {
-    long cPtr = LibraryInterfaceJNI.new_IntVector__SWIG_1(n);
-    return (cPtr == 0) ? null : new SWIGTYPE_p_std__vectorT_int_t(cPtr, true);
-  }
-
-  public static long IntVector_size(SWIGTYPE_p_std__vectorT_int_t self) {
-    return LibraryInterfaceJNI.IntVector_size(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self));
-  }
-
-  public static long IntVector_capacity(SWIGTYPE_p_std__vectorT_int_t self) {
-    return LibraryInterfaceJNI.IntVector_capacity(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self));
-  }
-
-  public static void IntVector_reserve(SWIGTYPE_p_std__vectorT_int_t self, long n) {
-    LibraryInterfaceJNI.IntVector_reserve(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self), n);
-  }
-
-  public static boolean IntVector_isEmpty(SWIGTYPE_p_std__vectorT_int_t self) {
-    return LibraryInterfaceJNI.IntVector_isEmpty(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self));
-  }
-
-  public static void IntVector_clear(SWIGTYPE_p_std__vectorT_int_t self) {
-    LibraryInterfaceJNI.IntVector_clear(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self));
-  }
-
-  public static void IntVector_add(SWIGTYPE_p_std__vectorT_int_t self, int x) {
-    LibraryInterfaceJNI.IntVector_add(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self), x);
-  }
-
-  public static int IntVector_get(SWIGTYPE_p_std__vectorT_int_t self, int i) {
-    return LibraryInterfaceJNI.IntVector_get(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self), i);
-  }
-
-  public static void IntVector_set(SWIGTYPE_p_std__vectorT_int_t self, int i, int val) {
-    LibraryInterfaceJNI.IntVector_set(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self), i, val);
-  }
-
-  public static void delete_IntVector(SWIGTYPE_p_std__vectorT_int_t self) {
-    LibraryInterfaceJNI.delete_IntVector(SWIGTYPE_p_std__vectorT_int_t.getCPtr(self));
-  }
-
-  public static SWIGTYPE_p_ysk__ClusterEditingSolutions new_ClusterEditingSolutions() {
-    long cPtr = LibraryInterfaceJNI.new_ClusterEditingSolutions();
-    return (cPtr == 0) ? null : new SWIGTYPE_p_ysk__ClusterEditingSolutions(cPtr, true);
-  }
-
-  public static long ClusterEditingSolutions_getNumberOfClusters(SWIGTYPE_p_ysk__ClusterEditingSolutions self, long i) {
-    return LibraryInterfaceJNI.ClusterEditingSolutions_getNumberOfClusters(SWIGTYPE_p_ysk__ClusterEditingSolutions.getCPtr(self), i);
-  }
-
-  public static SWIGTYPE_p_std__vectorT_int_t ClusterEditingSolutions_getCluster(SWIGTYPE_p_ysk__ClusterEditingSolutions self, long i, long k) {
-    return new SWIGTYPE_p_std__vectorT_int_t(LibraryInterfaceJNI.ClusterEditingSolutions_getCluster(SWIGTYPE_p_ysk__ClusterEditingSolutions.getCPtr(self), i, k), false);
-  }
-
-  public static SWIGTYPE_p_std__vectorT_std__vectorT_int_t_t ClusterEditingSolutions_getSolution(SWIGTYPE_p_ysk__ClusterEditingSolutions self, long i) {
-    return new SWIGTYPE_p_std__vectorT_std__vectorT_int_t_t(LibraryInterfaceJNI.ClusterEditingSolutions_getSolution(SWIGTYPE_p_ysk__ClusterEditingSolutions.getCPtr(self), i), false);
-  }
-
-  public static long ClusterEditingSolutions_getNumberOfSolutions(SWIGTYPE_p_ysk__ClusterEditingSolutions self) {
-    return LibraryInterfaceJNI.ClusterEditingSolutions_getNumberOfSolutions(SWIGTYPE_p_ysk__ClusterEditingSolutions.getCPtr(self));
-  }
-
-  public static double ClusterEditingSolutions_getTotalCost(SWIGTYPE_p_ysk__ClusterEditingSolutions self) {
-    return LibraryInterfaceJNI.ClusterEditingSolutions_getTotalCost(SWIGTYPE_p_ysk__ClusterEditingSolutions.getCPtr(self));
-  }
-
-  public static boolean ClusterEditingSolutions_isTimedOut(SWIGTYPE_p_ysk__ClusterEditingSolutions self) {
-    return LibraryInterfaceJNI.ClusterEditingSolutions_isTimedOut(SWIGTYPE_p_ysk__ClusterEditingSolutions.getCPtr(self));
-  }
-
-  public static void delete_ClusterEditingSolutions(SWIGTYPE_p_ysk__ClusterEditingSolutions self) {
-    LibraryInterfaceJNI.delete_ClusterEditingSolutions(SWIGTYPE_p_ysk__ClusterEditingSolutions.getCPtr(self));
-  }
-
-  public static SWIGTYPE_p_yskInput__LibraryInput new_LibraryInput() {
-    long cPtr = LibraryInterfaceJNI.new_LibraryInput();
-    return (cPtr == 0) ? null : new SWIGTYPE_p_yskInput__LibraryInput(cPtr, true);
-  }
-
-  public static void delete_LibraryInput(SWIGTYPE_p_yskInput__LibraryInput self) {
-    LibraryInterfaceJNI.delete_LibraryInput(SWIGTYPE_p_yskInput__LibraryInput.getCPtr(self));
-  }
-
-  public static void LibraryInput_addEdge(SWIGTYPE_p_yskInput__LibraryInput self, long sourceID, long targetID, double cost) {
-    LibraryInterfaceJNI.LibraryInput_addEdge__SWIG_0(SWIGTYPE_p_yskInput__LibraryInput.getCPtr(self), sourceID, targetID, cost);
-  }
-
-  public static void LibraryInput_addEdge(SWIGTYPE_p_yskInput__LibraryInput self, long sourceID, long targetID, double cost, boolean permanent, boolean forbidden) {
-    LibraryInterfaceJNI.LibraryInput_addEdge__SWIG_1(SWIGTYPE_p_yskInput__LibraryInput.getCPtr(self), sourceID, targetID, cost, permanent, forbidden);
-  }
-
-  public static void LibraryInput_setSize(SWIGTYPE_p_yskInput__LibraryInput self, long id) {
-    LibraryInterfaceJNI.LibraryInput_setSize(SWIGTYPE_p_yskInput__LibraryInput.getCPtr(self), id);
-  }
-
-  public static void LibraryInput_setDefaultInsertionCost(SWIGTYPE_p_yskInput__LibraryInput self, double cost) {
-    LibraryInterfaceJNI.LibraryInput_setDefaultInsertionCost(SWIGTYPE_p_yskInput__LibraryInput.getCPtr(self), cost);
-  }
-
   public static String getVersionString() {
     return LibraryInterfaceJNI.getVersionString();
   }
 
-  public static SWIGTYPE_p_ysk__ClusterEditingSolutions processLibraryInput(SWIGTYPE_p_yskInput__LibraryInput libIn, int nrOptimalSolutions, String rulesBitMask, double multiplicativeFactor, boolean separatePartitionCuts, boolean separateTriangles, boolean useHeuristic) {
-    long cPtr = LibraryInterfaceJNI.processLibraryInput(SWIGTYPE_p_yskInput__LibraryInput.getCPtr(libIn), nrOptimalSolutions, rulesBitMask, multiplicativeFactor, separatePartitionCuts, separateTriangles, useHeuristic);
-    return (cPtr == 0) ? null : new SWIGTYPE_p_ysk__ClusterEditingSolutions(cPtr, false);
+  public static ClusterEditingSolutions processLibraryInput(LibraryInput libIn, int nrOptimalSolutions, String rulesBitMask, double multiplicativeFactor, boolean separatePartitionCuts, boolean separateTriangles, boolean useHeuristic) {
+    long cPtr = LibraryInterfaceJNI.processLibraryInput(LibraryInput.getCPtr(libIn), libIn, nrOptimalSolutions, rulesBitMask, multiplicativeFactor, separatePartitionCuts, separateTriangles, useHeuristic);
+    return (cPtr == 0) ? null : new ClusterEditingSolutions(cPtr, false);
   }
 
   public static void setTimeLimit(int limit) {
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java
index 3870b0dfd89e4d6cec054fc751ee142f32ce7182..1b4f46deb2fe6d654e5f3ae7c7c042a456989714 100644
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java
+++ b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/LibraryInterfaceJNI.java
@@ -11,31 +11,46 @@ package de.hhu.ba.yoshikoWrapper.swig;
 public class LibraryInterfaceJNI {
   public final static native long new_IntVector__SWIG_0();
   public final static native long new_IntVector__SWIG_1(long jarg1);
-  public final static native long IntVector_size(long jarg1);
-  public final static native long IntVector_capacity(long jarg1);
-  public final static native void IntVector_reserve(long jarg1, long jarg2);
-  public final static native boolean IntVector_isEmpty(long jarg1);
-  public final static native void IntVector_clear(long jarg1);
-  public final static native void IntVector_add(long jarg1, int jarg2);
-  public final static native int IntVector_get(long jarg1, int jarg2);
-  public final static native void IntVector_set(long jarg1, int jarg2, int jarg3);
+  public final static native long IntVector_size(long jarg1, IntVector jarg1_);
+  public final static native long IntVector_capacity(long jarg1, IntVector jarg1_);
+  public final static native void IntVector_reserve(long jarg1, IntVector jarg1_, long jarg2);
+  public final static native boolean IntVector_isEmpty(long jarg1, IntVector jarg1_);
+  public final static native void IntVector_clear(long jarg1, IntVector jarg1_);
+  public final static native void IntVector_add(long jarg1, IntVector jarg1_, int jarg2);
+  public final static native int IntVector_get(long jarg1, IntVector jarg1_, int jarg2);
+  public final static native void IntVector_set(long jarg1, IntVector jarg1_, int jarg2, int jarg3);
   public final static native void delete_IntVector(long jarg1);
   public final static native long new_ClusterEditingSolutions();
-  public final static native long ClusterEditingSolutions_getNumberOfClusters(long jarg1, long jarg2);
-  public final static native long ClusterEditingSolutions_getCluster(long jarg1, long jarg2, long jarg3);
-  public final static native long ClusterEditingSolutions_getSolution(long jarg1, long jarg2);
-  public final static native long ClusterEditingSolutions_getNumberOfSolutions(long jarg1);
-  public final static native double ClusterEditingSolutions_getTotalCost(long jarg1);
-  public final static native boolean ClusterEditingSolutions_isTimedOut(long jarg1);
+  public final static native long ClusterEditingSolutions_getNumberOfClusters(long jarg1, ClusterEditingSolutions jarg1_, long jarg2);
+  public final static native long ClusterEditingSolutions_getCluster(long jarg1, ClusterEditingSolutions jarg1_, long jarg2, long jarg3);
+  public final static native long ClusterEditingSolutions_getSolution(long jarg1, ClusterEditingSolutions jarg1_, long jarg2);
+  public final static native long ClusterEditingSolutions_getNumberOfSolutions(long jarg1, ClusterEditingSolutions jarg1_);
+  public final static native double ClusterEditingSolutions_getTotalCost(long jarg1, ClusterEditingSolutions jarg1_);
+  public final static native boolean ClusterEditingSolutions_isTimedOut(long jarg1, ClusterEditingSolutions jarg1_);
   public final static native void delete_ClusterEditingSolutions(long jarg1);
   public final static native long new_LibraryInput();
   public final static native void delete_LibraryInput(long jarg1);
-  public final static native void LibraryInput_addEdge__SWIG_0(long jarg1, long jarg2, long jarg3, double jarg4);
-  public final static native void LibraryInput_addEdge__SWIG_1(long jarg1, long jarg2, long jarg3, double jarg4, boolean jarg5, boolean jarg6);
-  public final static native void LibraryInput_setSize(long jarg1, long jarg2);
-  public final static native void LibraryInput_setDefaultInsertionCost(long jarg1, double jarg2);
+  public final static native void LibraryInput_addEdge__SWIG_0(long jarg1, LibraryInput jarg1_, long jarg2, long jarg3, double jarg4);
+  public final static native void LibraryInput_addEdge__SWIG_1(long jarg1, LibraryInput jarg1_, long jarg2, long jarg3, double jarg4, boolean jarg5, boolean jarg6);
+  public final static native void LibraryInput_setSize(long jarg1, LibraryInput jarg1_, long jarg2);
+  public final static native void LibraryInput_setDefaultInsertionCost(long jarg1, LibraryInput jarg1_, double jarg2);
+  public final static native void JavaInformer_callback(long jarg1, JavaInformer jarg1_);
+  public final static native void JavaInformer_callbackSwigExplicitJavaInformer(long jarg1, JavaInformer jarg1_);
+  public final static native void delete_JavaInformer(long jarg1);
+  public final static native long new_JavaInformer();
+  public final static native void JavaInformer_director_connect(JavaInformer obj, long cptr, boolean mem_own, boolean weak_global);
+  public final static native void JavaInformer_change_ownership(JavaInformer obj, long cptr, boolean take_or_release);
   public final static native String getVersionString();
-  public final static native long processLibraryInput(long jarg1, int jarg2, String jarg3, double jarg4, boolean jarg5, boolean jarg6, boolean jarg7);
+  public final static native long processLibraryInput(long jarg1, LibraryInput jarg1_, int jarg2, String jarg3, double jarg4, boolean jarg5, boolean jarg6, boolean jarg7);
   public final static native void setTimeLimit(int jarg1);
   public final static native void setVerbosity(int jarg1);
+
+  public static void SwigDirector_JavaInformer_callback(JavaInformer jself) {
+    jself.callback();
+  }
+
+  private final static native void swig_module_init();
+  static {
+    swig_module_init();
+  }
 }
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_std__vectorT_int_t.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_std__vectorT_int_t.java
deleted file mode 100644
index f7a734ecb7d647fa23613325df98a37e49030768..0000000000000000000000000000000000000000
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_std__vectorT_int_t.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ----------------------------------------------------------------------------
- * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 3.0.8
- *
- * Do not make changes to this file unless you know what you are doing--modify
- * the SWIG interface file instead.
- * ----------------------------------------------------------------------------- */
-
-package de.hhu.ba.yoshikoWrapper.swig;
-
-public class SWIGTYPE_p_std__vectorT_int_t {
-  private transient long swigCPtr;
-
-  protected SWIGTYPE_p_std__vectorT_int_t(long cPtr, @SuppressWarnings("unused") boolean futureUse) {
-    swigCPtr = cPtr;
-  }
-
-  protected SWIGTYPE_p_std__vectorT_int_t() {
-    swigCPtr = 0;
-  }
-
-  protected static long getCPtr(SWIGTYPE_p_std__vectorT_int_t obj) {
-    return (obj == null) ? 0 : obj.swigCPtr;
-  }
-}
-
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_yskInput__LibraryInput.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_yskInput__LibraryInput.java
deleted file mode 100644
index 40ef62bf241b0c432ffbe457a5bb7681289c1bdc..0000000000000000000000000000000000000000
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_yskInput__LibraryInput.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ----------------------------------------------------------------------------
- * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 3.0.8
- *
- * Do not make changes to this file unless you know what you are doing--modify
- * the SWIG interface file instead.
- * ----------------------------------------------------------------------------- */
-
-package de.hhu.ba.yoshikoWrapper.swig;
-
-public class SWIGTYPE_p_yskInput__LibraryInput {
-  private transient long swigCPtr;
-
-  protected SWIGTYPE_p_yskInput__LibraryInput(long cPtr, @SuppressWarnings("unused") boolean futureUse) {
-    swigCPtr = cPtr;
-  }
-
-  protected SWIGTYPE_p_yskInput__LibraryInput() {
-    swigCPtr = 0;
-  }
-
-  protected static long getCPtr(SWIGTYPE_p_yskInput__LibraryInput obj) {
-    return (obj == null) ? 0 : obj.swigCPtr;
-  }
-}
-
diff --git a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_ysk__ClusterEditingSolutions.java b/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_ysk__ClusterEditingSolutions.java
deleted file mode 100644
index 6a12b664aee7e8bfd1eb91396042892997ee41e6..0000000000000000000000000000000000000000
--- a/src/main/java/de/hhu/ba/yoshikoWrapper/swig/SWIGTYPE_p_ysk__ClusterEditingSolutions.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ----------------------------------------------------------------------------
- * This file was automatically generated by SWIG (http://www.swig.org).
- * Version 3.0.8
- *
- * Do not make changes to this file unless you know what you are doing--modify
- * the SWIG interface file instead.
- * ----------------------------------------------------------------------------- */
-
-package de.hhu.ba.yoshikoWrapper.swig;
-
-public class SWIGTYPE_p_ysk__ClusterEditingSolutions {
-  private transient long swigCPtr;
-
-  protected SWIGTYPE_p_ysk__ClusterEditingSolutions(long cPtr, @SuppressWarnings("unused") boolean futureUse) {
-    swigCPtr = cPtr;
-  }
-
-  protected SWIGTYPE_p_ysk__ClusterEditingSolutions() {
-    swigCPtr = 0;
-  }
-
-  protected static long getCPtr(SWIGTYPE_p_ysk__ClusterEditingSolutions obj) {
-    return (obj == null) ? 0 : obj.swigCPtr;
-  }
-}
-