Index: /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/coverage/CoverageCalculator.java
===================================================================
--- /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/coverage/CoverageCalculator.java	(revision 92)
+++ /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/coverage/CoverageCalculator.java	(revision 93)
@@ -1,6 +1,4 @@
 package de.ugoe.cs.eventbench.coverage;
 
-import java.security.InvalidParameterException;
-import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
@@ -16,13 +14,13 @@
 	
 	private final IStochasticProcess process;
-	private final List<List<Event<?>>> sequences;
+	private final List<List<? extends Event<?>>> sequences;
 	private final int length;
 	
-	private Set<List<Event<?>>> containedSubSeqs = null;
-	private Set<List<Event<?>>> allPossibleSubSeqs = null;
-	private Map<List<Event<?>>, Double> subSeqWeights = null;
+	private Set<List<? extends Event<?>>> containedSubSeqs = null;
+	private Set<List<? extends Event<?>>> allPossibleSubSeqs = null;
+	private Map<List<? extends Event<?>>, Double> subSeqWeights = null;
 	
 	
-	public CoverageCalculator(IStochasticProcess process, List<List<Event<?>>> sequences, int length) {
+	public CoverageCalculator(IStochasticProcess process, List<List<? extends Event<?>>> sequences, int length) {
 		this.process = process;
 		this.sequences = sequences;
@@ -43,5 +41,5 @@
 		}
 		if( allPossibleSubSeqs==null ) {
-			allPossibleSubSeqs = generateSubSequences(process, length);
+			allPossibleSubSeqs = process.generateSequences(length);
 		}
 		return((double) containedSubSeqs.size())/allPossibleSubSeqs.size();
@@ -53,5 +51,5 @@
 		}
 		if( allPossibleSubSeqs==null ) {
-			allPossibleSubSeqs = generateSubSequences(process, length);
+			allPossibleSubSeqs = process.generateSequences(length);
 		}
 		if( subSeqWeights==null ) {
@@ -59,5 +57,5 @@
 		}
 		double weight = 0.0;
-		for( List<Event<?>> subSeq : containedSubSeqs ) {
+		for( List<? extends Event<?>> subSeq : containedSubSeqs ) {
 			weight += subSeqWeights.get(subSeq);
 		}
@@ -65,8 +63,8 @@
 	}
 	
