diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/MoccChannel.java b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/MoccChannel.java
index b30b405..3431f87 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/MoccChannel.java
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/MoccChannel.java
@@ -167,7 +167,12 @@
 
 		sout.append(' ').append(name).append(" {")
 			.append('\n')
-			.append('\t').append("output<").append(outputPort.strRate()).append("> ")
+			.append('\t').append("output<").append(outputPort.strRate());
+		if( outputPort.cycloStaticRate != null ) {
+			sout.append(" , ");
+			outputPort.strCycloStaticRate(sout);
+		}
+		sout.append("> ")
 			.append(outputPort.getActor().getName())
 			.append("->").append(outputPort.getName())
 			.append('\n');
@@ -184,7 +189,12 @@
 				.append('\n');
 		}
 
-		sout.append('\t').append("input<").append(inputPort.strRate()).append("> ")
+		sout.append('\t').append("input<").append(inputPort.strRate());
+		if( inputPort.cycloStaticRate != null ) {
+			sout.append(" , ");
+			inputPort.strCycloStaticRate(sout);
+		}
+		sout.append("> ")
 			.append(inputPort.getActor().getName())
 			.append("->").append(inputPort.getName())
 			.append('\n')
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/MoccPort.java b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/MoccPort.java
index 1065f37..4ce2154 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/MoccPort.java
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/MoccPort.java
@@ -12,6 +12,8 @@
  *******************************************************************************/
 package org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph.mocc.ast;
 
