diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/.classpath b/othersrc/otdt-examples/OTSample-Stopwatch-src/.classpath
new file mode 100644
index 0000000..bcc3bc2
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="OTRE"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/.project b/othersrc/otdt-examples/OTSample-Stopwatch-src/.project
new file mode 100644
index 0000000..7ce2846
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/.project
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>OTSample-Stopwatch-src</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.objectteams.otdt.builder.OTJBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.objectteams.otdt.OTJavaNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/.settings/org.eclipse.jdt.core.prefs b/othersrc/otdt-examples/OTSample-Stopwatch-src/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..87e37e0
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,64 @@
+#Sat Jul 18 21:53:34 CEST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
+org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+org.eclipse.jdt.core.compiler.problem.nullReference=warning
+org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
+org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
+org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
+org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
+org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedImport=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/img/watch.jpg b/othersrc/otdt-examples/OTSample-Stopwatch-src/img/watch.jpg
new file mode 100644
index 0000000..2e293fe
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/img/watch.jpg
Binary files differ
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/AnalogClock.java b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/AnalogClock.java
new file mode 100644
index 0000000..579ffc8
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/AnalogClock.java
@@ -0,0 +1,123 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010  Technical University Berlin, Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id: AnalogClock.java 23501 2010-02-08 18:27:55Z stephan $
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.example.stopwatch;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
+import javax.swing.JPanel;
+
+public class AnalogClock extends JPanel {
+    private int seconds = 0;
+
+    private static final int   spacing = 10;
+    private static final float threePi = (float)(3.0 * Math.PI);
+    // Angles for the trigonometric functions are measured in radians.
+    // The following in the number of radians per sec or min.
+    private static final float radPerSecMin = (float)(Math.PI / 30.0);
+
+    private int size;       // height and width of clock face
+    private int centerX;    // x coord of middle of clock
+    private int centerY;    // y coord of middle of clock
+    private BufferedImage clockImage;
+
+    //==================================================== Clock constructor
+    public AnalogClock() {
+        this.setBackground(Color.white);
+        this.setForeground(Color.black);
+    }//end constructor
+
+    //=============================================================== update
+        // Replace the default update so that the plain background
+        // doesn't get drawn.
+    public void update(int value) {
+    	seconds = value;
+        this.repaint();
+    }//end update
+
+    //======================================================= paintComponent
+
+    public void paintComponent(Graphics g) {
+        super.paintComponent(g);  // paint background, borders
+        Graphics2D g2 = (Graphics2D)g;
+        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                            RenderingHints.VALUE_ANTIALIAS_ON);
+
+        int w = getWidth();
+        int h = getHeight();
+        size = ((w < h) ? w : h) - 2 * spacing;
+        centerX = size / 2 + spacing;
+		centerY = size / 2 + spacing + 35;
+
+        // Create the clock face background image if this is the first time
+        if (clockImage == null
+                || clockImage.getWidth() != w
+                || clockImage.getHeight() != h) {
+
+        	try {
+				clockImage = ImageIO.read(new File("img/watch.jpg"));
+			} catch (IOException e) {
+				// File not found :-/
+			}
+            // now get a graphics context from this image
+            Graphics2D gc = clockImage.createGraphics();
+            gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+                                RenderingHints.VALUE_ANTIALIAS_ON);
+        }
+        
+        // Draw the clock face from the precomputed image
+        g2.drawImage(clockImage, null, 0, 0);
+
+        // Draw the clock hands
+        drawClockHand(g);
+    }//end paintComponent
+
+    //======================================================= drawClockHand
+    private void drawClockHand(Graphics g) {
+        int secondRadius = size / 2 - 55;
+
+        // second hand
+        float fseconds = seconds;
+        float secondAngle = threePi - (radPerSecMin * fseconds);
+        drawRadius(g, centerX, centerY, secondAngle, 0, secondRadius);
+
+    }//end drawClockHands
+
+    // =========================================================== drawRadius
+    private void drawRadius(Graphics g, int x, int y, double angle,
+                    int minRadius, int maxRadius) {
+        float sine   = (float)Math.sin(angle);
+        float cosine = (float)Math.cos(angle);
+
+        int dxmin = (int)(minRadius * sine);
+        int dymin = (int)(minRadius * cosine);
+
+        int dxmax = (int)(maxRadius * sine);
+        int dymax = (int)(maxRadius * cosine);
+        Graphics2D g2d = (Graphics2D)g;
+        g2d.setStroke(new BasicStroke(4));
+        g2d.drawLine(x + dxmin, y + dymin, x + dxmax, y + dymax);
+    }//end drawRadius
+
+}
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/Main.java b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/Main.java
new file mode 100644
index 0000000..9b65979
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/Main.java
@@ -0,0 +1,59 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id: Main.java 23501 2010-02-08 18:27:55Z stephan $
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.example.stopwatch;
+
+/**
+ * Object Teams features demonstrated by this example:
+ * ---------------------------------------------------
+ * 
+ * Callin and callout method binding: Callin bindings are used to inform the GUI
+ * about changes in the base class. The callout method bindings allow us to
+ * propagate commands from the GUI to the base class.
+ * 
+ * Role class binding: The role WatchDisplay is bound to the base class StopWatch.
+ *  
+ * 
+ * Domain description: 
+ * -------------------
+ *
+ * This is a simple example for an implementation of the Model-View-Controller
+ * pattern. A StopWatch with the basic functions start, stop, and clear is
+ * created and passed to two WatchDisplays. Any changes in the model (StopWatch)
+ * are made visible in both views (WatchDisplay).
+ * 
+ * Launching the application:
+ * --------------------------
+ * Just run this main class as a Java Application, e.g., like this:
+ *  - Choose "Run", "Run..." in the Eclipse menu bar
+ *  - Select "Java Application"
+ *  - Create a new run configuration by clicking "New"
+ *  - Click "Run"
+ * (to check enablement of OT/J you may visit the JRE tab of the corres-
+ * ponding launch configuration and ensure that "Enable OTRE" is checked).
+ */
+public class Main {
+
+	public static void main(String[] args) {
+		StopWatch w = new StopWatch();
+		new WatchUIAnalog(w);
+		new WatchUI(w);
+	}
+}
\ No newline at end of file
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/StopWatch.java b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/StopWatch.java
new file mode 100644
index 0000000..e3b0ff0
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/StopWatch.java
@@ -0,0 +1,127 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id: StopWatch.java 23501 2010-02-08 18:27:55Z stephan $
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.example.stopwatch;
+
+/**
+ * This class acts as base class for this example. It is bound to the
+ * WatchDisplay role of the WatchUI team. StopWatch implemets a simple watch as
+ * a thread. The watch can be controlled via three methods: start(), stop() and
+ * clear(). getValue() returns the current time value. Note, that the StopWatch
+ * is not aware of the GUI.
+ */
+public class StopWatch implements Runnable {
+
+	/**
+	 * Current time value
+	 */
+	private int time = 0;
+
+	/**
+	 * Flag that indicates if the watch is running
+	 */
+	private boolean running;
+
+	/**
+	 * Flag that indicates if there is a stop request
+	 */
+	private boolean stopRequest;
+
+	/**
+	 * Increases the time value.
+	 */
+	private synchronized void advance() {
+		time++;
+	}
+
+	/**
+	 * Starts the watch thread.
+	 */
+	public synchronized void start() {
+		if (!running) {
+			setRunning(true);
+			setStopped(false);
+			(new Thread(this)).start();
+		}
+	}
+
+	/**
+	 * Stops the watch thread.
+	 *  
+	 */
+	public synchronized void stop() {
+		setStopped(true);
+	}
+
+	/**
+	 * Resets the time value.
+	 */
+	public synchronized void reset() {
+		time = 0;
+	}
+
+	/**
+	 * Returns the current time value.
+	 */
+	public synchronized int getValue() {
+		return time;
+	}
+
+	/**
+	 * Sets the running flag value.
+	 */
+	private synchronized void setRunning(boolean value) {
+		running = value;
+	}
+
+	/**
+	 * Returns the stop flag value
+	 */
+	private synchronized boolean isStopped() {
+		return stopRequest;
+	}
+
+	/**
+	 * Sets the stop flag value
+	 */
+	private synchronized void setStopped(boolean value) {
+		stopRequest = value;
+	}
+
+	/**
+	 * This method contains the main loop that is executed while the watch is
+	 * running.
+	 */
+	public void run() {
+		while (true) {
+			try {
+				Thread.sleep(1000);
+			} catch (InterruptedException e) {
+				setRunning(false);
+				return;
+			}
+			if (isStopped()) {
+				setRunning(false);
+				return;
+			}
+			advance();
+		}
+	}
+}
\ No newline at end of file
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/WatchUI.java b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/WatchUI.java
new file mode 100644
index 0000000..b788f21
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/WatchUI.java
@@ -0,0 +1,135 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id: WatchUI.java 23501 2010-02-08 18:27:55Z stephan $
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.example.stopwatch;
+
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JTextField;
+
+/**
+ * This team implements the UI for a StopWatch and contains the role class
+ * WatchDisplay.
+ */
+public team class WatchUI {
+	static int ypos = 150;
+
+	/**
+	 * Role class WatchDisplay is played by the base class StopWatch. The role
+	 * class WatchDisplay is bound to the base class StopWatch with the keyowrd
+	 * 'playedBy'.
+	 */
+	protected class WatchDisplay extends JFrame playedBy StopWatch 
+	{
+		private JTextField display;
+		private JButton startButton;
+		private JButton stopButton;
+		private JButton clearButton;
+
+		/**
+		 * This constructor is used for automatic role creation. E.g. via
+		 * declared lifting. Role class constructor takes an object of the type
+		 * of the declared base class. Setup the window, create a textfield for
+		 * time display and three buttons "start", "stop", and "clear".
+		 */
+		public WatchDisplay(StopWatch w) {
+			setTitle("Digital Stop Watch");
+			setSize(new Dimension(300, 100));
+			setLocation(410, ypos+=110);
+			Container pane = getContentPane();
+			pane.setLayout(new GridLayout(2,3));
+
+			pane.add(new JLabel(""));
+			display = new JTextField("0", 8);
+			display.setHorizontalAlignment(JTextField.RIGHT);
+			pane.add(display);
+			pane.add(new JLabel(""));
+
+			startButton = new JButton("start");
+			startButton.addActionListener(new ActionListener() {
+					public void actionPerformed(ActionEvent e) {
+						start();
+					}});
+			pane.add(startButton);
+
+			stopButton = new JButton("stop");
+			stopButton.addActionListener(new ActionListener() {
+					public void actionPerformed(ActionEvent e) {
+						stop();
+					}});
+			pane.add(stopButton);
+
+			clearButton = new JButton("clear");
+			clearButton.addActionListener(new ActionListener() {
+					public void actionPerformed(ActionEvent e) {
+						clear();
+					}});
+			pane.add(clearButton);
+			setVisible(true);
+		}		
+
+		/**
+		 * Shows the new time value on the watch display.
+		 */
+		void update() {
+			String val = getStringValue();
+			display.setText(val);
+		}
+
+		// Abstract methods for mapping to the concrete base methods:
+		abstract void   start();
+		abstract void   stop();
+		abstract void   clear();
+		abstract String getStringValue();
+			
+			   // callout method bindings: any call of the abstract WatchDisplay
+			   // method will be forwarded to the concrete StopWatch method
+			   start            ->       start;
+			   stop             ->       stop;
+			   clear            ->       reset;
+		String getStringValue()	-> int   getValue() 
+			   with {
+					// result is a predefined name.
+			   		result      <-   Integer.toString(result)
+		       }
+
+		  	   /* -------------------------------------------------------------- */
+		
+			   // Callin method bindings: WatchDisplay (role object) is updated
+			   // after the StopWatch (base object) advanced or was reset.
+			   void update()	<- after void advance();
+			   void update()    <- after void reset();
+	}
+
+	/**
+	 * The team constructor uses declared lifting. A WatchDisplay role is
+	 * created for the given StopWatch object.
+	 */
+	public WatchUI (StopWatch as WatchDisplay w) {
+		activate(ALL_THREADS); // Without this, the callin bindings have no effect.
+	}
+}
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/WatchUIAnalog.java b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/WatchUIAnalog.java
new file mode 100644
index 0000000..814e1c8
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/src/org/eclipse/objectteams/example/stopwatch/WatchUIAnalog.java
@@ -0,0 +1,117 @@
+/**********************************************************************
+ * This file is part of "Object Teams Development Tooling"-Software
+ * 
+ * Copyright 2004, 2010 Fraunhofer Gesellschaft, Munich, Germany,
+ * for its Fraunhofer Institute and Computer Architecture and Software
+ * Technology (FIRST), Berlin, Germany and Technical University Berlin,
+ * Germany.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * $Id: WatchUIAnalog.java 23501 2010-02-08 18:27:55Z stephan $
+ * 
+ * Please visit http://www.eclipse.org/objectteams for updates and contact.
+ * 
+ * Contributors:
+ * 	  Fraunhofer FIRST - Initial API and implementation
+ * 	  Technical University Berlin - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.objectteams.example.stopwatch;
+
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+/**
+ * This team implements the UI for a StopWatch and contains the role class
+ * WatchDisplay.
+ */
+public team class WatchUIAnalog {
+	public class WatchDisplay extends JFrame playedBy StopWatch {
+
+	    AnalogClock clockFace;
+		private JButton startButton;
+		private JButton stopButton;
+		private JButton clearButton;
+		
+	    //========================================================== constructor
+	    public WatchDisplay(StopWatch sw) {
+	        Container content = this.getContentPane();
+			content.setLayout(new BorderLayout());
+	        clockFace = new AnalogClock();
+	        this.setLocation(90, 110);
+	        this.setResizable(false);
+
+	        content.add(clockFace, BorderLayout.CENTER);
+			JPanel buttons = new JPanel();
+			buttons.setLayout(new FlowLayout());
+			
+			startButton = new JButton("start");
+			startButton.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					start();
+				}});
+			buttons.add(startButton);
+			
+			stopButton = new JButton("stop");
+			stopButton.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					stop();
+				}});
+			buttons.add(stopButton);
+			
+			clearButton = new JButton("clear");
+			clearButton.addActionListener(new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					clear();
+				}});
+			buttons.add(clearButton);
+
+	        content.add(buttons, BorderLayout.SOUTH);
+
+			this.setTitle("Analog Stop Watch");
+			this.setSize(new Dimension(298, 440));
+
+	        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
+	        setVisible(true);
+	    }//end constructor
+	    
+	    void update() {
+	    	clockFace.update(getValue());
+		}
+//	  Abstract methods for mapping to the concrete base methods:
+		abstract void    stop();
+		abstract void   clear();
+		abstract int getValue();
+			
+			   // callout method bindings: any call of the abstract WatchDisplay
+			   // method will be forwarded to the concrete StopWatch method
+		void   start()          ->       void start();
+			   stop             ->       stop;
+			   clear            ->       reset;
+			   getValue			->       getValue; 
+			   
+//			 Callin method bindings: WatchDisplay (role object) is updated
+			   // after the StopWatch (base object) advanced or was reset.
+			   void update()	<- after void advance();
+			   void update()    <- after void reset();
+	}//end class ClockAnalogBuf
+	
+
+	/**
+	 * The team constructor uses declared lifting. A WatchDisplay role is
+	 * created for the given StopWatch object.
+	 */
+	public WatchUIAnalog (StopWatch as WatchDisplay w) {
+		activate(ALL_THREADS); // Without this, the callin bindings have no effect.
+	}
+}
diff --git a/othersrc/otdt-examples/OTSample-Stopwatch-src/stopwatch-zip.jardesc b/othersrc/otdt-examples/OTSample-Stopwatch-src/stopwatch-zip.jardesc
new file mode 100644
index 0000000..1e6e125
--- /dev/null
+++ b/othersrc/otdt-examples/OTSample-Stopwatch-src/stopwatch-zip.jardesc
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jardesc>
+    <jar path="org.eclipse.objectteams.otdt.samples/samples/stopwatch.zip"/>
+    <options buildIfNeeded="true" compress="true" descriptionLocation="/OTSample-Stopwatch-src/stopwatch-zip.jardesc" exportErrors="false" exportWarnings="true" includeDirectoryEntries="false" overwrite="true" saveDescription="true" storeRefactorings="false" useSourceFolders="true"/>
+    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+    <selectedProjects/>
+    <selectedElements exportClassFiles="false" exportJavaFiles="true" exportOutputFolder="false">
+        <javaElement handleIdentifier="=OTSample-Stopwatch-src"/>
+    </selectedElements>
+</jardesc>
