diff --git a/ctf/org.eclipse.tracecompass.tmf.ctf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ctf/ui/swtbot/tests/AbstractImportAndReadSmokeTest.java b/ctf/org.eclipse.tracecompass.tmf.ctf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ctf/ui/swtbot/tests/AbstractImportAndReadSmokeTest.java
index 20b32ba..3c31359 100644
--- a/ctf/org.eclipse.tracecompass.tmf.ctf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ctf/ui/swtbot/tests/AbstractImportAndReadSmokeTest.java
+++ b/ctf/org.eclipse.tracecompass.tmf.ctf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ctf/ui/swtbot/tests/AbstractImportAndReadSmokeTest.java
@@ -18,8 +18,9 @@
 
 import java.util.List;
 
+import org.apache.log4j.ConsoleAppender;
 import org.apache.log4j.Logger;
-import org.apache.log4j.varia.NullAppender;
+import org.apache.log4j.SimpleLayout;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
@@ -88,7 +89,7 @@
         /* set up for swtbot */
         SWTBotPreferences.TIMEOUT = 50000; /* 50 second timeout */
         fLogger.removeAllAppenders();
-        fLogger.addAppender(new NullAppender());
+        fLogger.addAppender(new ConsoleAppender(new SimpleLayout()));
         fBot = new SWTWorkbenchBot();
 
         SWTBotUtils.closeView("welcome", fBot);
diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java
index dd96180..4abad94 100644
--- a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java
+++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/ControlFlowViewTest.java
@@ -14,6 +14,7 @@
 
 import static org.junit.Assert.assertTrue;
 
+import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.jdt.annotation.NonNull;
@@ -35,8 +36,11 @@
 import org.eclipse.tracecompass.tmf.core.timestamp.TmfTimeRange;
 import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager;
 import org.eclipse.tracecompass.tmf.ui.swtbot.tests.shared.ConditionHelpers;
+import org.eclipse.tracecompass.tmf.ui.views.timegraph.AbstractTimeGraphView;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ILinkEvent;
+import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.model.ITimeEvent;
 import org.eclipse.tracecompass.tmf.ui.widgets.timegraph.widgets.TimeGraphControl;
+import org.eclipse.ui.IWorkbenchPart;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -79,13 +83,19 @@
 
     @Test
     public void testBug() {
-        testToolBarFollowCPUForwardBackward();
-        after();
-        before();
-        testKeyboardLeftRight();
-        after();
-        before();
-        testToolBarSelectNextPreviousEvent();
+        for (int i = 0; i < 30; i++) {
+            before();
+            testToolBarFollowCPUForwardBackward();
+            after();
+            before();
+            testKeyboardLeftRight();
+            after();
+            before();
+            testToolBarSelectNextPreviousEvent();
+            after();
+            System.out.println("testBug " + i);
+        }
+
     }
 
     /**
@@ -115,54 +125,94 @@
             }
         });
 
+//        fBot.waitUntil(new ZoomCondition(timegraph));
+
         /* press ARROW_RIGHT 3 times */
         KEYBOARD.pressShortcut(Keystrokes.RIGHT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME1.getValue(), TID1_TIME2.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.RIGHT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.RIGHT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME3)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME3));
 
         /* press Shift-ARROW_RIGHT 3 times */
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME4.getValue(), TID1_TIME5.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME5.getValue(), TID1_TIME6.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME6)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME6));
 
         /* press Shift-ARROW_LEFT 4 times */
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME4.getValue(), TID1_TIME5.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME2)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME2));
 
         /* press ARROW_RIGHT 2 times */
         KEYBOARD.pressShortcut(Keystrokes.RIGHT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.RIGHT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME4)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME4));
 
         /* press Shift-ARROW_LEFT 3 times */
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME1.getValue(), TID1_TIME2.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.LEFT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME1)));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME1));
 
         /* press Shift-ARROW_RIGHT 4 times */
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME1.getValue(), TID1_TIME2.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT);
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT);
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME4.getValue(), TID1_TIME5.getValue()));
         KEYBOARD.pressShortcut(Keystrokes.SHIFT, Keystrokes.RIGHT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME5)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME5));
 
         /* press ARROW_LEFT 5 times */
         KEYBOARD.pressShortcut(Keystrokes.LEFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.LEFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.LEFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME1.getValue(), TID1_TIME2.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.LEFT);
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         KEYBOARD.pressShortcut(Keystrokes.LEFT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(START_TIME));
@@ -195,54 +245,91 @@
             }
         });
 
