diff --git a/org.eclipse.jdt.debug.ui/plugin.xml b/org.eclipse.jdt.debug.ui/plugin.xml
index f92f6a6..70bb970 100644
--- a/org.eclipse.jdt.debug.ui/plugin.xml
+++ b/org.eclipse.jdt.debug.ui/plugin.xml
@@ -2564,37 +2564,27 @@
          <factory 
             class="org.eclipse.jdt.internal.debug.ui.monitors.JavaDebugElementAdapterFactory" 
             adaptableType="org.eclipse.jdt.internal.debug.ui.monitors.JavaContendedMonitor">
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/>
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter2"/>
-            <adapter type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter"/>
+            <adapter type="org.eclipse.debug.internal.ui.treeviewer.IPresentationAdapter"/>
          </factory>
          <factory 
             class="org.eclipse.jdt.internal.debug.ui.monitors.JavaDebugElementAdapterFactory" 
             adaptableType="org.eclipse.jdt.internal.debug.ui.monitors.JavaWaitingThread">
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/>
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter2"/>
-            <adapter type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter"/>
+            <adapter type="org.eclipse.debug.internal.ui.treeviewer.IPresentationAdapter"/>
          </factory>
          <factory 
             class="org.eclipse.jdt.internal.debug.ui.monitors.JavaDebugElementAdapterFactory" 
             adaptableType="org.eclipse.jdt.internal.debug.ui.monitors.JavaOwnedMonitor">
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/>
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter2"/>
-            <adapter type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter"/>
+			<adapter type="org.eclipse.debug.internal.ui.treeviewer.IPresentationAdapter"/>
          </factory>
          <factory 
             class="org.eclipse.jdt.internal.debug.ui.monitors.JavaDebugElementAdapterFactory" 
             adaptableType="org.eclipse.jdt.internal.debug.ui.monitors.JavaOwningThread">
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/>
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter2"/>
-            <adapter type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter"/>
+            <adapter type="org.eclipse.debug.internal.ui.treeviewer.IPresentationAdapter"/>
          </factory>
          <factory 
             class="org.eclipse.jdt.internal.debug.ui.monitors.JavaDebugElementAdapterFactory" 
             adaptableType="org.eclipse.jdt.debug.core.IJavaThread">
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/>
-            <adapter type="org.eclipse.ui.model.IWorkbenchAdapter2"/>
-            <adapter type="org.eclipse.ui.progress.IDeferredWorkbenchAdapter"/>
+<adapter type="org.eclipse.debug.internal.ui.treeviewer.IPresentationAdapter"/>
          </factory>                  
     </extension>
  <extension
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ImageDescriptorRegistry.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ImageDescriptorRegistry.java
index 45c77b2..7376924 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ImageDescriptorRegistry.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/ImageDescriptorRegistry.java
@@ -81,11 +81,16 @@
 	}
 	
 	private void hookDisplay() {
-		fDisplay.disposeExec(new Runnable() {
+		fDisplay.asyncExec(new Runnable() {
 			public void run() {
-				dispose();
-			}	
+			fDisplay.disposeExec(new Runnable() {
+				public void run() {
+					dispose();
+				}	
+			});			
+			}
 		});
+
 	}
 }
 
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
index 8d94e40..474aeae 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIDebugUIPlugin.java
@@ -18,6 +18,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
@@ -47,6 +48,11 @@
 import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
 import org.eclipse.jdt.internal.debug.ui.breakpoints.JavaBreakpointTypeAdapterFactory;
 import org.eclipse.jdt.internal.debug.ui.display.JavaInspectExpression;
