diff --git a/com.minres.scviewer.e4.product/scviewer.product b/com.minres.scviewer.e4.product/scviewer.product
index 266b0c7..a367b8e 100644
--- a/com.minres.scviewer.e4.product/scviewer.product
+++ b/com.minres.scviewer.e4.product/scviewer.product
@@ -54,9 +54,12 @@
    
 
    
+      
+      
       
       
       
+      
       
       
    
diff --git a/p2repositories/com.minres.scviewer.updateSite/category.xml b/p2repositories/com.minres.scviewer.updateSite/category.xml
index a4f42b6..4b66073 100644
--- a/p2repositories/com.minres.scviewer.updateSite/category.xml
+++ b/p2repositories/com.minres.scviewer.updateSite/category.xml
@@ -3,9 +3,13 @@
    
       
    
+   
+      
+   
    
       
          Viewer for SystemC Verification (SCV) library's transaction recording
       
    
+   
 
diff --git a/plugins/com.minres.scviewer.e4.application/Application.e4xmi b/plugins/com.minres.scviewer.e4.application/Application.e4xmi
index 66eb04a..0f5ec93 100644
--- a/plugins/com.minres.scviewer.e4.application/Application.e4xmi
+++ b/plugins/com.minres.scviewer.e4.application/Application.e4xmi
@@ -1,6 +1,6 @@
 
 
-  
+  
     
       
         
@@ -144,10 +144,7 @@
       
         stretch
       
-      
-        Draggable
-      
-      
+      
         Draggable
       
     
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusBarControl.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusBarControl.java
index f7f4111..e51d975 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusBarControl.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusBarControl.java
@@ -26,14 +26,10 @@ import org.eclipse.e4.ui.di.UISynchronize;
 import org.eclipse.e4.ui.model.application.ui.menu.MToolControl;
 import org.eclipse.e4.ui.workbench.modeling.EModelService;
 import org.eclipse.jface.action.StatusLineManager;
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.ProgressBar;
 import org.osgi.service.prefs.PreferencesService;
 
 import com.minres.scviewer.e4.application.AppModelId;
-import com.minres.scviewer.e4.application.Messages;
 
 /**
  * The Class StatusBarControl.
@@ -58,9 +54,6 @@ public class StatusBarControl {
 	/** The monitor. */
 	private SyncedProgressMonitor monitor;
 	