+//        fBot.waitUntil(new ZoomCondition(timegraph));
+
         /* click "Select Next Event" 3 times */
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME1.getValue(), TID1_TIME2.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME3)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME3));
 
         /* shift-click "Select Next Event" 3 times */
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME4.getValue(), TID1_TIME5.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME5.getValue(), TID1_TIME6.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME6)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME6));
 
         /* shift-click "Select Previous Event" 4 times */
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME4.getValue(), TID1_TIME5.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(SWT.SHIFT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME3, TID1_TIME2)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME2));
 
         /* click "Select Next Event" 2 times */
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click();
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME4)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME4));
 
         /* shift-click "Select Previous Event" 3 times */
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME1.getValue(), TID1_TIME2.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click(SWT.SHIFT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME1)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME1));
 
         /* shift-click "Select Next Event" 4 times */
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT);
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME4.getValue(), TID1_TIME5.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_NEXT_EVENT).click(SWT.SHIFT);
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(TID1_TIME4, TID1_TIME5)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(TID1_TIME5));
 
         /* click "Select Previous Event" 5 times */
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click();
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME3.getValue(), TID1_TIME4.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click();
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME2.getValue(), TID1_TIME3.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click();
+        fBot.waitUntil(new TimeEventCondition(timegraph, TID1_TIME1.getValue(), TID1_TIME2.getValue()));
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click();
+        fBot.waitUntil(new ViewDirtyCondition(), 30000000);
         fViewBot.toolbarButton(SELECT_PREVIOUS_EVENT).click();
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(START_TIME));
@@ -349,4 +436,82 @@
         fBot.waitUntil(ConditionHelpers.selectionRange(new TmfTimeRange(START_TIME, START_TIME)));
         assertTrue(TmfTraceManager.getInstance().getCurrentTraceContext().getWindowRange().contains(START_TIME));
     }
+
+//    private static class ZoomCondition extends DefaultCondition  {
+//
+//        private TimeGraphControl timegraph;
+//
+//        public ZoomCondition(TimeGraphControl timegraph) {
+//            super();
+//            this.timegraph = timegraph;
+//        }
+//
+//        @Override
+//        public boolean test() throws Exception {
+//            Iterator<ITimeEvent> iter = timegraph.getSelectedTrace().getTimeEventsIterator();
+//            int count = 0;
+//            ITimeEvent event = null;
+//            while (iter.hasNext() && count++ < 6) {
+//                event = iter.next();
+//                System.out.println(count+":"+event.getTime());
+//            }
+//            if (count == 6 && event != null && event.getTime() == TID1_TIME5.getValue()) {
+//                return true;
+//            }
+//            return false;
+//        }
+//
+//        @Override
+//        public String getFailureMessage() {
+//            return "Time Event not found";
+//        }
+//    }
+
+    private static class TimeEventCondition extends DefaultCondition  {
+
+        private TimeGraphControl timegraph;
+        private long fEventEnd;
+        private long fEventStart;
+
+        public TimeEventCondition(TimeGraphControl timegraph, long eventStart, long eventEnd) {
+            super();
+            this.timegraph = timegraph;
+            fEventStart = eventStart;
+            fEventEnd = eventEnd;
+        }
+
+        @Override
+        public boolean test() throws Exception {
+            Iterator<ITimeEvent> iter = timegraph.getSelectedTrace().getTimeEventsIterator();
+            ITimeEvent event = null;
+            while (iter.hasNext()) {
+                event = iter.next();
+                if (event != null && event.getTime() == fEventStart && event.getTime() + event.getDuration() == fEventEnd) {
+                    System.out.println("found " + fEventStart  + "-" + fEventEnd);
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        @Override
+        public String getFailureMessage() {
+            return "Time Event not found";
+        }
+    }
+
+    private class ViewDirtyCondition extends DefaultCondition  {
+
+        @Override
+        public boolean test() throws Exception {
+            IWorkbenchPart part = fViewBot.getViewReference().getPart(false);
+            AbstractTimeGraphView view = (AbstractTimeGraphView) part;
+            return !view.isDirty();
+        }
+
+        @Override
+        public String getFailureMessage() {
+            return "View is dirty";
+        }
+    }
 }
diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/KernelTest.java b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/KernelTest.java
index 082d1ef..6ed759b 100644
--- a/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/KernelTest.java
+++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.ui.swtbot.tests/src/org/eclipse/tracecompass/lttng2/kernel/ui/swtbot/tests/KernelTest.java
@@ -18,9 +18,6 @@
 
 import java.util.List;
 
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Logger;
-import org.apache.log4j.SimpleLayout;
 import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;
 import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;
 import org.eclipse.swtbot.swt.finder.finders.UIThreadRunnable;
@@ -55,7 +52,7 @@
     protected static SWTWorkbenchBot fBot;
 
     /** The Log4j logger instance. */
-    private static final Logger fLogger = Logger.getRootLogger();
+//    private static final Logger fLogger = Logger.getRootLogger();
 
     /**
      * Before Class
@@ -67,9 +64,9 @@
         /* set up for swtbot */
         SWTBotPreferences.TIMEOUT = 20000; /* 20 second timeout */
         SWTBotPreferences.KEYBOARD_LAYOUT = "EN_US";
-        SWTBotPreferences.PLAYBACK_DELAY = 200;
-        fLogger.removeAllAppenders();
-        fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT));
+//        SWTBotPreferences.PLAYBACK_DELAY = 200;
+//        fLogger.removeAllAppenders();
+//        fLogger.addAppender(new ConsoleAppender(new SimpleLayout(), ConsoleAppender.SYSTEM_OUT));
         fBot = new SWTWorkbenchBot();
 
         final List<SWTBotView> openViews = fBot.views();