+import org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph.util.Rational;
+
 public class MoccPort {
 
 	public final MoccActor actor;
@@ -26,6 +28,8 @@
 
 	protected final int rateDenominator;
 
+	protected int[] cycloStaticRate;
+
 	protected MoccChannel channel;
 
 	public MoccPort(final MoccActor actor, final Direction direction,
@@ -40,6 +44,7 @@
 
 		this.rate = rate;
 		this.rateDenominator = rateDenominator;
+		cycloStaticRate = null;
 
 		this.channel = null;
 
@@ -103,6 +108,14 @@
 		return( rateDenominator > 1 );
 	}
 
+	public int[] getCycloStaticRate() {
+		return cycloStaticRate;
+	}
+
+	public boolean hasCycloStaticRate() {
+		return( cycloStaticRate != null );
+	}
+
 
 	public boolean isInputRational() {
 		return( (channel != null) && channel.getInputPort().isRational() );
@@ -139,6 +152,127 @@
 	}
 
 
+/*
+	def csdf_sequence(rate, rate_initial):
+	    s = []
+	    for i in range(rate.denominator):
+	        r = rate_initial + rate
+	        s += [abs(floor(r)-floor(rate_initial))]
+	        rate_initial = r
+	    return s
+*/
+	public static int[] computeRateCSDF(final Rational rate, Rational initial ) {
+		final int[] cycloStaticRate = new int[rate.getDenominator()];
+
+		for (int i = 0; i < cycloStaticRate.length; i++) {
+			final Rational sum = (new Rational(initial)).add(rate);
+			cycloStaticRate[i] = Math.abs(sum.floor() - initial.floor());
+			initial = sum;
+		}
+
+		return cycloStaticRate;
+	}
+
+
+	public static void printRate(final int[] rate) {
+		System.out.print('[');
+		for (final int r : rate) {
+			System.out.print(' ');
+			System.out.print(r);
+		}
+		System.out.println(" ]");
+	}
+
+
+/*
+	for den in range(5):
+	    for num in range(1,den):
+	        rate = Fraction(num,den)
+	        for ps in range(den):
+	            rate_initial = Fraction(ps,den)
+	            print("case:",rate,"-",rate_initial,"->",2)
+	            print("csdf production:",csdf_sequence(rate,rate_initial))
+	            print("csdf consumption:",csdf_sequence(-2,rate_initial))
+	            print("case:",2,"-",rate_initial,"->",rate)
+	            print("csdf production:",csdf_sequence(2,rate_initial))
+	            print("csdf consumption:",csdf_sequence(-rate,rate_initial))
+	            print()
+	        print()
+	    print()
+*/
+	public static void main(final String[] args) {
+		final Rational deux = new Rational(2,  1);
+		final Rational neg_deux = new Rational(-2,  1);
+
+		for (int den = 0; den < 5; den++) {
+			for (int num = 1; num < den; num++) {
+				final Rational rate = new Rational(num,den);
+				for (int ps = 0; ps < den; ps++) {
+					final Rational rate_initial = new Rational(ps,den);
+					System.out.println("case: " + rate + " -- " + rate_initial + " --> " + 2);
+					System.out.print("csdf production : "); printRate(computeRateCSDF(rate , rate_initial));
+					System.out.print("csdf consumption: "); printRate(computeRateCSDF(neg_deux , rate_initial));
+
+					System.out.println("case: " + 2 + " -- " + rate_initial + " --> " + rate);
+					System.out.print("csdf production : "); printRate(computeRateCSDF(deux , rate_initial));
+					System.out.print("csdf consumption: "); printRate(computeRateCSDF(rate.negate() , rate_initial));
+					System.out.println();
+				}
+				System.out.println();
+			}
+			System.out.println();
+		}
+
+		final Rational prod = new Rational(4, 3);
+		final Rational init = new Rational(0, 1);
+		final Rational conso = new Rational(-1, 1);
+		System.out.println("case: 4/3 -- 0 --> 1");
+		System.out.print("csdf prod : "); printRate(computeRateCSDF(prod , init));
+		System.out.print("csdf conso: "); printRate(computeRateCSDF(conso , init));
+		System.out.println();
+	}
+
+	public void computeCycloStaticInputRate() {
+		cycloStaticRate = computeRateCSDF(
+				new Rational(-rate, rateDenominator),
+				new Rational(channel.initialRate, channel.initialRateDenominator));
+
+//		cycloStaticRate = new int[rateDenominator];
+//		int intTokenCount = 0;
+//		float floatTokenCount = 0;
+//		for (int i = 0; i < cycloStaticRate.length; i++) {
+//			floatTokenCount += ((float)rate) / rateDenominator;
+//			if( ((int) floatTokenCount) <= (rate - 1) ) {
+//				cycloStaticRate[i] = ((int) floatTokenCount ) + 1 - intTokenCount;
+//
+//				intTokenCount += cycloStaticRate[i];
+//			}
+//			else {
+//				cycloStaticRate[i] = 0;
+//			}
+//		}
+	}
+
+	public void computeCycloStaticOutputRate() {
+		cycloStaticRate = computeRateCSDF(
+				new Rational(rate, rateDenominator),
+				new Rational(0, 1));
+//				new Rational(channel.initialRate, channel.initialRateDenominator));
+
+
+
+//		cycloStaticRate = new int[rateDenominator];
+//		int intTokenCount = 0;
+//		float floatTokenCount = 0;
+//		for (int i = 0; i < cycloStaticRate.length; i++) {
+//			floatTokenCount += rate;
+//			cycloStaticRate[i] = ((int) (floatTokenCount / rateDenominator)) - intTokenCount;
+//			intTokenCount += cycloStaticRate[i];
+//		}
+	}
+
+
+
 	public MoccChannel getChannel() {
 		return channel;
 	}
@@ -170,6 +304,16 @@
 		}
 	}
 
+	public void strCycloStaticRate(final StringBuilder sout) {
+		sout.append('[');
+		for (final int rate : cycloStaticRate) {
+			sout.append(' ').append(rate);
+		}
+		sout.append(" ]");
+	}
+
+
+
 	@Override
 	public String toString() {
 		final StringBuilder sout = new StringBuilder();
@@ -177,6 +321,11 @@
 		sout.append(direction.toString().toLowerCase())
 			.append(" port< rate = ").append(strRate());
 
+		if( cycloStaticRate != null ) {
+			sout.append(" , cyclo = ");
+			strCycloStaticRate(sout);
+		}
+
 		if( channel.hasInitialRate() ) {
 			sout.append(" , initial = ").append(channel.strInitialRate());
 		}
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/feature/MoccActorFeature.java b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/feature/MoccActorFeature.java
index e66e186..20a30c7 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/feature/MoccActorFeature.java
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/feature/MoccActorFeature.java
@@ -190,4 +190,20 @@
 			return "[null]";
 		}
 	}