-	/** The progress bar. */
-	private ProgressBar progressBar;
-
 	/**
 	 * Instantiates a new status bar control.
 	 *
@@ -84,9 +77,7 @@ public class StatusBarControl {
 		if (toolControl.getElementId().equals(AppModelId.TOOLCONTROL_ORG_ECLIPSE_UI_STATUSLINE)) { //$NON-NLS-1$
 			createStatusLine(parent, toolControl);
 		} else if (toolControl.getElementId().equals(AppModelId.TOOLCONTROL_ORG_ECLIPSE_UI_HEAPSTATUS)) { //$NON-NLS-1$
-			createHeapStatus(parent, toolControl);
-		} else if (toolControl.getElementId().equals(AppModelId.TOOLCONTROL_ORG_ECLIPSE_UI_PROGRESSBAR)) { //$NON-NLS-1$
-			createProgressBar(parent, toolControl);
+			new HeapStatus(parent, osgiPreverences.getSystemPreferences());
 		}
 	}
 
@@ -101,36 +92,6 @@ public class StatusBarControl {
 		}
 	}
 
-	/**
-	 * Creates the progress bar.
-	 *
-	 * @param parent the parent
-	 * @param toolControl the tool control
-	 */
-	private void createProgressBar(Composite parent, MToolControl toolControl) {
-		new Label(parent, SWT.NONE);
-		progressBar = new ProgressBar(parent, SWT.SMOOTH);
-		progressBar.setBounds(100, 10, 200, 20);
-		new Label(parent, SWT.NONE);
-		monitor=new SyncedProgressMonitor(progressBar);
-		Job.getJobManager().setProgressProvider(new ProgressProvider() {
-			@Override
-			public IProgressMonitor createMonitor(Job job) {
-				return monitor.addJob(job);
-			}
-		});
-	}
-
-	/**
-	 * Creates the heap status.
-	 *
-	 * @param parent the parent
-	 * @param toolControl the tool control
-	 */
-	private void createHeapStatus(Composite parent, MToolControl toolControl) {
-		new HeapStatus(parent, osgiPreverences.getSystemPreferences());
-	}
-
 	/**
 	 * Creates the status line.
 	 *
@@ -140,6 +101,14 @@ public class StatusBarControl {
 	private void createStatusLine(Composite parent, MToolControl toolControl) {
 		//		IEclipseContext context = modelService.getContainingContext(toolControl);
 		manager.createControl(parent);
+		monitor=new SyncedProgressMonitor(manager.getProgressMonitor());
+		Job.getJobManager().setProgressProvider(new ProgressProvider() {
+			@Override
+			public IProgressMonitor createMonitor(Job job) {
+				return monitor.addJob(job);
+			}
+		});
+
 	}
 
 	/**
@@ -160,25 +129,17 @@ public class StatusBarControl {
 	 */
 	private final class SyncedProgressMonitor extends NullProgressMonitor {
 
-		// thread-Safe via thread confinement of the UI-Thread 
-		/** The running tasks. */
-		// (means access only via UI-Thread)
-		private long runningTasks = 0L;
-		
 		/** The progress bar. */
-		private ProgressBar progressBar;
+		private IProgressMonitor progressBar;
 
 		/**
 		 * Instantiates a new synced progress monitor.
 		 *
-		 * @param progressBar the progress bar
+		 * @param iProgressMonitor the progress bar
 		 */
-		public SyncedProgressMonitor(ProgressBar progressBar) {
+		public SyncedProgressMonitor(IProgressMonitor iProgressMonitor) {
 			super();
-			this.progressBar = progressBar;
-			runningTasks=0;
-			progressBar.setSelection(0);
-			progressBar.setEnabled(false);
+			this.progressBar = iProgressMonitor;
 		}
 
 		/* (non-Javadoc)
@@ -189,13 +150,41 @@ public class StatusBarControl {
 			sync.asyncExec(new Runnable() {
 				@Override
 				public void run() {
-					runningTasks++;
-					if(runningTasks == 1) {  // --- no task is running at the moment ---
-						progressBar.setEnabled(true);
-						progressBar.setSelection(0);
-					}
-					progressBar.setMaximum(totalWork);
-					progressBar.setToolTipText(Messages.StatusBarControl_1 + runningTasks + Messages.StatusBarControl_2 + name);
+					progressBar.beginTask(name, totalWork);
+				}
+			});
+		}
+
+		/**
+		 * This implementation does nothing.
+		 * Subclasses may override this method to do something
+		 * with the name of the task.
+		 * 
+		 * @see IProgressMonitor#setTaskName(String)
+		 */
+		@Override
+		public void setTaskName(String name) {
+			sync.asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					progressBar.setTaskName(name);
+				}
+			});
+		}
+
+		/**
+		 * This implementation does nothing.
+		 * Subclasses may override this method to do interesting
+		 * processing when a subtask begins.
+		 * 
+		 * @see IProgressMonitor#subTask(String)
+		 */
+		@Override
+		public void subTask(String name) {
+			sync.asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					progressBar.subTask(name);
 				}
 			});
 		}
@@ -208,7 +197,16 @@ public class StatusBarControl {
 			sync.asyncExec(new Runnable() {
 				@Override
 				public void run() {
-					progressBar.setSelection(progressBar.getSelection() + work);
+					progressBar.worked(work);
+				}
+			});
+		}
+		@Override
+		public void done() {
+			sync.asyncExec(new Runnable() {
+				@Override
+				public void run() {
+					progressBar.done();
 				}
 			});
 		}