@@ -92,7 +89,7 @@
     @AfterClass
     public static void afterClass() {
         SWTBotUtils.deleteProject(TRACE_PROJECT_NAME, fBot);
-        fLogger.removeAllAppenders();
+//        fLogger.removeAllAppenders();
     }
 
     private static void switchKernelPerspective() {
diff --git a/releng/org.eclipse.tracecompass.alltests/.settings/org.eclipse.jdt.core.prefs b/releng/org.eclipse.tracecompass.alltests/.settings/org.eclipse.jdt.core.prefs
index 0409c61..b37d41e 100644
--- a/releng/org.eclipse.tracecompass.alltests/.settings/org.eclipse.jdt.core.prefs
+++ b/releng/org.eclipse.tracecompass.alltests/.settings/org.eclipse.jdt.core.prefs
@@ -31,7 +31,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecation=error
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
-org.eclipse.jdt.core.compiler.problem.discouragedReference=error
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=error
@@ -40,7 +40,7 @@
 org.eclipse.jdt.core.compiler.problem.fieldHiding=error
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=error
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=error
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=error
 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=error
@@ -108,6 +108,7 @@
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=error
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/CallsiteEventsInTableTest.java b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/CallsiteEventsInTableTest.java
index 90bb260..e057ac2 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/CallsiteEventsInTableTest.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui.swtbot.tests/src/org/eclipse/tracecompass/tmf/ui/swtbot/tests/viewers/events/CallsiteEventsInTableTest.java
@@ -76,6 +76,7 @@
      */
     @BeforeClass
     public static void init() {
+        SWTBotUtils.delay(30000);
         SWTBotUtils.failIfUIThread();
 
         /* set up test trace*/
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/timegraph/AbstractTimeGraphView.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/timegraph/AbstractTimeGraphView.java
index 9e5dfda..c947ae6 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/timegraph/AbstractTimeGraphView.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/views/timegraph/AbstractTimeGraphView.java
@@ -104,6 +104,12 @@
     /** The timegraph wrapper */
     private ITimeGraphWrapper fTimeGraphWrapper;
 
+    private int fDirty;
+
+    public boolean isDirty() {
+        return fDirty > 0;
+    }
+
     /** The selected trace */
     private ITmfTrace fTrace;
 
@@ -459,6 +465,7 @@
             fMonitor.setCanceled(true);
         }
     }