+
+
+	public void computeCycloStaticRate() {
+		for( final MoccPort moccPort : actor.getInputPort() ) {
+			if( moccPort.isRational() ) {
+				moccPort.computeCycloStaticInputRate();
+			}
+		}
+
+		for( final MoccPort moccPort : actor.getOutputPort() ) {
+			if( moccPort.isRational() ) {
+				moccPort.computeCycloStaticOutputRate();
+			}
+		}
+	}
+
 }
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/feature/MoccSystemFeature.java b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/feature/MoccSystemFeature.java
index e97998a..fa660ca 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/feature/MoccSystemFeature.java
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/ast/feature/MoccSystemFeature.java
@@ -199,6 +199,7 @@
 		this.consistency = checkConsistency();
 
 		for( final MoccActor actor : system.getActor() ) {
+			actor.FEATURE.computeCycloStaticRate();
 			actor.FEATURE.computeActivation(this);
 		}
 	}
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/helper/MoccPortHelper.java b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/helper/MoccPortHelper.java
index a2e6889..244c35a 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/helper/MoccPortHelper.java
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/helper/MoccPortHelper.java
@@ -28,6 +28,8 @@
 
 	public Variable constTOKEN_RATE;
 
+	public Variable constTOKEN_RATE_CSDF;
+
 
 	public MoccPortHelper(final Port xliaPort,
 			final Port xliaChannelPort,
@@ -35,7 +37,8 @@
 			final Variable varReceivedModeTokenCount,
 			final Variable constModeInitial,
 			final Variable varReceivedMode,
-			final Variable constTokenRate) {
+			final Variable constTokenRate,
+			final Variable constTokenRateCSDF) {
 		super();
 
 		this.xliaPort = xliaPort;
@@ -48,10 +51,18 @@
 		this.varReceivedMode = varReceivedMode;
 
 		this.constTOKEN_RATE = constTokenRate;
+
+		this.constTOKEN_RATE_CSDF = constTokenRateCSDF;
 	}
 
-	public MoccPortHelper(final Port xliaPort, final Variable constTokenRate) {
-		this(xliaPort, xliaPort, null, null, null, null, constTokenRate);
+//	public MoccPortHelper(final Port xliaPort, final Variable constTokenRate) {
+//		this(xliaPort, xliaPort, null, null, null, null, constTokenRate, null);
+//	}
+
+	public MoccPortHelper(final Port xliaPort,
+			final Variable constTokenRate, final Variable constTokenRateCSDF) {
+		this(xliaPort, xliaPort, null, null, null, null,
+				constTokenRate, constTokenRateCSDF);
 	}
 
 }
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/xlia/MoCC2XLIA.java b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/xlia/MoCC2XLIA.java
index 82ac16d..c8c0838 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/xlia/MoCC2XLIA.java
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/mocc/xlia/MoCC2XLIA.java
@@ -786,6 +786,17 @@
 						varType, "PRODUCTION_TO_" + targetActor, value);
 		xliaActor.getVariable().add(constTokenProductionRate);
 
+
+		Variable constTokenProductionRateCSDF = null;
+		if( moccPort.hasCycloStaticRate() ) {
+			final int[] cycloStaticRate = moccPort.getCycloStaticRate();
+			constTokenProductionRateCSDF = XLIA_INFRA.createVariable(
+					XLIA_DATATYPE.createInterger(cycloStaticRate.length),
+					"CSDF_PRODUCTION_TO_" + targetActor,
+					XLIA_EXPRESSION.createCollection(cycloStaticRate));
+			xliaActor.getVariable().add(constTokenProductionRateCSDF);
+		}
+
 		// OUTPUT PORT
 		final DataType tokenType =
 				XLIA_DATATYPE.createRationalOrInteger(moccPort.isRational());
@@ -805,8 +816,8 @@
 					moccPort, ChannelDirection.OUTPUT, xliaActor, tokenType);
 		}
 