@@ -228,14 +226,8 @@ public class StatusBarControl {
 							@Override
 							public void run() {
 								if(event.getResult()==null) return;
-								if(runningTasks>0) runningTasks--;
-								if (runningTasks > 0){	// --- some tasks are still running ---
-									progressBar.setToolTipText(Messages.StatusBarControl_3 + runningTasks);
-								} else { // --- all tasks are done (a reset of selection could also be done) ---
-									progressBar.setToolTipText(Messages.StatusBarControl_4);
-									progressBar.setSelection(progressBar.getMaximum());
-									progressBar.setEnabled(false);
-								}
+								if(!event.getResult().isOK())
+									progressBar.done();
 							}
 						});
 						// clean-up
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusLineContributionItem.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusLineContributionItem.java
new file mode 100644
index 0000000..4b40081
--- /dev/null
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/StatusLineContributionItem.java
@@ -0,0 +1,230 @@
+package com.minres.scviewer.e4.application.internal.status;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+
+import org.eclipse.jface.action.ContributionItem;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.LegacyActionTools;
+import org.eclipse.jface.action.StatusLineLayoutData;
+import org.eclipse.jface.resource.JFaceColors;
+
+
+/**
+ * Contribution item for the status line.
+ * @since 2.0
+ */
+public class StatusLineContributionItem extends ContributionItem {
+
+	/**
+	 * Internal mouse listener to track double clicking the status line item.
+	 * @since 3.0
+	 */
+	private class Listener extends MouseAdapter {
+		@Override
+		public void mouseDoubleClick(MouseEvent e) {
+			if (fActionHandler != null && fActionHandler.isEnabled())
+				fActionHandler.run();
+		}
+	}
+
+	/**
+	 * Left and right margin used in CLabel.
+	 * @since 2.1
+	 */
+	private static final int INDENT= 3;
+	/**
+	 * Default number of characters that should fit into the item.
+	 * @since 3.0
+	 */
+	static final int DEFAULT_WIDTH_IN_CHARS = 19;
+	/**
+	 * Pre-computed label width hint.
+	 * @since 2.1
+	 */
+	private int fFixedWidth= -1;
+	/**
+	 * Pre-computed label height hint.
+	 * @since 3.0
+	 */
+	private int fFixedHeight= -1;
+	/** The text */
+	private String fText;
+	/** The image */
+	private Image fImage;
+	/**
+	 * The error text.
+	 * @since 3.0
+	 */
+	private String fErrorText;
+	/**
+	 * The error image.
+	 * @since 3.0
+	 */
+	private Image fErrorImage;
+	/**
+	 * The tool tip text.
+	 * @since 3.0
+	 */
+	private String fToolTipText;
+	/**
+	 * Number of characters that should fit into the item.
+	 * @since 3.0
+	 */
+	private int fWidthInChars;
+	/** The status line label widget */
+	private CLabel fLabel;
+	/**
+	 * The action handler.
+	 * @since 3.0
+	 */
+	private IAction fActionHandler;
+	/**
+	 * The mouse listener
+	 * @since 3.0
+	 */
+	private MouseListener fMouseListener;
+
+
+	/**
+	 * Creates a new item with the given attributes.
+	 *
+	 * @param id the item's id
+	 * @param visible the visibility of this item
+	 * @param widthInChars the width in characters
+	 * @since 3.0
+	 */
+	public StatusLineContributionItem(String id, boolean visible, int widthInChars) {
+		super(id);
+		setVisible(visible);
+		fWidthInChars= widthInChars;
+	}
+
+	@Override
+	public void fill(Composite parent) {
+
+		Label sep= new Label(parent, SWT.SEPARATOR);
+		CLabel label=new CLabel(parent, SWT.SHADOW_NONE);	
+		label.setText(getId());
+		fLabel= new CLabel(parent, SWT.SHADOW_IN);
+		fLabel.setAlignment(SWT.RIGHT);
+
+		fLabel.addDisposeListener(e -> fMouseListener = null);
+		if (fActionHandler != null) {
+			fMouseListener= new Listener();
+			fLabel.addMouseListener(fMouseListener);
+		}
+
+		StatusLineLayoutData data= new StatusLineLayoutData();
+		data.widthHint= getWidthHint(parent);
+		fLabel.setLayoutData(data);
+
+		data= new StatusLineLayoutData();
+		data.heightHint= getHeightHint(parent);
+		sep.setLayoutData(data);
+
+		updateMessageLabel();
+	}
+
+	public void setActionHandler(IAction actionHandler) {
+		if (fActionHandler != null && actionHandler == null && fMouseListener != null) {
+			if (!fLabel.isDisposed())
+				fLabel.removeMouseListener(fMouseListener);
+			fMouseListener= null;
+		}
+
+		fActionHandler= actionHandler;
+
+		if (fLabel != null && !fLabel.isDisposed() && fMouseListener == null && fActionHandler != null) {
+			fMouseListener= new Listener();
+			fLabel.addMouseListener(fMouseListener);
+		}
+	}
+
+	/**
+	 * Returns the width hint for this label.
+	 *
+	 * @param control the root control of this label
+	 * @return the width hint for this label
+	 * @since 2.1
+	 */
+	private int getWidthHint(Composite control) {
+		if (fFixedWidth < 0) {
+			GC gc= new GC(control);
+			gc.setFont(control.getFont());
+			fFixedWidth = (int) gc.getFontMetrics().getAverageCharacterWidth() * fWidthInChars;
+			fFixedWidth += INDENT * 2;
+			gc.dispose();
+		}
+		return fFixedWidth;
+	}
+
+	/**
+	 * Returns the height hint for this label.
+	 *
+	 * @param control the root control of this label
+	 * @return the height hint for this label
+	 * @since 3.0
+	 */
+	private int getHeightHint(Composite control) {
+		if (fFixedHeight < 0) {
+			GC gc= new GC(control);
+			gc.setFont(control.getFont());
+			fFixedHeight= gc.getFontMetrics().getHeight();
+			gc.dispose();
+		}
+		return fFixedHeight;
+	}
+
+	/**
+	 * Updates the message label widget.
+	 *
+	 * @since 3.0
+	 */
+	private void updateMessageLabel() {
+		if (fLabel != null && !fLabel.isDisposed()) {
+			Display display= fLabel.getDisplay();
+			if ((fErrorText != null && !fErrorText.isEmpty()) || fErrorImage != null) {
+				fLabel.setForeground(JFaceColors.getErrorText(display));
+				fLabel.setText(fErrorText);
+				fLabel.setImage(fErrorImage);
+				if (fToolTipText != null)
+					fLabel.setToolTipText(fToolTipText);
+				else if (fErrorText.length() > fWidthInChars)
+					fLabel.setToolTipText(fErrorText);
+				else
+					fLabel.setToolTipText(null);
+
+			} else {
+				fLabel.setForeground(fLabel.getParent().getForeground());
+				fLabel.setText(fText);
+				fLabel.setImage(fImage);
+				if (fToolTipText != null)
+					fLabel.setToolTipText(fToolTipText);
+				else if (fText != null && fText.length() > fWidthInChars)
+					fLabel.setToolTipText(fText);
+				else
+					fLabel.setToolTipText(null);
+			}
+		}
+	}
+
+	public void setText(String message){
+		this.fText=message;
+		updateMessageLabel();
+	}
+
+	public void setErrorText(String message){
+		this.fErrorText=message;
+		updateMessageLabel();
+	}
+}
+
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/TextContributionItem.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/TextContributionItem.java
new file mode 100644
index 0000000..ed9e9fc
--- /dev/null
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/TextContributionItem.java
@@ -0,0 +1,72 @@
+package com.minres.scviewer.e4.application.internal.status;
+
+import org.eclipse.jface.action.ContributionItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The Class TextContributionItem.
+ */
+class TextContributionItem extends ContributionItem {
+
+	/** The label string. */
+	final String labelString;
+	
+	/** The text. */
+	CLabel label, text;
+	
+	/** The content. */
+	private String content;
+
+	/**
+	 * Instantiates a new text contribution item.
+	 *
+	 * @param labelString the label string
+	 */
+	public TextContributionItem(String labelString) {
+		super();
+		this.labelString = labelString;
+		content=""; //$NON-NLS-1$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void fill(Composite parent) {
+		Composite box=new Composite(parent, SWT.NONE); //NONE
+		box.setLayout(new GridLayout(2, false));
+		label=new CLabel(box, SWT.SHADOW_NONE);	
+		label.setText(labelString);
+		text=new CLabel(box, SWT.SHADOW_IN);
+		text.setAlignment(SWT.RIGHT);
+		text.setText(" ");
+		Point p = text.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+		GridData layoutData=new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
+		layoutData.minimumWidth=12*p.x;
+		text.setLayoutData(layoutData);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.action.ContributionItem#isDynamic()
+	 */
+	@Override
+	public boolean isDynamic() {
+		return true;
+	}
+
+	/**
+	 * Sets the text.
+	 *
+	 * @param message the new text
+	 */
+	public void setText(String message){
+		this.content=message;
+		if(text!=null && !text.isDisposed()) text.setText(content);
+	}
+
+}
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/WaveStatusBarControl.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/WaveStatusBarControl.java
index a1c2006..767d22e 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/WaveStatusBarControl.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/internal/status/WaveStatusBarControl.java
@@ -23,6 +23,10 @@ import org.eclipse.jface.action.StatusLineManager;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Composite;
@@ -50,76 +54,9 @@ public class WaveStatusBarControl extends StatusBarControl {
 	@Inject
 	EModelService modelService;
 
-	/**
-	 * The Class TextContributionItem.
-	 */
-	class TextContributionItem extends ContributionItem {
-
-		/** The label string. */
-		final String labelString;
-		
-		/** The width. */
-		//final int width;
-		
-		/** The text. */
-		CLabel label, text;
-		
-		/** The content. */
-		private String content;
-
-		/**
-		 * Instantiates a new text contribution item.
-		 *
-		 * @param labelString the label string
-		 * @param width the width
-		 */
-		public TextContributionItem(String labelString /*, int width */) {
-			super();
-			this.labelString = labelString;
-			//this.width=width;
-			content=""; //$NON-NLS-1$
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Composite)
-		 */
-		@Override
-		public void fill(Composite parent) {
-			Composite box=new Composite(parent, SWT.NONE); //NONE
-			box.setLayout(new GridLayout(2, false));
-			label=new CLabel(box, SWT.SHADOW_NONE);	
-			label.setText(labelString);
-			text=new CLabel(box, SWT.SHADOW_IN);
-			text.setAlignment(SWT.RIGHT);
-			//GridData layoutData=new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
-			GridData layoutData=new GridData(SWT.DEFAULT, SWT.DEFAULT, true, false);
-			layoutData.minimumWidth=70;
-			//layoutData.minimumWidth=width;
-			text.setLayoutData(layoutData);
-		}
-
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.action.ContributionItem#isDynamic()
-		 */
-		@Override
-		public boolean isDynamic() {
-			return true;
-		}
-
-		/**
-		 * Sets the text.
-		 *
-		 * @param message the new text
-		 */
-		public void setText(String message){
-			this.content=message;
-			if(text!=null && !text.isDisposed()) text.setText(content);
-		}
-
-	}
 
 	/** The zoom contribution. */
-	TextContributionItem cursorContribution, markerContribution, markerDiffContribution, zoomContribution;
+	StatusLineContributionItem cursorContribution, markerContribution, markerDiffContribution, zoomContribution;
 
 	/**
 	 * Instantiates a new wave status bar control.
@@ -130,10 +67,10 @@ public class WaveStatusBarControl extends StatusBarControl {
 	public WaveStatusBarControl(UISynchronize sync) {
 		super(sync);
 				
-		cursorContribution = new TextContributionItem(Messages.WaveStatusBarControl_5 /*, 150 */); //150
-		markerContribution = new TextContributionItem(Messages.WaveStatusBarControl_6 /*, 150 */); //150
-		markerDiffContribution = new TextContributionItem(Messages.WaveStatusBarControl_7 /*, 150 */); //150
-		zoomContribution = new TextContributionItem(Messages.WaveStatusBarControl_8 /*, 60 */); //60
+		cursorContribution = new StatusLineContributionItem(Messages.WaveStatusBarControl_5, true, 20);
+		markerContribution = new StatusLineContributionItem(Messages.WaveStatusBarControl_6, true, 20);
+		markerDiffContribution = new StatusLineContributionItem(Messages.WaveStatusBarControl_7, true, 20);
+		zoomContribution = new StatusLineContributionItem(Messages.WaveStatusBarControl_8, true, 8);
 		manager.appendToGroup(StatusLineManager.BEGIN_GROUP,cursorContribution);
 		manager.appendToGroup(StatusLineManager.BEGIN_GROUP,markerContribution);
 		manager.appendToGroup(StatusLineManager.BEGIN_GROUP,markerDiffContribution);
diff --git a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
index aea6b89..81cb383 100644
--- a/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
+++ b/plugins/com.minres.scviewer.e4.application/src/com/minres/scviewer/e4/application/parts/WaveformViewer.java
@@ -34,13 +34,9 @@ import javax.inject.Named;
 import org.eclipse.core.internal.preferences.InstancePreferences;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.SubMonitor;
-import org.eclipse.core.runtime.jobs.IJobChangeEvent;
 import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 import org.eclipse.core.runtime.jobs.JobGroup;
 import org.eclipse.core.runtime.preferences.ConfigurationScope;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
@@ -535,9 +531,7 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
 
 		@Override
 		protected IStatus run(IProgressMonitor monitor) {
-			monitor.setTaskName(Messages.WaveformViewer_16+file.getName());
 			boolean res = database.load(file);
-			monitor.done();
 			database.addPropertyChangeListener(waveformPane);
 			return res?Status.OK_STATUS:Status.CANCEL_STATUS;
 		}
@@ -549,15 +543,14 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
 	 */
 	protected void loadDatabase(final Map state) {
 		fileMonitor.removeFileChangeListener(this);
-		MultiStatus fStatus= new MultiStatus("blah", IStatus.OK, Messages.WaveformViewer_13, null);
 		Job job = new Job(Messages.WaveformViewer_15) {
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
-				SubMonitor subMonitor = SubMonitor.convert(monitor, filesToLoad.size());
+				IProgressMonitor progressGroup = getJobManager().createProgressGroup(); 
 				JobGroup jobGroup = new JobGroup(Messages.WaveformViewer_15, filesToLoad.size(), filesToLoad.size());
 				filesToLoad.forEach((final File file) -> {
 					Job job = new DbLoadJob(Messages.WaveformViewer_16 + file.getName(), file);
-					job.setProgressGroup(subMonitor, 1);
+					job.setProgressGroup(progressGroup, 1);
 					job.setJobGroup(jobGroup);
 					job.schedule();
 				});
@@ -569,34 +562,28 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
 				if (monitor.isCanceled())
 					throw new OperationCanceledException(Messages.WaveformViewer_14);
 
-				fStatus.addAll(jobGroup.getResult());
-				return fStatus;
-			}
-		};
-		job.addJobChangeListener(new JobChangeAdapter() {
-			@Override
-			public void done(IJobChangeEvent event) {
-				IStatus result = event.getResult();
+				
+				IStatus result = jobGroup.getResult();
 				if( (!result.isMultiStatus() && result.getCode() != Status.OK_STATUS.getCode() ) ||
-				    (result.isMultiStatus() && result.getChildren().length > 0 && result.getChildren()[0].getCode() != Status.OK_STATUS.getCode() ) ){
+						(result.isMultiStatus() && result.getChildren().length > 0 && result.getChildren()[0].getCode() != Status.OK_STATUS.getCode() ) ){
 					// kill editor and pop up warning for user
 					sync.asyncExec(() -> {
 						final Display display = myParent.getDisplay();
 						MessageDialog.openWarning(display.getActiveShell(), "Error loading database", "Database cannot be loaded. Aborting...");
-					    ePartService.hidePart(myPart, true);
+						ePartService.hidePart(myPart, true);
 					});
-					return;
-				}
-				sync.asyncExec(()->{
-					waveformPane.setMaxTime(database.getMaxTime());
-					if (state != null)
-						restoreWaveformViewerState(state);
-					fileChecker = null;
-					if (checkForUpdates)
-						fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad, FILE_CHECK_INTERVAL);
-				});
+				} else
+					sync.asyncExec(()->{
+						waveformPane.setMaxTime(database.getMaxTime());
+						if (state != null)
+							restoreWaveformViewerState(state);
+						fileChecker = null;
+						if (checkForUpdates)
+							fileChecker = fileMonitor.addFileChangeListener(WaveformViewer.this, filesToLoad, FILE_CHECK_INTERVAL);
+					});
+				return result;
 			}
-		});
+		};
 		job.setSystem(true);
 		job.schedule(1000L); // let the UI initialize so that we have a progress monitor
 	}