Index: /trunk/autoquest-plugin-jfc/src/main/java/de/ugoe/cs/autoquest/plugin/jfc/commands/CMDgenerateJacaretoReplay.java
===================================================================
--- /trunk/autoquest-plugin-jfc/src/main/java/de/ugoe/cs/autoquest/plugin/jfc/commands/CMDgenerateJacaretoReplay.java	(revision 1684)
+++ /trunk/autoquest-plugin-jfc/src/main/java/de/ugoe/cs/autoquest/plugin/jfc/commands/CMDgenerateJacaretoReplay.java	(revision 1685)
@@ -31,4 +31,5 @@
 import de.ugoe.cs.util.console.Command;
 import de.ugoe.cs.autoquest.eventcore.Event;
+import de.ugoe.cs.autoquest.eventcore.gui.*;
 import de.ugoe.cs.autoquest.plugin.jfc.guimodel.JFCGUIElement;
 import de.ugoe.cs.util.console.Console;
@@ -133,23 +134,18 @@
             for (Iterator<Event> eventIter = sequence.iterator(); eventIter.hasNext();) {
                 Event event = eventIter.next();
-                JFCGUIElement target = (JFCGUIElement) event.getTarget();
-
-                switch (event.getType().getName())
-                {
-                    case "LeftMouseButtonDown":
-                        structure.add("<StructureElement class=\"jacareto.struct.MouseClick\">");
-                        writeMouseClickEvent(writer, structure, event.getTimestamp(), target, 501);
-                        break;
-                    case "LeftMouseButtonUp":
-                        writeMouseClickEvent(writer, structure, event.getTimestamp(), target, 502);
-                        break;
-                    case "LeftMouseClick":
-                        writeMouseClickEvent(writer, structure, event.getTimestamp(), target, 500);
-                        structure.add("</StructureElement>");
-                        // FIXME: don't always write an item action
-                        writeItemActionEvent(writer, structure, target);
-                        break;
+
+                if (event.getType() instanceof MouseButtonDown) {
+                    structure.add("<StructureElement class=\"jacareto.struct.MouseClick\">");
+                    writeMouseClickEvent(writer, structure, event, 501);
                 }
-
+                else if (event.getType() instanceof MouseButtonUp) {
+                    writeMouseClickEvent(writer, structure, event, 502);
+                }
+                else if (event.getType() instanceof MouseClick) {
+                    writeMouseClickEvent(writer, structure, event, 500);
+                    structure.add("</StructureElement>");
+                    // FIXME: don't always write an item action
+                    writeItemActionEvent(writer, structure, event);
+                }
             }
         }
@@ -230,6 +226,9 @@
     private void writeItemActionEvent(BufferedWriter writer,
                                       ArrayList<String> structure,
-                                      JFCGUIElement target) throws IOException
+                                      Event event) throws IOException
     {
+        JFCGUIElement target = (JFCGUIElement) event.getTarget();
+        MouseButtonInteraction info = (MouseButtonInteraction) event.getType();
+
         //@formatter:off
         writeLine(writer,
@@ -253,5 +252,5 @@
             + "ID=\"1001\" "
             + "command=" + target.getName() + " "
-            + "modifiers=\"16\" />"
+            + "modifiers=\"" + getButtonModifier(info) + "\" />"
         );
         //@formatter:on
@@ -264,10 +263,11 @@
     private void writeMouseClickEvent(BufferedWriter writer,
                                       ArrayList<String> structure,
-                                      long timestamp,
-                                      JFCGUIElement target,
+                                      Event event,
                                       int jacId) throws IOException
     {
-        // Note, that all position related attributes appear to be meaningless
-        // for our purposes.
+        MouseButtonInteraction info = (MouseButtonInteraction) event.getType();
+        JFCGUIElement target = (JFCGUIElement) event.getTarget();
+        int clickCount = event.getType() instanceof MouseDoubleClick ? 2 : 1;
+
         // TODO: change procTime and duration to adequate values
         //@formatter:off
@@ -286,15 +286,15 @@
             + "width=\"0\" "
             + "height=\"0\" "
-            + "when=\"" + timestamp + "\" " 
+            + "when=\"" + event.getTimestamp() + "\" " 
             + "isConsumed=\"false\">" 
         );
         writeLine(writer,
             "<MouseInfo "
-            + "xPosition=\"0\" "
-            + "yPosition=\"0\" "
+            + "xPosition=\"" + info.getX()+ "\" "
+            + "yPosition=\"" + info.getY()+ "\" "
             + "rootX=\"0\" "
             + "rootY=\"0\" "
-            + "clickCount=\"1\" "
-            + "modifiers=\"16\" "
+            + "clickCount=\"" + clickCount + "\" "
+            + "modifiers=\"" + getButtonModifier(info) + "\" "
             + "isPopupTrigger=\"false\" />"
         );
@@ -304,3 +304,18 @@
         structure.add("<Recordable ref=\"" + (nextRef++) + "\" />");
     }
+
+    private int getButtonModifier(MouseButtonInteraction info) {
+        switch (info.getButton())
+        {
+            case LEFT:
+                return 16;
+            case MIDDLE:
+                return 8;
+            case RIGHT:
+                return 4;
+            default:
+                // TODO: handle unknown mouse button
+                return -1;
+        }
+    }
 }