-		portHelper.put(moccPort,
-				new MoccPortHelper(xliaPort, constTokenProductionRate));
+		portHelper.put(moccPort, new MoccPortHelper(xliaPort,
+				constTokenProductionRate, constTokenProductionRateCSDF));
 	}
 
 	/**
@@ -833,6 +844,16 @@
 				"REQUIRED_FROM_" + sourceActor/*.toUpperCase()*/, value);
 		xliaActor.getVariable().add(constREQ);
 
+		Variable constTokenConsumptionRateCSDF = null;
+		if( moccPort.hasCycloStaticRate() ) {
+			final int[] cycloStaticRate = moccPort.getCycloStaticRate();
+			constTokenConsumptionRateCSDF = XLIA_INFRA.createVariable(
+					XLIA_DATATYPE.createInterger(cycloStaticRate.length),
+					"CSDF_REQUIRED_FROM_" + sourceActor,
+					XLIA_EXPRESSION.createCollection(cycloStaticRate));
+			xliaActor.getVariable().add(constTokenConsumptionRateCSDF);
+		}
+
 		// CONSTANT: INITIAL TOKEN COUNT
 		Variable tokenInitialRate = null;
 		Variable modeInitial = null;
@@ -918,10 +939,9 @@
 			}
 
 		// Mapping: MoccPort-->PortHelper
-		portHelper.put(moccPort,
-				new MoccPortHelper(xliaPort, xliaChannelPort,
-						tokenInitialRate, varTokenCount,
-						modeInitial, varReceivedMode, constREQ));
+		portHelper.put(moccPort, new MoccPortHelper(xliaPort, xliaChannelPort,
+				tokenInitialRate, varTokenCount, modeInitial,
+				varReceivedMode, constREQ, constTokenConsumptionRateCSDF));
 	}
 
 
@@ -1806,6 +1826,8 @@
 		XLIA_STATEMENT.addAssignment(thenBlock,
 				actorHELPER.varProcessingMode, this.MODE_UNDEFINED);
 
+		XLIA_STATEMENT.addInvokeExit(thenBlock, "MoCC::MODE<UNDEFINED>");
+
 		// Else Nominal Mode Passing
 		final BlockStatement elseBlock =
 				XLIA_STATEMENT.createElseBlockStatement(ifStatement);
@@ -1841,6 +1863,8 @@
 		XLIA_STATEMENT.addAssignment(thenBlock,
 				actorHELPER.varProcessingMode, this.MODE_UNDEFINED);
 
+		XLIA_STATEMENT.addInvokeExit(thenBlock, "MoCC::MODE<UNDEFINED>");
+
 		// Else Identical i.e. Singleton
 		final BlockStatement elseBlock =
 				XLIA_STATEMENT.createElseBlockStatement(ifStatement);
@@ -1907,6 +1931,8 @@
 			XLIA_STATEMENT.addAssignment(thenBlock,
 					actorHELPER.varProcessingMode, this.MODE_UNDEFINED);
 
+			XLIA_STATEMENT.addInvokeExit(thenBlock, "MoCC::MODE<UNDEFINED>");
+
 			// Else Mode computing
 			ifStatement.setElseBlock(blockCollectMode);
 
@@ -1932,6 +1958,9 @@
 			XLIA_STATEMENT.addAssignment(elseIfBlockMultiple,
 					actorHELPER.varProcessingMode, this.MODE_UNDEFINED);
 
