merging Asynchronous viewer branch
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;
 	}