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 1807)
+++ /trunk/autoquest-plugin-jfc/src/main/java/de/ugoe/cs/autoquest/plugin/jfc/commands/CMDgenerateJacaretoReplay.java	(revision 1808)
@@ -96,4 +96,6 @@
 public class CMDgenerateJacaretoReplay implements Command {
     private static final int EVENT_DURATION = 150;
+    private static final int DOUBLE_CLICK_DURATION = 50;
+    private static final int STARTUP_DELAY = 10000;
 
     private JFCGUIElement currentFocus;
@@ -210,6 +212,6 @@
         writeLine(writer, "<ComponentMode numberPopupMenues=\"true\" />");
         writeLine(writer, "<ApplicationStarter "
-            + "procTime=\"0\" "
-            + "duration=\"0\" "
+            + "procTime=\"" + STARTUP_DELAY + "\" "
+            + "duration=\"" + STARTUP_DELAY + "\" "
             + "name=\"Autoquest Replay\" "
             + "class=\"" + classname + "\" "
@@ -240,43 +242,56 @@
                 Event event = eventIter.next();
 
-                /*
-                System.out.println(event.getType());
-                System.out.println(event.getTarget());
-                System.out.println("---");
-                */
-
                 if (event.getType() instanceof MouseButtonDown) {
+                    commitFocusEvent();
                     lastKeySequenceEvent = null;
                     checkIfMouseDragged();
 
                     lastMouseClickEvent = new StructureNode("MouseClick");
-                    writeMouseClickEvent(writer, event, 501);
+                    writeMouseClickEvent(writer, event, EVENT_DURATION, 501);
                 }
                 else if (event.getType() instanceof MouseButtonUp) {
                     lastKeySequenceEvent = null;
 
-                    writeMouseClickEvent(writer, event, 502);
+                    writeMouseClickEvent(writer, event, EVENT_DURATION, 502);
+                }
+                else if (event.getType() instanceof MouseDoubleClick) {
+                    StructureNode multiClick = structure.add("MultipleMouseClick");
+
+                    // first click
+                    lastMouseClickEvent = multiClick.add("MouseClick");
+                    writeMouseClickEvent(writer, event, DOUBLE_CLICK_DURATION, 501);
+                    writeMouseClickEvent(writer, event, DOUBLE_CLICK_DURATION, 502);
+                    writeMouseClickEvent(writer, event, DOUBLE_CLICK_DURATION, 500);
+                    // second click
+                    lastMouseClickEvent = multiClick.add("MouseClick");
+                    writeMouseClickEvent(writer, event, DOUBLE_CLICK_DURATION, 501);
+                    writeMouseClickEvent(writer, event, DOUBLE_CLICK_DURATION, 502);
+                    writeMouseClickEvent(writer, event, DOUBLE_CLICK_DURATION, 500);
+
+                    lastMouseClickEvent = null;
                 }
                 else if (event.getType() instanceof MouseClick) {
-                    lastKeySequenceEvent = null;
-
-                    writeMouseClickEvent(writer, event, 500);
-                    // FIXME: don't always write an item action
-                    writeItemActionEvent(writer, event);
-                    // FIXME: don't write it all here because there
-                    // might be no item action at all
-                    if (lastFocusChangeEvent == null) {
-                        // write structure sequentially
-                        structure.children.add(lastMouseClickEvent);
-                        structure.children.add(lastItemActionEvent);
-                    }
-                    else {
-                        // with nested structure
-                        structure.children.add(lastItemActionEvent);
-                        lastItemActionEvent.children.add(0, lastFocusChangeEvent);
-                        lastFocusChangeEvent.children.add(0, lastMouseClickEvent);
-
-                        lastFocusChangeEvent = null;
-                        lastMouseClickEvent = null;
+                    if (lastMouseClickEvent != null) {
+                        lastKeySequenceEvent = null;
+
+                        writeMouseClickEvent(writer, event, EVENT_DURATION, 500);
+                        // FIXME: don't always write an item action
+                        writeItemActionEvent(writer, event);
+                        // FIXME: don't write it all here because there
+                        // might be no item action at all
+                        if (lastFocusChangeEvent == null) {
+                            // write structure sequentially
+                            structure.children.add(lastMouseClickEvent);
+                            structure.children.add(lastItemActionEvent);
+                        }
+                        else {
+                            // with nested structure
+                            structure.children.add(lastItemActionEvent);
+                            lastItemActionEvent.children.add(0, lastFocusChangeEvent);
+                            lastFocusChangeEvent.children.add(0, lastMouseClickEvent);
+
+                            lastFocusChangeEvent = null;
+                            lastMouseClickEvent = null;
+                        }
                     }
                 }
@@ -287,4 +302,5 @@
                 }
                 else if (event.getType() instanceof KeyPressed) {
+                    commitFocusEvent();
                     // checkIfMouseDragged();
 
@@ -296,4 +312,5 @@
                 }
                 else if (event.getType() instanceof KeyReleased) {
+                    commitFocusEvent();
                     // checkIfMouseDragged();
 
@@ -301,4 +318,11 @@
                 }
             }
+        }
+    }
+
+    private void commitFocusEvent() {
+        if (lastFocusChangeEvent != null) {
+            structure.children.add(lastFocusChangeEvent);
+            lastFocusChangeEvent = null;
         }
     }
@@ -464,5 +488,5 @@
     }
 
-    private void writeMouseClickEvent(BufferedWriter writer, Event event, int jacId)
+    private void writeMouseClickEvent(BufferedWriter writer, Event event, int duration, int jacId)
         throws IOException
     {
@@ -476,5 +500,5 @@
             "<MouseEvent "
             + "procTime=\"0\" "
-            + "duration=\"" + EVENT_DURATION + "\" "
+            + "duration=\"" + duration + "\" "
             + "source=\"" + target.getJacaretoHierarchy() + "\" "
             + "class=\"" + target.getSpecification().getType() + "\" "
