diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings
index 667938f7a0e30e09c7a8a2d1c89e66c153a5d687..ef7217931b5809b512a32ff648f8a81442c0f29c 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/.ratings
@@ -1,5 +1,5 @@
 ComposableDecoder.java 197abec80b880e25fccfc66d61b471b0b5d7e10f RED
-ComposableDecoderBase.java 4f366cc6c0f8ca929cac43d9c5de675cbafbb132 RED
+ComposableDecoderBase.java 9b6114516ea001aeceb00f894d61336994097465 RED
 CompositeDecoder.java 9d34dd0b342e6433ab894974f9430531ce2de39a RED
 CompositeDecoderBase.java 1bc1860ed616010f7f459ed6579989f155f607c2 RED
 PhenotypeDecoder.java 44079e8545aaf8b8729919f0b07c774c3ca0df06 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ComposableDecoderBase.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ComposableDecoderBase.java
index 4be18aaa2c39ace40900d48e544fc06c783583ed..d874eac41ce82381878f16d19e9b117b963b1e63 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ComposableDecoderBase.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/extensions/compositegene/decode/ComposableDecoderBase.java
@@ -15,9 +15,14 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.decode;
 
+import java.util.Collection;
+import java.util.Collections;
+
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.genotype.ComposableGenotype;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegene.phenotype.ComposablePhenotype;
 