+import org.eclipse.jdt.internal.debug.ui.monitors.JavaContendedMonitor;
+import org.eclipse.jdt.internal.debug.ui.monitors.JavaDebugElementAdapterFactory;
+import org.eclipse.jdt.internal.debug.ui.monitors.JavaOwnedMonitor;
+import org.eclipse.jdt.internal.debug.ui.monitors.JavaOwningThread;
+import org.eclipse.jdt.internal.debug.ui.monitors.JavaWaitingThread;
 import org.eclipse.jdt.internal.debug.ui.snippeteditor.SnippetFileDocumentProvider;
 import org.eclipse.jdt.launching.sourcelookup.IJavaSourceLocation;
 import org.eclipse.jdt.ui.JavaElementLabelProvider;
@@ -284,6 +290,13 @@
 		manager.registerAdapters(fBreakpointAdapterFactory, IJavaBreakpoint.class);
         IAdapterFactory typeFactory = new JavaBreakpointTypeAdapterFactory();
         manager.registerAdapters(typeFactory, IJavaBreakpoint.class);
+        
+        IAdapterFactory monitorFactory = new JavaDebugElementAdapterFactory();
+        manager.registerAdapters(monitorFactory, IJavaThread.class);
+        manager.registerAdapters(monitorFactory, JavaContendedMonitor.class);
+        manager.registerAdapters(monitorFactory, JavaOwnedMonitor.class);
+        manager.registerAdapters(monitorFactory, JavaOwningThread.class);
+        manager.registerAdapters(monitorFactory, JavaWaitingThread.class);
 		
 		fHCRListener= new JavaHotCodeReplaceListener();
 		JDIDebugModel.addHotCodeReplaceListener(fHCRListener);
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaContendedMonitorAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaContendedMonitorAdapter.java
new file mode 100644
index 0000000..2a25122
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaContendedMonitorAdapter.java
@@ -0,0 +1,21 @@
+package org.eclipse.jdt.internal.debug.ui.monitors;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.internal.ui.viewers.IPresentationContext;
+
+public class AsyncJavaContendedMonitorAdapter extends AsyncMonitorAdapter {
+
+	protected Object[] getChildren(Object parent, IPresentationContext context) throws CoreException {
+        JavaOwningThread owningThread= ((JavaContendedMonitor)parent).getOwningThread();
+        if (owningThread == null) {
+            return EMPTY;
+        }
+        return new Object[]{owningThread};
+	}
+
+	protected boolean hasChildren(Object element, IPresentationContext context) throws CoreException {
+		JavaContendedMonitor monitor = (JavaContendedMonitor) element;
+		return monitor.getOwningThread() != null;
+	}
+
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaOwnedMonitorAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaOwnedMonitorAdapter.java
new file mode 100644
index 0000000..a7e679a
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaOwnedMonitorAdapter.java
@@ -0,0 +1,17 @@
+package org.eclipse.jdt.internal.debug.ui.monitors;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.internal.ui.viewers.IPresentationContext;
+
+public class AsyncJavaOwnedMonitorAdapter extends AsyncMonitorAdapter {
+
+	protected Object[] getChildren(Object parent, IPresentationContext context) throws CoreException {
+        return ((JavaOwnedMonitor)parent).getWaitingThreads();
+	}
+
+	protected boolean hasChildren(Object element, IPresentationContext context) throws CoreException {
+		JavaOwnedMonitor monitor = (JavaOwnedMonitor) element;
+		return monitor.getWaitingThreads().length > 0;
+	}
+
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaOwningThreadAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaOwningThreadAdapter.java
new file mode 100644
index 0000000..645a65f
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaOwningThreadAdapter.java
@@ -0,0 +1,21 @@
+package org.eclipse.jdt.internal.debug.ui.monitors;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.internal.ui.viewers.IPresentationContext;
+
+public class AsyncJavaOwningThreadAdapter extends AsyncMonitorAdapter {
+
+	protected Object[] getChildren(Object parent, IPresentationContext context) throws CoreException {
+		JavaContendedMonitor contendedMonitor= ((JavaOwningThread)parent).getContendedMonitor();
+		if (contendedMonitor == null) {
+		    return EMPTY;
+		}
+		return new Object[]{contendedMonitor};
+	}
+
+	protected boolean hasChildren(Object element, IPresentationContext context) throws CoreException {
+		JavaOwningThread monitor = (JavaOwningThread) element;
+		return monitor.getContendedMonitor() != null;
+	}
+
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaThreadAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaThreadAdapter.java
new file mode 100755
index 0000000..966ea79
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaThreadAdapter.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * 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
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.debug.ui.monitors;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IDebugElement;
+import org.eclipse.debug.core.model.IStackFrame;
+import org.eclipse.debug.internal.ui.viewers.IPresentationContext;
+import org.eclipse.jdt.debug.core.IJavaDebugTarget;
+import org.eclipse.jdt.debug.core.IJavaThread;
+import org.eclipse.jdt.debug.ui.JavaDebugUtils;
+
+/**
+ * Generates monitor information as well as stack frames
+ */
+public class AsyncJavaThreadAdapter extends AsyncMonitorAdapter {
+
+	protected Object[] getChildren(Object parent, IPresentationContext context) throws CoreException {
+		IJavaThread thread = (IJavaThread) parent;
+		if (!thread.isSuspended()) {
+			return EMPTY;
+		}
+		try {
+			IStackFrame[] frames = thread.getStackFrames();
+			if (!isDisplayMonitors()) {
+				return frames;
+			}
+
+			Object[] children;
+			int length = frames.length;
+			if (((IJavaDebugTarget) thread.getDebugTarget()).supportsMonitorInformation()) {
+				IDebugElement[] ownedMonitors = JavaDebugUtils.getOwnedMonitors(thread);
+				IDebugElement contendedMonitor = JavaDebugUtils.getContendedMonitor(thread);
+
+				if (ownedMonitors != null) {
+					length += ownedMonitors.length;
+				}
+				if (contendedMonitor != null) {
+					length++;
+				}
+				children = new Object[length];
+				if (ownedMonitors != null && ownedMonitors.length > 0) {
+					System.arraycopy(ownedMonitors, 0, children, 0, ownedMonitors.length);
+				}
+				if (contendedMonitor != null) {
+					// Insert the contended monitor after the owned monitors
+					children[ownedMonitors.length] = contendedMonitor;
+				}
+			} else {
+				children = new Object[length + 1];
+				children[0] = new NoMonitorInformationElement(thread.getDebugTarget());
+			}
+			int offset = children.length - frames.length;
+			System.arraycopy(frames, 0, children, offset, frames.length);
+			return children;
+		} catch (DebugException e) {
+			return EMPTY;
+		}
+	}
+
+	protected boolean hasChildren(Object element, IPresentationContext context) throws CoreException {
+		IJavaThread thread = (IJavaThread) element;
+		return thread.hasStackFrames();
+	}
+
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaWaitingThreadAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaWaitingThreadAdapter.java
new file mode 100755
index 0000000..bb8b611
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncJavaWaitingThreadAdapter.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * 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
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.debug.ui.monitors;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.internal.ui.viewers.IPresentationContext;
+
+
+public class AsyncJavaWaitingThreadAdapter extends AsyncMonitorAdapter {
+	protected Object[] getChildren(Object parent, IPresentationContext context) throws CoreException {
+		return ((JavaWaitingThread)parent).getOwnedMonitors();
+	}
+
+	protected boolean hasChildren(Object element, IPresentationContext context) throws CoreException {
+		JavaWaitingThread thread = (JavaWaitingThread) element;
+		return thread.getOwnedMonitors().length > 0;
+	}
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncMonitorAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncMonitorAdapter.java
new file mode 100644
index 0000000..756dc12
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/AsyncMonitorAdapter.java
@@ -0,0 +1,37 @@
+package org.eclipse.jdt.internal.debug.ui.monitors;
+
+import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeContentAdapter;
+import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
+import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+
+public abstract class AsyncMonitorAdapter extends AsynchronousTreeContentAdapter implements IPropertyChangeListener {
+
+	private boolean fDisplayMonitors;
+
+	public AsyncMonitorAdapter() {
+        IPreferenceStore preferenceStore = JDIDebugUIPlugin.getDefault().getPreferenceStore();
+		preferenceStore.addPropertyChangeListener(this);
+		fDisplayMonitors= preferenceStore.getBoolean(IJDIPreferencesConstants.PREF_SHOW_MONITOR_THREAD_INFO);
+	}
+
+	public void propertyChange(PropertyChangeEvent event) {
+		if (event.getProperty().equals(IJDIPreferencesConstants.PREF_SHOW_MONITOR_THREAD_INFO)) {
+			fDisplayMonitors= ((Boolean)event.getNewValue()).booleanValue();
+		}
+	}
+
+	protected boolean isDisplayMonitors() {
+	    return fDisplayMonitors;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.debug.ui.viewers.AsynchronousTreeContentAdapter#supportsPartId(java.lang.String)
+	 */
+	protected boolean supportsPartId(String id) {
+		return IDebugUIConstants.ID_DEBUG_VIEW.equals(id);
+	}	
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaContendedMonitor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaContendedMonitor.java
deleted file mode 100644
index fde9e0b..0000000
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaContendedMonitor.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * 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
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui.monitors;
-
-
-/**
- * Workbench adapter for a contended monitor
- */
-public class DeferredJavaContendedMonitor extends DeferredMonitorElement {
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
-     */
-    public Object[] getChildren(Object parent) {
-        JavaOwningThread owningThread= ((JavaContendedMonitor)parent).getOwningThread();
-        if (owningThread == null) {
-            return EMPTY;
-        }
-        return new Object[]{owningThread};
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
-     */
-    public Object getParent(Object element) {
-        return ((JavaContendedMonitor) element).getParent();
-    }
-}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaOwnedMonitor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaOwnedMonitor.java
deleted file mode 100644
index aec7c36..0000000
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaOwnedMonitor.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * 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
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui.monitors;
-
-
-/**
- * Workbench adapter for a owned monitor.
- */
-public class DeferredJavaOwnedMonitor extends DeferredMonitorElement {
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
-     */
-    public Object[] getChildren(Object parent) {
-        return ((JavaOwnedMonitor)parent).getWaitingThreads();
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
-     */
-    public Object getParent(Object element) {
-		return ((JavaOwnedMonitor)element).getParent();
-    }
-
-}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaOwningThread.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaOwningThread.java
deleted file mode 100644
index 758d42f..0000000
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaOwningThread.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * 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
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui.monitors;
-
-
-/**
- * Workbench adapter for a contended monitor
- */
-public class DeferredJavaOwningThread extends DeferredMonitorElement {
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
-     */
-    public Object[] getChildren(Object parent) {
-        JavaContendedMonitor contendedMonitor= ((JavaOwningThread)parent).getContendedMonitor();
-		if (contendedMonitor == null) {
-		    return EMPTY;
-		}
-		return new Object[]{contendedMonitor};
-    }
-    
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
-     */
-    public Object getParent(Object element) {
-        return ((JavaOwningThread)element).getParent();
-    }
-}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaThread.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaThread.java
deleted file mode 100644
index c31a6de..0000000
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaThread.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * 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
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui.monitors;
-
-import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.model.IDebugElement;
-import org.eclipse.debug.core.model.IStackFrame;
-import org.eclipse.jdt.debug.core.IJavaDebugTarget;
-import org.eclipse.jdt.debug.core.IJavaThread;
-import org.eclipse.jdt.debug.ui.JavaDebugUtils;
-
-/**
- * Generates monitor information as well as stack frames
- */
-public class DeferredJavaThread extends DeferredMonitorElement {
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
-     */
-    public Object[] getChildren(Object parent) {
-        IJavaThread thread = (IJavaThread) parent;
-        if (!thread.isSuspended()) {
-            return EMPTY;
-        }
-        try {
-            IStackFrame[] frames = thread.getStackFrames();
-            if (!isDisplayMonitors()) {
-                return frames;
-            }
-
-            Object[] children;
-            int length = frames.length;
-            if (((IJavaDebugTarget) thread.getDebugTarget()).supportsMonitorInformation()) {
-                IDebugElement[] ownedMonitors = JavaDebugUtils.getOwnedMonitors(thread);
-                IDebugElement contendedMonitor = JavaDebugUtils.getContendedMonitor(thread);
-                
-                if (ownedMonitors != null) {
-                    length+=ownedMonitors.length;
-                }
-                if (contendedMonitor != null) {
-                    length++;
-                }
-                children = new Object[length];
-                if (ownedMonitors != null && ownedMonitors.length > 0) {
-                    System.arraycopy(ownedMonitors, 0, children, 0, ownedMonitors.length);
-                }
-                if (contendedMonitor != null) {
-                    // Insert the contended monitor after the owned monitors
-                    children[ownedMonitors.length] = contendedMonitor;
-                }
-            } else {
-                children= new Object[length + 1];
-                children[0]= new NoMonitorInformationElement(thread.getDebugTarget());
-            }
-            int offset= children.length - frames.length;
-            System.arraycopy(frames, 0, children, offset, frames.length);
-            return children;
-        } catch (DebugException e) {
-            return EMPTY;
-        }
-    }
-    
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
-	 */
-	public Object getParent(Object element) {
-		return ((IJavaThread)element).getDebugTarget();
-	}
-    
-    
-}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaWaitingThread.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaWaitingThread.java
deleted file mode 100644
index 03828d1..0000000
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredJavaWaitingThread.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * 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
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui.monitors;
-
-
-/**
- * Workbench adapter for a waiting thread
- */
-public class DeferredJavaWaitingThread extends DeferredMonitorElement {
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
-     */
-    public Object[] getChildren(Object parent) {
-        return ((JavaWaitingThread)parent).getOwnedMonitors();
-    }
-
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
-     */
-    public Object getParent(Object element) {
-        return ((JavaWaitingThread)element).getParent();
-    }
-}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredMonitorElement.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredMonitorElement.java
deleted file mode 100644
index 3074121..0000000
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/DeferredMonitorElement.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * 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
- * 
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jdt.internal.debug.ui.monitors;
-
-import org.eclipse.debug.ui.DeferredDebugElementWorkbenchAdapter;
-import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
-import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
-
-/**
- * A deferred workbench adapter for elements presenting monitor information in the debug veiw.
- */
-public abstract class DeferredMonitorElement extends DeferredDebugElementWorkbenchAdapter implements IDeferredWorkbenchAdapter, IPropertyChangeListener {
-
-    private boolean fDisplayMonitors= false;
-    public DeferredMonitorElement() {
-        IPreferenceStore preferenceStore = JDIDebugUIPlugin.getDefault().getPreferenceStore();
-		preferenceStore.addPropertyChangeListener(this);
-		fDisplayMonitors= preferenceStore.getBoolean(IJDIPreferencesConstants.PREF_SHOW_MONITOR_THREAD_INFO);
-    }
-    
-    /* (non-Javadoc)
-	 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
-	 */
-	public void propertyChange(PropertyChangeEvent event) {
-		if (event.getProperty().equals(IJDIPreferencesConstants.PREF_SHOW_MONITOR_THREAD_INFO)) {
-			fDisplayMonitors= ((Boolean)event.getNewValue()).booleanValue();
-		}
-	}
-	
-	protected boolean isDisplayMonitors() {
-	    return fDisplayMonitors;
-	}
-}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/JavaDebugElementAdapterFactory.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/JavaDebugElementAdapterFactory.java
index 47670ac..2ff5af1 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/JavaDebugElementAdapterFactory.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/monitors/JavaDebugElementAdapterFactory.java
@@ -11,10 +11,8 @@
 package org.eclipse.jdt.internal.debug.ui.monitors;
 
 import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.debug.internal.ui.viewers.IAsynchronousTreeContentAdapter;
 import org.eclipse.jdt.debug.core.IJavaThread;
-import org.eclipse.ui.model.IWorkbenchAdapter;
-import org.eclipse.ui.model.IWorkbenchAdapter2;
-import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
 
 /**
  * Adapter factory that generates workbench adapters for java debug elements to
@@ -22,11 +20,11 @@
  */
 public class JavaDebugElementAdapterFactory implements IAdapterFactory {
     
-    private static IWorkbenchAdapter fgThreadAdapter;
-    private static IWorkbenchAdapter fgContendedMonitorAdapter;
-    private static IWorkbenchAdapter fgOwnedMonitorAdapter;
-    private static IWorkbenchAdapter fgOwningThreadAdapter;
-    private static IWorkbenchAdapter fgWaitingThreadAdapter;
+    private static IAsynchronousTreeContentAdapter fgThreadAdapter;
+    private static IAsynchronousTreeContentAdapter fgContendedMonitorAdapter;
+    private static IAsynchronousTreeContentAdapter fgOwnedMonitorAdapter;
+    private static IAsynchronousTreeContentAdapter fgOwningThreadAdapter;
+    private static IAsynchronousTreeContentAdapter fgWaitingThreadAdapter;
     
     /* (non-Javadoc)
      * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
@@ -52,28 +50,28 @@
 
     private Object getWaitingThreadAdapter() {
         if (fgWaitingThreadAdapter == null) {
-            fgWaitingThreadAdapter = new DeferredJavaWaitingThread();
+            fgWaitingThreadAdapter = new AsyncJavaWaitingThreadAdapter();
         }
         return fgWaitingThreadAdapter;
     }
 
     private Object getOwningThreadAdapter() {
         if (fgOwningThreadAdapter == null) {
-            fgOwningThreadAdapter = new DeferredJavaOwningThread();
+            fgOwningThreadAdapter = new AsyncJavaOwningThreadAdapter();
         }
         return fgOwningThreadAdapter;
     }
 
-    private IWorkbenchAdapter getOwnedMonitorAdapater() {
+    private IAsynchronousTreeContentAdapter getOwnedMonitorAdapater() {
         if (fgOwnedMonitorAdapter == null) {
-            fgOwnedMonitorAdapter = new DeferredJavaOwnedMonitor();
+            fgOwnedMonitorAdapter = new AsyncJavaOwnedMonitorAdapter();
         }
         return fgOwnedMonitorAdapter;
     }
 
-    private IWorkbenchAdapter getContendedMonitorAdapter() {
+    private IAsynchronousTreeContentAdapter getContendedMonitorAdapter() {
         if (fgContendedMonitorAdapter == null) {
-            fgContendedMonitorAdapter = new DeferredJavaContendedMonitor();
+            fgContendedMonitorAdapter = new AsyncJavaContendedMonitorAdapter();
         }
         return fgContendedMonitorAdapter;
     }
@@ -82,12 +80,12 @@
      * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
      */
     public Class[] getAdapterList() {
-        return new Class[] {IWorkbenchAdapter.class, IWorkbenchAdapter2.class, IDeferredWorkbenchAdapter.class};
+        return new Class[] {IAsynchronousTreeContentAdapter.class};
     }
 	
-	private IWorkbenchAdapter getThreadAdapter() {
+	private IAsynchronousTreeContentAdapter getThreadAdapter() {
 	    if (fgThreadAdapter == null) {
-	        fgThreadAdapter = new DeferredJavaThread();
+	        fgThreadAdapter = new AsyncJavaThreadAdapter();
 	    }
 	    return fgThreadAdapter;
 	}