+    private static int fZoomThreadCount = 0;
 
     private class ZoomThread extends Thread {
         private final @NonNull List<TimeGraphEntry> fZoomEntryList;
@@ -466,9 +473,15 @@
         private final long fZoomEndTime;
         private final long fResolution;
         private final @NonNull  IProgressMonitor fMonitor;
+        private int fZoomThreadId = 0;
+        private boolean fStarted = false;
 
         public ZoomThread(@NonNull List<TimeGraphEntry> entryList, long startTime, long endTime, String name) {
             super(name + " zoom"); //$NON-NLS-1$
+            synchronized (ZoomThread.class) {
+                fZoomThreadCount++;
+                fZoomThreadId = fZoomThreadCount;
+            }
             fZoomEntryList = entryList;
             fZoomStartTime = startTime;
             fZoomEndTime = endTime;
@@ -478,20 +491,37 @@
 
         @Override
         public void run() {
-            for (TimeGraphEntry entry : fZoomEntryList) {
-                if (fMonitor.isCanceled()) {
-                    return;
+            if (!fStarted) {
+                fStarted = true;
+                synchronized (ZoomThread.class) {
+                    fDirty++;
+                    System.out.println("zoom thread start " + fZoomThreadId + "(" + fDirty + " dirty)");
                 }
-                if (entry == null) {
-                    break;
-                }
-                zoom(entry, fMonitor);
+            } else {
+                System.out.println();
             }
-            /* Refresh the arrows when zooming */
-            List<ILinkEvent> events = getLinkList(fZoomStartTime, fZoomEndTime, fResolution, fMonitor);
-            if (events != null) {
-                fTimeGraphWrapper.getTimeGraphViewer().setLinks(events);
-                redraw();
+            try {
+                for (TimeGraphEntry entry : fZoomEntryList) {
+                    if (fMonitor.isCanceled()) {
+                        return;
+                    }
+                    if (entry == null) {
+                        break;
+                    }
+                    zoom(entry, fMonitor);
+                }
+                /* Refresh the arrows when zooming */
+                List<ILinkEvent> events = getLinkList(fZoomStartTime, fZoomEndTime, fResolution, fMonitor);
+                if (events != null) {
+                    fTimeGraphWrapper.getTimeGraphViewer().setLinks(events);
+                    redraw();
+                }
+                synchronized (ZoomThread.class) {
+                    fDirty--;
+                    System.out.println("zoom thread end " + fZoomThreadId + "(" + fDirty + " dirty)");
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
             }
         }
 
@@ -516,6 +546,7 @@
         }
 
         public void cancel() {
+            System.out.println("cancel " + fZoomThreadId);
             fMonitor.setCanceled(true);
         }
     }
@@ -539,6 +570,7 @@
      */
     public AbstractTimeGraphView(String id, TimeGraphPresentationProvider pres) {
         super(id);
+        fDirty = 0;
         fPresentation = pres;
         fDisplayWidth = Display.getDefault().getBounds().width;
     }
@@ -847,6 +879,7 @@
 
     @Override
     public void createPartControl(Composite parent) {
+        fDirty = 0;
         super.createPartControl(parent);
         if (fColumns == null || fLabelProvider == null) {
             fTimeGraphWrapper = new TimeGraphViewerWrapper(parent, SWT.NONE);
@@ -1188,6 +1221,7 @@
                 }
                 if (fEntryList != fTimeGraphWrapper.getInput()) {
                     fTimeGraphWrapper.setInput(fEntryList);
+//                    fTimeGraphWrapper.getTimeGraphViewer().setLinks(null);
                 } else {
                     fTimeGraphWrapper.refresh();
                 }
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/TimeGraphViewer.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/TimeGraphViewer.java
index bd6fed8..62b5866 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/TimeGraphViewer.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/TimeGraphViewer.java
@@ -901,7 +901,9 @@
      * @since 1.0
      */
     public void selectNextEvent(boolean extend) {
+        System.out.println("selectNextEvent before ("+extend+") "+getSelectionBegin()+"-"+getSelectionEnd()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
         fTimeGraphCtrl.selectNextEvent(extend);
+        System.out.println("selectNextEvent after  ("+extend+") "+getSelectionBegin()+"-"+getSelectionEnd()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
         adjustVerticalScrollBar();
     }
 
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/widgets/TimeGraphControl.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/widgets/TimeGraphControl.java
index af63f1d..4c02f5f 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/widgets/TimeGraphControl.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/widgets/TimeGraphControl.java
@@ -1872,7 +1872,9 @@
             selectPrevEvent(extend);
         } else if (SWT.ARROW_RIGHT == e.keyCode && fDragState == DRAG_NONE) {
             boolean extend = (e.stateMask & SWT.SHIFT) != 0;
+            System.out.println("ARROW_RIGHT before ("+extend+") "+fTimeProvider.getSelectionBegin()+"-"+fTimeProvider.getSelectionEnd()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
             selectNextEvent(extend);
+            System.out.println("ARROW_RIGHT after  ("+extend+") "+fTimeProvider.getSelectionBegin()+"-"+fTimeProvider.getSelectionEnd()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
         } else if (SWT.PAGE_DOWN == e.keyCode) {
             int page = countPerPage();
             idx = getSelectedIndex();