+import com.google.common.reflect.TypeToken;
+
 /**
  * Base class for {@link ComposableDecoder}s.
  * 
@@ -25,12 +30,35 @@ import org.fortiss.af3.exploration.alg.dse.backend.opt4j.extensions.compositegen
  */
 public abstract class ComposableDecoderBase<G extends ComposableGenotype, P extends ComposablePhenotype<?>>
 		implements ComposableDecoder<G, P> {
+	/** Type information: Concrete input genotype of the decoder. */
+	private TypeToken<G> genotype = new TypeToken<G>(getClass()) { // Empty class
+	};
+	/** Type information: Concrete input phenotype of the decoder. */
+	private TypeToken<P> phenotype = new TypeToken<P>(getClass()) { // Empty class
+	};
+
+	/** {@inheritDoc} */
+	@Override
+	public Class<?> getPrimaryInputType() {
+		if(genotype.getType() instanceof Class) {
+			return (Class<?>)genotype.getType();
+		}
+		return genotype.getRawType();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Collection<Class<?>> getOptionalTypes() {
+		return Collections.emptySet();
+	}
 
-	// TODO: implement the following method here: The class hierarchy must be traversed. Then, also
-	// the interface (ComposableDecoder) can be specialized to Class<P>.
-	// public Class<P> getDecodedPhenotypeType() {
-	// TypeVariable<?>[] genericTypes = ExplorationUtils.get;
-	// assert (genericTypes.length == 2);
-	// return (Class<P>)genericTypes[1].getClass();
-	// }
+	/** {@inheritDoc} */
+	@SuppressWarnings("unchecked")
+	@Override
+	public Class<? super P> getOutputType() {
+		if(genotype.getType() instanceof Class) {
+			return (Class<? super P>)phenotype.getType();
+		}
+		return null;
+	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
index fef09303b7322b35a54115be91105ff982fb57d1..e73620a3b1fdc59387c2f9248150c90bc949a7f0 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/.ratings
@@ -1 +1 @@
-MessageDecoder.java 155958e769b3ddb18deac0d2ff595977f5252192 RED
+MessageDecoder.java 4ad8b9325ad1032437426c5f1636448b54b7883c RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
index 7ef5faf523fd3a8e496ce58043b830c1b7f041c7..78eda9938a9d176f0e69bcffd4bbec28049db93d 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/comm/MessageDecoder.java
@@ -17,7 +17,6 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.comm;
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Map;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.comm.MessageEncoding;
@@ -131,12 +130,6 @@ public class MessageDecoder<S extends TaskMappingEntry<ITaskAdapter<?>, Partitio
 		return reqTypes;
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		return Collections.emptySet();
-	}
-
 	/** {@inheritDoc} */
 	@SuppressWarnings("rawtypes")
 	@Override
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings
index efe3ea0143774a01236e60e6770e934ea799c7e6..a70ad05103136af42e8bf8454b9706a1fa36148d 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/.ratings
@@ -1,2 +1,2 @@
-PartitionMappingDecoderGraph.java d164596ac52b41fbe7be9b926418a5cbf53edb08 RED
-PartitionMappingIdentityDecoder.java e1a56b26ca22e952b8c965f79ff748f48da3407c RED
+PartitionMappingDecoderGraph.java 4541c30721d8898a269320fbf5bbc65627548160 RED
+PartitionMappingIdentityDecoder.java 45a0f3748f01beb741390d564a707f19cf3fd2b6 RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java
index eef9693bd5f05fb3aa8d7bfb870ad5f34e6ba75e..73645b119904fb34c8a1136a7603af8830a94778 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingDecoderGraph.java
@@ -111,23 +111,4 @@ public class PartitionMappingDecoderGraph extends
 		reqTypes.add(PartitionMappingEncoding.class);
 		return reqTypes;
 	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		Collection<Class<?>> optTypes = new ArrayList<>();
-		return optTypes;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<PlatformCommunicationGraphEncoding> getOutputType() {
-		return PlatformCommunicationGraphEncoding.class;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<?> getPrimaryInputType() {
-		return PlatformCommunicationGraphEncoding.class;
-	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java
index dcdd804f5be4dcd62cedcd3f97d97a01546f2b5c..964e0e992dd33aeec4ed55a83d9c6c6f7883a7a0 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/partitionmapping/PartitionMappingIdentityDecoder.java
@@ -60,16 +60,4 @@ public class PartitionMappingIdentityDecoder
 		optTypes.add(PartitionMappingEncoding.class);
 		return optTypes;
 	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<PartitionMappingEncoding> getOutputType() {
-		return PartitionMappingEncoding.class;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<?> getPrimaryInputType() {
-		return PartitionMappingEncoding.class;
-	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings
index 5449de7c96686a70c22c13adb08e418a1e029dd0..400accbb7b2166e7c12645174a70365c11f23864 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/.ratings
@@ -1,4 +1,4 @@
-SFEncodingDecoder.java 8e1594c92aa5e0c23d07038bb63db5b483c4f727 RED
-SFGraphDecoder.java 833d6662ea99c8c7b92ba229c117f200a0300667 RED
-SFMappingConstraintDecoder.java b347e65e6b805103e133386ef76c2297a829559a RED
-SFMappingDecoder.java ec3d91b8cacb5743517d87a1c9eed347549d8acc RED
+SFEncodingDecoder.java ed80fb718ebef561d42610709820852ff777d609 RED
+SFGraphDecoder.java 5b6a65e02f9132348a5051b431581a32fe14046e RED
+SFMappingConstraintDecoder.java 3fe95f631eb32d8f1757dba46a2c93be3e04f5af RED
+SFMappingDecoder.java b3985407125fe2e36882385aff269b0dc46689cd RED
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java
index e4ada07b638432130b8e03cb7d858e856868356e..d8f81ab1b48cb3b437a05473b6ba5ca86191c8d4 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFEncodingDecoder.java
@@ -70,13 +70,6 @@ public class SFEncodingDecoder<C>
 		return reqTypes;
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		Collection<Class<?>> optTypes = new ArrayList<>();
-		return optTypes;
-	}
-
 	/** {@inheritDoc} */
 	@SuppressWarnings("unchecked")
 	@Override
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java
index ac5f05de994a6f42eadaade36b87e99575384963..82c9b536a526e0e2b23d35a64124e622e5eedd5a 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFGraphDecoder.java
@@ -17,7 +17,6 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEntry;
@@ -155,12 +154,6 @@ public class SFGraphDecoder<C>
 		return reqTypes;
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		return Collections.emptySet();
-	}
-
 	/** {@inheritDoc} */
 	@SuppressWarnings("rawtypes")
 	@Override
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java
index 9d4b0183aea2fa789359a1d3344979df9e61dadf..69b46dc6184f316102df770ebad3814361db6d11 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingConstraintDecoder.java
@@ -17,7 +17,6 @@ package org.fortiss.af3.exploration.alg.dse.backend.opt4j.problem.safetyfunction
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 
 import org.fortiss.af3.exploration.alg.dse.backend.opt4j.encoding.safetyfunctionarch.SafetyFunctionArchEncoding;
@@ -112,21 +111,9 @@ public class SFMappingConstraintDecoder<C>
 		return requiredTypes;
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		return Collections.emptySet();
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<? super AbstractTaskMappingEncoding> getOutputType() {
-		return AbstractTaskMappingEncoding.class;
-	}
-
 	/** {@inheritDoc} */
 	@Override
 	public Class<?> getPrimaryInputType() {
-		return AbstractTaskMappingEncoding.class;
+		return SafetyFunctionArchEncoding.class;
 	}
 }
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java
index cdea51a4fcc67631c7206f0f31226b3f57bbffd6..0fe8c6aad79085a5be5ead4c38b21e06095944a9 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/safetyfunction/SFMappingDecoder.java
@@ -20,7 +20,6 @@ import static org.fortiss.tooling.common.util.LambdaUtils.getFirst;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -273,18 +272,6 @@ public class SFMappingDecoder<C>
 		return reqTypes;
 	}
 
-	/** {@inheritDoc} */
-	@Override
-	public Collection<Class<?>> getOptionalTypes() {
-		return Collections.emptySet();
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<AbstractTaskMappingEncoding> getOutputType() {
-		return AbstractTaskMappingEncoding.class;
-	}
-
 	/** {@inheritDoc} */
 	@Override
 	public Class<?> getPrimaryInputType() {
diff --git a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java
index 0a40b2dbf9b21c13022894c49b3bde0ba67d2934..fe8b789f3a0185585a90cf1882fd3983453b4a0d 100644
--- a/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java
+++ b/org.fortiss.af3.exploration.alg/trunk/src/org/fortiss/af3/exploration/alg/dse/backend/opt4j/problem/taskmapping/instantiate/TaskInstanceResourceAlignmentDecoder.java
@@ -72,17 +72,4 @@ public class TaskInstanceResourceAlignmentDecoder extends
 		Collection<Class<?>> optTypes = new ArrayList<>();
 		return optTypes;
 	}
-
-	/** {@inheritDoc} */
-	@SuppressWarnings("rawtypes")
-	@Override
-	public Class<InstantiatedTaskMappingEncoding> getOutputType() {
-		return InstantiatedTaskMappingEncoding.class;
-	}
-
-	/** {@inheritDoc} */
-	@Override
-	public Class<?> getPrimaryInputType() {
-		return InstantiatedTaskMappingEncoding.class;
-	}
 }