+			XLIA_STATEMENT.addInvokeExit(
+					elseIfBlockMultiple, "MoCC::MODE<UNDEFINED>");
+
 //			// Different Mode passing
 //			final ConditionalBlockStatement diffElseIfStatement =
 //					XLIA_STATEMENT.addElseIf(ifSingleton);
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/util/Rational.java b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/util/Rational.java
index 3f066e2..3d048a0 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/util/Rational.java
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/src/org/eclipse/efm/modeling/codegen/xlia/sdf/polygraph/util/Rational.java
@@ -15,7 +15,7 @@
 public class Rational implements Comparable<Rational> {
 //	private static Rational zero = new Rational(0, 1);
 
-	public static int gcd(int m, int n) {
+	public static int gcd(final int m, final int n) {
 		if (0 == n) {
 			return m;
 		} else {
@@ -23,7 +23,7 @@
 		}
 	}
 
-	public static int lcm(int m, int n) {
+	public static int lcm(final int m, final int n) {
 		return m * (n / gcd(m, n));
 	}
 
@@ -31,9 +31,9 @@
 
 	private int numerator;
 
-	public Rational(int numerator, int denominator) {
+	public Rational(final int numerator, final int denominator) {
 
-		int g = gcd(numerator, denominator);
+		final int g = gcd(numerator, denominator);
 		this.numerator = numerator / g;
 		this.denominator = denominator / g;
 		if (this.denominator < 0) {
@@ -42,6 +42,10 @@
 		}
 	}
 
+	public Rational(final Rational initial) {
+		this(initial.numerator, initial.denominator);
+	}
+
 	public int getDenominator() {
 		return denominator;
 	}
@@ -51,10 +55,10 @@
 	}
 
 	@Override
-	public int compareTo(Rational b) {
-		Rational a = this;
-		int lhs = a.numerator * b.denominator;
-		int rhs = a.denominator * b.numerator;
+	public int compareTo(final Rational b) {
+		final Rational a = this;
+		final int lhs = a.numerator * b.denominator;
+		final int rhs = a.denominator * b.numerator;
 		if (lhs < rhs)
 			return -1;
 		if (lhs > rhs)
@@ -63,15 +67,19 @@
 	}
 
 	@Override
-	public boolean equals(Object y) {
+	public boolean equals(final Object y) {
 		if (y == null)
 			return false;
 		if (y.getClass() != this.getClass())
 			return false;
-		Rational b = (Rational) y;
+		final Rational b = (Rational) y;
 		return compareTo(b) == 0;
 	}
 
+	public boolean isZero() {
+		return (numerator == 0);
+	}
+
 //	// return a / b
 //	public Rational div(Rational b) {
 //		return this.mul(b.reciprocal());
@@ -81,48 +89,52 @@
 //	public Rational sub(Rational b) {
 //		return this.add(b.negate());
 //	}
-//
-//	// return -a
-//	public Rational negate() {
-//		return new Rational(-numerator, denominator);
-//	}
-//
-//	public Rational add(Rational b) {
-//		if (this.compareTo(zero) == 0) {
-//			return b;
-//		}
-//		if (b.compareTo(zero) == 0) {
-//			return this;
-//		}
-//
-//		// Find gcd of numerators and denominators
-//		int f = gcd(numerator, b.numerator);
-//		int g = gcd(denominator, b.denominator);
-//
-//		// add cross-product terms for numerator
-//		Rational s = new Rational((numerator / f) * (b.denominator / g)
-//				+ (b.numerator / f) * (denominator / g), lcm(denominator,
-//				b.denominator));
-//
-//		// multiply back in
-//		s.numerator *= f;
-//		return s;
-//	}
-//
+
+	// return -a
+	public Rational negate() {
+		return new Rational(-numerator, denominator);
+	}
+
+	public Rational add(final Rational b) {
+		if (this.isZero()) {
+			return b;
+		}
+		if (b.isZero()) {
+			return this;
+		}
+
+		// Find gcd of numerators and denominators
+		final int f = gcd(numerator, b.numerator);
+		final int g = gcd(denominator, b.denominator);
+
+		// add cross-product terms for numerator
+		final Rational s = new Rational((numerator / f) * (b.denominator / g)
+				+ (b.numerator / f) * (denominator / g), lcm(denominator,
+				b.denominator));
+
+		// multiply back in
+		s.numerator *= f;
+		return s;
+	}
+
 //	public Rational reciprocal() {
 //		return new Rational(denominator, numerator);
 //	}
 //
-	public Rational mul(Rational b) {
-		Rational c = new Rational(numerator, b.denominator);
-		Rational d = new Rational(b.numerator, denominator);
+	public Rational mul(final Rational b) {
+		final Rational c = new Rational(numerator, b.denominator);
+		final Rational d = new Rational(b.numerator, denominator);
 		return new Rational(c.numerator * d.numerator, c.denominator
 				* d.denominator);
 	}
 
 //	public double toDouble() {
-//		return (double) numerator / denominator;
-//	}
+//	return (double) numerator / denominator;
+//}
+
+	public int floor() {
+	return Math.floorDiv(numerator, denominator);
+}
 
 	@Override
 	public String toString() {
diff --git a/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_DATATYPE.java b/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_DATATYPE.java
index 0dc4f95..ef7856f 100644
--- a/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_DATATYPE.java
+++ b/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_DATATYPE.java
@@ -51,6 +51,14 @@
 		return FACTORY.createPrimitiveIntegerType();
 	}
 
+	public static PrimitiveIntegerType createInterger(final int size) {
+		final PrimitiveIntegerType intArray = FACTORY.createPrimitiveIntegerType();
+
+		intArray.setMultiplicity(XLIA_EXPRESSION.createInteger(size));
+
+		return intArray;
+	}
+
 	public static PrimitiveRationalType createRational() {
 		return FACTORY.createPrimitiveRationalType();
 	}
diff --git a/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_EXPRESSION.java b/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_EXPRESSION.java
index 3a2277f..b4db7ff 100644
--- a/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_EXPRESSION.java
+++ b/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_EXPRESSION.java
@@ -543,6 +543,18 @@
 
 	// COLLECTION
 	public static LiteralCollectionExpression createCollection(
+			final int[] values) {
+		final LiteralCollectionExpression expression =
+				FACTORY.createLiteralCollectionExpression();
+
+		for (final int value : values) {
+			expression.getValue().add( XLIA_EXPRESSION.createInteger(value) );
+		}
+
+		return expression;
+	}
+
+	public static LiteralCollectionExpression createCollection(
 			final String[] values) {
 		final LiteralCollectionExpression expression =
 				FACTORY.createLiteralCollectionExpression();
diff --git a/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_STATEMENT.java b/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_STATEMENT.java
index c347b8b..10b0616 100644
--- a/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_STATEMENT.java
+++ b/editor/xlia/org.eclipse.efm.formalml.ecore/src/org/eclipse/efm/formalml/ecore/factory/XLIA_STATEMENT.java
@@ -50,6 +50,8 @@
 
 	public static final Routine CLEAR = XLIA_INFRA.createRoutine("clear");
 
+	public static final Routine EXIT = XLIA_INFRA.createRoutine("exit");
+
 	// StatementFactory FACTORY
 	static StatementFactory FACTORY = StatementFactory.eINSTANCE;
 
@@ -382,8 +384,13 @@
 
 	public static void addInvokeClear(
 			final BlockStatement block, final NamedElement collection) {
-		block.getStatement().add(
-				createInvoke(CLEAR, collection) );
+		block.getStatement().add( createInvoke(CLEAR, collection) );
+	}
+
+	public static void addInvokeExit(
+			final BlockStatement block, final String exitMessage) {
+		block.getStatement().add( createInvoke(EXIT,
+				XLIA_EXPRESSION.createExpression(exitMessage)) );
 	}
 
 
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/views/page/SWTSpider.java b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/views/page/SWTSpider.java
index 75580eb..e0a4244 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/views/page/SWTSpider.java
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/src/org/eclipse/efm/execution/launchconfiguration/ui/views/page/SWTSpider.java
@@ -200,9 +200,10 @@
 			final FontData[] saveFontData = SAVE_FONT.getFontData();
 
 			final FontData[] fontData16 = new FontData[saveFontData.length];
-			for(int i = 0; i < saveFontData.length; ++ i)
+			for(int i = 0; i < saveFontData.length; ++i)
 				fontData16[i] = new FontData(
-						saveFontData[i].getName(), 18, saveFontData[i].getStyle());
+						saveFontData[i].getName(), 16,
+						saveFontData[i].getStyle());
 			TITLE_FONT = new Font(device, fontData16);
 		}
 