-	private Map<List<Event<?>>, Double> generateWeights(IStochasticProcess process, Set<List<Event<?>>> sequences) {
-		Map<List<Event<?>>, Double> subSeqWeights = new LinkedHashMap<List<Event<?>>, Double>();
+	private Map<List<? extends Event<?>>, Double> generateWeights(IStochasticProcess process, Set<List<? extends Event<?>>> sequences) {
+		Map<List<? extends Event<?>>, Double> subSeqWeights = new LinkedHashMap<List<? extends Event<?>>, Double>();
 		double sum = 0.0;
-		for( List<Event<?>> sequence : sequences ) {
+		for( List<? extends Event<?>> sequence : sequences ) {
 			double prob = 1.0;
 			List<Event<?>> context = new LinkedList<Event<?>>();
@@ -79,5 +77,5 @@
 		}
 		if( sum<1.0 ) {
-			for( Map.Entry<List<Event<?>>, Double> entry : subSeqWeights.entrySet() ) {
+			for( Map.Entry<List<? extends Event<?>>, Double> entry : subSeqWeights.entrySet() ) {
 				entry.setValue(entry.getValue()/sum);
 			}
@@ -90,39 +88,10 @@
 	}
 	
-	// O(symbols^length)	
-	private Set<List<Event<?>>> generateSubSequences(IStochasticProcess process, int length) {
-		Set<List<Event<?>>> subSequenceSet = new LinkedHashSet<List<Event<?>>>();;
-		if( length<1 ) {
-			throw new InvalidParameterException("Length of generated subsequences must be at least 1.");
-		}
-		if( length==1 ) {
-			for( Event<?> event : process.getEvents() ) {
-				List<Event<?>> subSeq = new LinkedList<Event<?>>();
-				subSeq.add(event);
-				subSequenceSet.add(subSeq);
-			}
-			return subSequenceSet;
-		}
-		Set<Event<?>> events = process.getEvents();
-		Set<List<Event<?>>> subSeqsShorter = generateSubSequences(process, length-1);
-		for( Event<?> event : events ) {
-			for( List<Event<?>> subSequence : subSeqsShorter ) {
-				Event<?> lastEvent = event;
-				if( process.getProbability(subSequence, lastEvent)>0.0 ) {
-					List<Event<?>> subSeq = new ArrayList<Event<?>>(subSequence);
-					subSeq.add(lastEvent);
-					subSequenceSet.add(subSeq);
-				}
-			}
-		}
-		return subSequenceSet;
-	}
-
 	// O(numSeq*lenSeq)	
-	private Set<List<Event<?>>> containedSubSequences(List<List<Event<?>>> sequences, int length) {
-		Set<List<Event<?>>> containedSubSeqs = new LinkedHashSet<List<Event<?>>>();
+	private Set<List<? extends Event<?>>> containedSubSequences(List<List<? extends Event<?>>> sequences, int length) {
+		Set<List<? extends Event<?>>> containedSubSeqs = new LinkedHashSet<List<? extends Event<?>>>();
 		List<Event<?>> subSeq = new LinkedList<Event<?>>();
 		boolean minLengthReached = false;
-		for( List<Event<?>> sequence : sequences ) {
+		for( List<? extends Event<?>> sequence : sequences ) {
 			for( Event<?> event : sequence ) {
 				subSeq.add(event);
Index: /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/DeterministicFiniteAutomaton.java
===================================================================
--- /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/DeterministicFiniteAutomaton.java	(revision 92)
+++ /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/DeterministicFiniteAutomaton.java	(revision 93)
@@ -19,5 +19,5 @@
 
 	@Override
-	public double getProbability(List<Event<?>> context, Event<?> symbol) {
+	public double getProbability(List<? extends Event<?>> context, Event<?> symbol) {
 		double result = 0.0d;
 		
Index: /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/HighOrderMarkovModel.java
===================================================================
--- /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/HighOrderMarkovModel.java	(revision 92)
+++ /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/HighOrderMarkovModel.java	(revision 93)
@@ -19,5 +19,5 @@
 	
 	@Override
-	public double getProbability(List<Event<?>> context, Event<?> symbol) {
+	public double getProbability(List<? extends Event<?>> context, Event<?> symbol) {
 		double result = 0.0d;
 		
Index: /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/IStochasticProcess.java
===================================================================
--- /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/IStochasticProcess.java	(revision 92)
+++ /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/IStochasticProcess.java	(revision 93)
@@ -9,7 +9,9 @@
 public interface IStochasticProcess extends Serializable {
 	
-	double getProbability(List<Event<?>> context, Event<?> symbol);
+	double getProbability(List<? extends Event<?>> context, Event<?> symbol);
 
 	public List<? extends Event<?>> randomSequence();
+	
+	public Set<List<? extends Event<?>>> generateSequences(int length);
 	
 	public int getNumStates();
@@ -17,5 +19,5 @@
 	public String[] getStateStrings();
 	
-	public Set<Event<?>> getEvents();
+	public Set<? extends Event<?>> getEvents();
 
 }
Index: /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/PredictionByPartialMatch.java
===================================================================
--- /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/PredictionByPartialMatch.java	(revision 92)
+++ /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/PredictionByPartialMatch.java	(revision 93)
@@ -34,5 +34,5 @@
 	
 	@Override
-	public double getProbability(List<Event<?>> context, Event<?> symbol) {
+	public double getProbability(List<? extends Event<?>> context, Event<?> symbol) {
 		double result = 0.0d;
 		double resultCurrentContex = 0.0d;
Index: /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/TrieBasedModel.java
===================================================================
--- /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/TrieBasedModel.java	(revision 92)
+++ /trunk/EventBenchCore/src/de/ugoe/cs/eventbench/models/TrieBasedModel.java	(revision 93)
@@ -1,4 +1,7 @@
 package de.ugoe.cs.eventbench.models;
 
+import java.security.InvalidParameterException;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -104,6 +107,34 @@
 	}
 	
-	public Set<Event<?>> getEvents() {
+	public Set<? extends Event<?>> getEvents() {
 		return trie.getKnownSymbols();
+	}
+	
+	public Set<List<? extends Event<?>>> generateSequences(int length) {
+		Set<List<? extends Event<?>>> sequenceSet = new LinkedHashSet<List<? extends Event<?>>>();;
+		if( length<1 ) {
+			throw new InvalidParameterException("Length of generated subsequences must be at least 1.");
+		}
+		if( length==1 ) {
+			for( Event<?> event : getEvents() ) {
+				List<Event<?>> subSeq = new LinkedList<Event<?>>();
+				subSeq.add(event);
+				sequenceSet.add(subSeq);
+			}
+			return sequenceSet;
+		}
+		Set<? extends Event<?>> events = getEvents();
+		Set<List<? extends Event<?>>> seqsShorter = generateSequences(length-1);
+		for( Event<?> event : events ) {
+			for( List<? extends Event<?>> seqShorter : seqsShorter ) {
+				Event<?> lastEvent = event;
+				if( getProbability(seqShorter, lastEvent)>0.0 ) {
+					List<Event<?>> subSeq = new ArrayList<Event<?>>(seqShorter);
+					subSeq.add(lastEvent);
+					sequenceSet.add(subSeq);
+				}
+			}
+		}
+		return sequenceSet;
 	}
 
