diff --git a/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/model/DaytimeResourceAdapter.java b/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/model/DaytimeResourceAdapter.java
index 719fe30f94e..f80d2d0cd98 100644
--- a/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/model/DaytimeResourceAdapter.java
+++ b/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/model/DaytimeResourceAdapter.java
@@ -16,6 +16,8 @@
 
 package org.eclipse.rse.examples.daytime.model;
 
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.widgets.Shell;
@@ -27,6 +29,7 @@ import org.eclipse.rse.examples.daytime.service.IDaytimeService;
 import org.eclipse.rse.examples.daytime.subsystems.DaytimeSubSystem;
 import org.eclipse.rse.ui.SystemMenuManager;
 import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
+import org.eclipse.rse.ui.view.IContextObject;
 import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
 
 /**
@@ -70,10 +73,11 @@ public class DaytimeResourceAdapter extends AbstractSystemViewAdapter implements
 		return false;
 	}
 
-	public Object[] getChildren(Object element) {
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element) {
 		return null;
 	}
 
+	
 	protected Object internalGetPropertyValue(Object key) {
 		return null;
 	}
diff --git a/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/model/DeveloperResourceAdapter.java b/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/model/DeveloperResourceAdapter.java
index 40cf4c3ddfd..2dd4a8e9f2d 100644
--- a/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/model/DeveloperResourceAdapter.java
+++ b/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/model/DeveloperResourceAdapter.java
@@ -16,10 +16,13 @@
 
 package samples.model;
 
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.ui.SystemMenuManager;
 import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
+import org.eclipse.rse.ui.view.IContextObject;
 import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
@@ -98,14 +101,12 @@ public class DeveloperResourceAdapter extends AbstractSystemViewAdapter
 		return false;
 	}
 
-	/**
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(Object)
-	 */
-	public Object[] getChildren(Object o)
-	{
+
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element) {
 		return null;
 	}
 
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyDescriptors()
 	 */
diff --git a/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/model/TeamResourceAdapter.java b/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/model/TeamResourceAdapter.java
index ba88b090de8..31bde978d94 100644
--- a/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/model/TeamResourceAdapter.java
+++ b/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/model/TeamResourceAdapter.java
@@ -16,6 +16,8 @@
 
 package samples.model;
 
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.ui.SystemMenuManager;
@@ -100,7 +102,7 @@ public class TeamResourceAdapter extends AbstractSystemViewAdapter implements
 	/* (non-Javadoc)
 	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(java.lang.Object)
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		return ((TeamResource)element).getDevelopers();
 	}
diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteFileAdapter.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteFileAdapter.java
index deb49d6763d..95951c65d9c 100644
--- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteFileAdapter.java
+++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteFileAdapter.java
@@ -41,6 +41,7 @@ import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.rse.core.SystemBasePlugin;
+import org.eclipse.rse.core.filters.ISystemFilter;
 import org.eclipse.rse.core.filters.ISystemFilterReference;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.rse.core.model.ISystemContainer;
@@ -78,6 +79,7 @@ import org.eclipse.rse.model.ISystemResourceChangeEvents;
 import org.eclipse.rse.model.SystemRegistry;
 import org.eclipse.rse.model.SystemRemoteResourceSet;
 import org.eclipse.rse.model.SystemResourceChangeEvent;
+import org.eclipse.rse.services.clientserver.PathUtility;
 import org.eclipse.rse.services.clientserver.StringCompare;
 import org.eclipse.rse.services.clientserver.SystemSearchString;
 import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager;
@@ -117,6 +119,8 @@ import org.eclipse.rse.ui.messages.SystemMessageDialog;
 import org.eclipse.rse.ui.operations.SystemFetchOperation;
 import org.eclipse.rse.ui.validators.ISystemValidator;
 import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
+import org.eclipse.rse.ui.view.ContextObject;
+import org.eclipse.rse.ui.view.IContextObject;
 import org.eclipse.rse.ui.view.ISystemDragDropAdapter;
 import org.eclipse.rse.ui.view.ISystemEditableRemoteObject;
 import org.eclipse.rse.ui.view.ISystemMementoConstants;
@@ -607,23 +611,21 @@ public class SystemViewRemoteFileAdapter
 	 * Return the children of this object.
 	 * If this is a folder or root, we list all child folders and files.
 	 */
-	public Object[] getChildren(IProgressMonitor monitor, Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
-		return internalGetChildren(monitor, element);
+		return internalGetChildren(monitor, element, null);
 	}
 	
 	/**
 	 * Return the children of this object.
 	 * If this is a folder or root, we list all child folders and files.
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IContextObject context)
 	{
-		_lastResults = internalGetChildren(null, element);
-		return _lastResults;
-		//		}
+		return internalGetChildren(monitor, context.getModelObject(), context.getFilterReference());
 	}
 
-	private synchronized Object[] internalGetChildren(IProgressMonitor monitor, Object element)
+	private synchronized Object[] internalGetChildren(IProgressMonitor monitor, IAdaptable element, ISystemFilterReference filterReference)
 	{
 		//System.out.println("Inside getChildren for: "+element);
 		IRemoteFile file = (IRemoteFile) element;
@@ -638,9 +640,12 @@ public class SystemViewRemoteFileAdapter
 			return ((RemoteFileRoot) file).getRootFiles();
 		}
 		IRemoteFileSubSystem ss = file.getParentRemoteFileSubSystem();
+	
+		
+		/*
 		RemoteFileFilterString orgRffs = file.getFilterString();
 	
-		String filter = null;
+
 		if (orgRffs != null)
 		{
 			if (foldersOnly)
@@ -660,7 +665,28 @@ public class SystemViewRemoteFileAdapter
 				filter = rffs.toString();
 			}
 		}
-		else if (foldersOnly)
+		else
+		*/
+		String filter = null;
+		if (filterReference != null)
+		{
+			ISystemFilter filterObject = filterReference.getReferencedFilter();
+			if (filterObject.getFilterStringCount() > 0)
+			{
+				String filterString = filterObject.getFilterStrings()[0];
+				String separator = PathUtility.getSeparator(filterString);
+				
+				int sepIndex = filterString.lastIndexOf(separator);
+				if (sepIndex > 0)
+				{
+					filter = filterString.substring(sepIndex + 1);
+				}
+			}
+		}
+		else
+		{
+		
+		if (foldersOnly)
 		{
 			if (filterString == null)
 				filter = "* /nf"; //$NON-NLS-1$
@@ -681,6 +707,7 @@ public class SystemViewRemoteFileAdapter
 			else
 				filter = filterString;	
 		}
+		}
 		
 		Object[] children = null;
 		
@@ -791,9 +818,12 @@ public class SystemViewRemoteFileAdapter
 		else
 		{
 			// check that the children are actually there			
-			Object[] contents = file.getContents(RemoteChildrenContentsType.getInstance());
-			if (!file.isStale() && contents != null && contents.length == 0 )
-				hasChildren = false;
+			//Object[] contents = file.getContents(RemoteChildrenContentsType.getInstance());
+			hasChildren = file.hasContents(RemoteChildrenContentsType.getInstance());
+			if (!hasChildren && !file.isStale())
+				hasChildren = true;
+		//	if (!file.isStale() && contents != null && contents.length == 0 )
+		//		hasChildren = false;
 		}
 
 		return hasChildren;
@@ -2593,7 +2623,7 @@ public class SystemViewRemoteFileAdapter
 			IRemoteFile file = (IRemoteFile) element;
 			return file.getParentRemoteFileSubSystem();
 		}
-		return null;
+		return super.getSubSystem(element);
 	}
 	/** 
 	 * Return the subsystem factory id that owns this remote object
@@ -3145,7 +3175,7 @@ public class SystemViewRemoteFileAdapter
 
 	protected SystemFetchOperation getSystemFetchOperation(Object o, IElementCollector collector)
 	{
-	    return new SystemFetchOperation(null, (IAdaptable)o, this, collector, true);
+	    return new SystemFetchOperation(null, o, this, collector, true);
 	}
 
 	/**
diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteSearchResultAdapter.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteSearchResultAdapter.java
index bdcd568ecfc..4c4f683eaaf 100644
--- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteSearchResultAdapter.java
+++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteSearchResultAdapter.java
@@ -234,7 +234,7 @@ public class SystemViewRemoteSearchResultAdapter extends AbstractSystemViewAdapt
 	/**
 	 * Returns nothing
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		return null;
 	}
diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteSearchResultSetAdapter.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteSearchResultSetAdapter.java
index ba7e2b07380..6261764f1c5 100644
--- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteSearchResultSetAdapter.java
+++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/files/ui/view/SystemViewRemoteSearchResultSetAdapter.java
@@ -18,6 +18,8 @@ package org.eclipse.rse.files.ui.view;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.core.subsystems.ISubSystem;
@@ -134,7 +136,7 @@ public class SystemViewRemoteSearchResultSetAdapter extends AbstractSystemViewAd
 	/**
 	 * Returns the search results for the given search handle
 	 */
-	public Object[] getChildren(Object element) {
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element) {
 		
 		if (element instanceof IHostSearchResultSet) {
 			IHostSearchResultSet output = (IHostSearchResultSet)element;
diff --git a/rse/plugins/org.eclipse.rse.processes.ui/src/org/eclipse/rse/processes/ui/view/SystemViewRemoteProcessAdapter.java b/rse/plugins/org.eclipse.rse.processes.ui/src/org/eclipse/rse/processes/ui/view/SystemViewRemoteProcessAdapter.java
index 288acd393b4..fdde9af1afd 100644
--- a/rse/plugins/org.eclipse.rse.processes.ui/src/org/eclipse/rse/processes/ui/view/SystemViewRemoteProcessAdapter.java
+++ b/rse/plugins/org.eclipse.rse.processes.ui/src/org/eclipse/rse/processes/ui/view/SystemViewRemoteProcessAdapter.java
@@ -17,6 +17,7 @@
 package org.eclipse.rse.processes.ui.view;
 
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -156,7 +157,7 @@ public class SystemViewRemoteProcessAdapter extends AbstractSystemViewAdapter
 		return false;
 	}
 
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		IRemoteProcess process = (IRemoteProcess) element;
 		IRemoteProcessSubSystem ss = process.getParentRemoteProcessSubSystem();
diff --git a/rse/plugins/org.eclipse.rse.services.ssh/.settings/org.eclipse.core.resources.prefs b/rse/plugins/org.eclipse.rse.services.ssh/.settings/org.eclipse.core.resources.prefs
index febf8bb840b..310ea232db3 100644
--- a/rse/plugins/org.eclipse.rse.services.ssh/.settings/org.eclipse.core.resources.prefs
+++ b/rse/plugins/org.eclipse.rse.services.ssh/.settings/org.eclipse.core.resources.prefs
@@ -1,3 +1,3 @@
-#Thu Feb 15 10:26:03 CET 2007
+#Thu Feb 15 10:47:06 EST 2007
 eclipse.preferences.version=1
 encoding//src/org/eclipse/rse/internal/services/ssh/SshServiceResources.properties=8859_1
diff --git a/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/view/SystemBuildErrorViewProvider.java b/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/view/SystemBuildErrorViewProvider.java
index 6d27b4a8afd..f920e7bee33 100644
--- a/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/view/SystemBuildErrorViewProvider.java
+++ b/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/view/SystemBuildErrorViewProvider.java
@@ -19,6 +19,7 @@ package org.eclipse.rse.shells.ui.view;
 import java.util.ArrayList;
 
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.rse.core.subsystems.IRemoteLineReference;
 import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteCommandShell;
@@ -97,7 +98,7 @@ public class SystemBuildErrorViewProvider extends SystemTableViewProvider
 				ISystemViewElementAdapter adapter = getAdapterFor(object);
 				if (adapter != null)
 				{
-					results = adapter.getChildren(object);
+					results = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
 					
 					ArrayList filterredResults = new ArrayList();
 					for (int i = _offset+ 1; i <results.length;i++)
diff --git a/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/view/SystemViewRemoteOutputAdapter.java b/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/view/SystemViewRemoteOutputAdapter.java
index c0e4b3fce70..7707bdc15f9 100644
--- a/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/view/SystemViewRemoteOutputAdapter.java
+++ b/rse/plugins/org.eclipse.rse.shells.ui/src/org/eclipse/rse/shells/ui/view/SystemViewRemoteOutputAdapter.java
@@ -327,7 +327,7 @@ implements  ISystemViewElementAdapter, ISystemRemoteElementAdapter, ISystemOutpu
 	/**
 	 * Returns the children of a remote command if the element is a remote command
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 	  
 	        if (element instanceof IRemoteCommandShell)
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
index bd5e492b7fe..d3472802b11 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
@@ -25,9 +25,11 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.action.ActionContributionItem;
@@ -109,6 +111,7 @@ import org.eclipse.rse.ui.dialogs.SystemPromptDialog;
 import org.eclipse.rse.ui.messages.ISystemMessageLine;
 import org.eclipse.rse.ui.messages.SystemMessageDialog;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.FileTransfer;
 import org.eclipse.swt.dnd.Transfer;
@@ -5159,8 +5162,17 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
 		return false;
 	}
 */
+
 	public void add(Object parentElementOrTreePath, Object[] childElements) {
 		assertElementsNotNull(childElements);
+		
+		ISystemFilterReference originalFilter = null;
+		if (parentElementOrTreePath instanceof IContextObject)
+		{
+			IContextObject context = (IContextObject)parentElementOrTreePath;
+			originalFilter = context.getFilterReference();
+			parentElementOrTreePath = context.getModelObject();
+		}
 
 		Vector matches = new Vector();
 		matches = findAllRemoteItemReferences(parentElementOrTreePath, parentElementOrTreePath, matches);
@@ -5211,7 +5223,20 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
 		{
 		for (int i = 0; i < matches.size(); i++) {
 			Widget match = (Widget) matches.get(i);
-			internalAdd(match, parentElementOrTreePath, childElements);
+			ISystemFilterReference ref = getContainingFilterReference((TreeItem)match);
+			if (matches.size() > 1 && ref != null && ref != originalFilter)
+			{
+				// could have the same object under multiple filters
+				// need to apply filter
+				ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)parentElementOrTreePath).getAdapter(ISystemViewElementAdapter.class);
+				IContextObject contextObject = getContextObject((TreeItem)match);
+				Object[] newChildren = adapter.getChildren(new NullProgressMonitor(), contextObject);
+				internalAdd(match, parentElementOrTreePath, newChildren);
+			}
+			else
+			{
+				internalAdd(match, parentElementOrTreePath, childElements);
+			}
 		}
 		}
 		
@@ -5226,4 +5251,156 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
 
 		
 	}
+
+
+	/**
+	 * Get the containing filter reference for an item
+	 * @param item the item to get the filter reference for
+	 * @return the filter reference
+	 */
+	public ISystemFilterReference getContainingFilterReference(TreeItem item)
+	{
+		Object data = item.getData();
+		if (data instanceof ISystemFilterReference)
+		{
+			return (ISystemFilterReference)data;
+		}
+		else
+		{
+			TreeItem parent = item.getParentItem();
+			if (parent != null)
+			{
+				return getContainingFilterReference(parent);
+			}
+			else				
+			{
+				Object input = getInput();
+				if (input instanceof ISystemFilterReference)
+				{
+					return (ISystemFilterReference)input;
+				}
+				else
+				{
+					return null;
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Get the containing subsystem from an item
+	 * @param item the item to get the subsystem for
+	 * @return the subsystem
+	 */
+	public ISubSystem getContainingSubSystem(TreeItem item)
+	{
+		Object data = item.getData();
+		if (data instanceof ISubSystem)
+		{
+			return (ISubSystem)data;
+		}
+		else
+		{
+			TreeItem parent = item.getParentItem();
+			if (parent != null)
+			{
+				return getContainingSubSystem(parent);
+			}
+			else				
+			{
+				Object input = getInput();
+				if (input instanceof ISubSystem)
+				{
+					return (ISubSystem)input;
+				}
+				else
+				{
+					return null;
+				}
+			}
+		}
+	}
+	
+	
+	/**
+	 * Get the context object from a tree item
+	 * @param item the item to get the context for
+	 * @return the context object
+	 */
+	public IContextObject getContextObject(TreeItem item)
+	{
+		Object data = item.getData();
+		ISystemFilterReference filterReference = getContainingFilterReference(item);
+		if (filterReference != null)
+		{
+			return new ContextObject(data, filterReference.getSubSystem(), filterReference);
+		}
+		else
+		{
+			ISubSystem subSystem = getContainingSubSystem(item);
+			if (subSystem != null)
+			{
+				return new ContextObject(data, subSystem);
+			}
+			else
+			{				
+				return new ContextObject(data);
+			}
+		}
+	}
+
+	/**
+	 * Overridden so that we can pass a wrapper IContextObject into the provider to get children instead 
+	 * of the model object, itself
+	 */
+	protected void createChildren(final Widget widget) 
+	{
+		if (widget instanceof TreeItem)
+		{
+		final Item[] tis = getChildren(widget);
+		if (tis != null && tis.length > 0) {
+			Object data = tis[0].getData();
+			if (data != null) {
+				return; // children already there!
+			}
+		}
+
+		BusyIndicator.showWhile(widget.getDisplay(), new Runnable() {
+			public void run() {
+				// fix for PR 1FW89L7:
+				// don't complain and remove all "dummies" ...
+				if (tis != null) {
+					for (int i = 0; i < tis.length; i++) {
+						if (tis[i].getData() != null) {
+							disassociate(tis[i]);
+							Assert.isTrue(tis[i].getData() == null,
+									"Second or later child is non -null");//$NON-NLS-1$
+
+						}
+						tis[i].dispose();
+					}
+				}
+				Object d = widget.getData();
+				if (d != null) 
+				{
+					Object parentElement = getContextObject((TreeItem)widget);
+					Object[] children = getSortedChildren(parentElement);
+					if (children != null)
+					{
+						for (int i = 0; i < children.length; i++) 
+						{	
+							createTreeItem(widget, children[i], -1);
+						}
+					}
+				}
+			}
+
+		});
+		}
+		else
+		{
+			super.createChildren(widget);
+		}
+	}
+
 }
\ No newline at end of file
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemDeferredTreeContentManager.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemDeferredTreeContentManager.java
new file mode 100644
index 00000000000..be3fd0854c6
--- /dev/null
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemDeferredTreeContentManager.java
@@ -0,0 +1,51 @@
+/********************************************************************************
+ * Copyright (c) 2006 IBM Corporation. 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
+ * 
+ * Initial Contributors:
+ * The following IBM employees contributed to the Remote System Explorer
+ * component that contains this file: David McKnight.
+ * 
+ * Contributors:
+ * {Name} (company) - description of contribution.
+ ********************************************************************************/
+package org.eclipse.rse.ui.operations;
+
+import org.eclipse.jface.viewers.AbstractTreeViewer;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.rse.ui.view.IContextObject;
+
+import org.eclipse.ui.progress.DeferredTreeContentManager;
+import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
+
+public class SystemDeferredTreeContentManager extends
+		DeferredTreeContentManager {
+
+	public SystemDeferredTreeContentManager(ITreeContentProvider provider,
+			AbstractTreeViewer viewer) 
+	{
+		super(provider, viewer);
+		// TODO Auto-generated constructor stub
+	}
+
+    /**
+     * Return the IDeferredWorkbenchAdapter for element or the element if it is
+     * an instance of IDeferredWorkbenchAdapter. If it does not exist return
+     * null.
+     * 
+     * @param element
+     * @return IDeferredWorkbenchAdapter or <code>null</code>
+     */
+    protected IDeferredWorkbenchAdapter getAdapter(Object element) 
+    {
+    	
+    	if (element instanceof IContextObject)
+    	{
+    		element = ((IContextObject)element).getModelObject();
+    	}
+        return super.getAdapter(element);
+    }
+
+}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java
index 4cee4885512..f97e28882a8 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java
@@ -36,6 +36,7 @@ import org.eclipse.rse.ui.GenericMessages;
 import org.eclipse.rse.ui.ISystemMessages;
 import org.eclipse.rse.ui.RSEUIPlugin;
 import org.eclipse.rse.ui.messages.SystemMessageDialog;
+import org.eclipse.rse.ui.view.IContextObject;
 import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
@@ -50,14 +51,14 @@ import org.eclipse.ui.progress.IElementCollector;
 public class SystemFetchOperation extends JobChangeAdapter implements IRunnableWithProgress
 {
     protected IWorkbenchPart _part;
-    protected IAdaptable _remoteObject;
+    protected Object _remoteObject;
     protected IElementCollector _collector;
     private IRunnableContext context;
     protected ISystemViewElementAdapter _adapter;
     protected boolean _canRunAsJob;
     protected InvocationTargetException _exc;
  
-    public SystemFetchOperation(IWorkbenchPart part, IAdaptable remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector) 
+    public SystemFetchOperation(IWorkbenchPart part, Object remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector) 
     {
 		_part = part;
 		_remoteObject = remoteObject;
@@ -66,7 +67,7 @@ public class SystemFetchOperation extends JobChangeAdapter implements IRunnableW
 		_canRunAsJob = false;
 	}
     
-    public SystemFetchOperation(IWorkbenchPart part, IAdaptable remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector, boolean canRunAsJob) 
+    public SystemFetchOperation(IWorkbenchPart part, Object remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector, boolean canRunAsJob) 
     {
 		_part = part;
 		_remoteObject = remoteObject;
@@ -165,7 +166,15 @@ public class SystemFetchOperation extends JobChangeAdapter implements IRunnableW
 	 */
 	protected void execute(IProgressMonitor monitor) throws Exception, InterruptedException
 	{
-		SubSystem ss = (SubSystem)_adapter.getSubSystem(_remoteObject);
+		SubSystem ss = null;
+		if (_remoteObject instanceof IContextObject)
+		{
+			ss = (SubSystem)((IContextObject)_remoteObject).getSubSystem();
+		}
+		else
+		{
+			ss = (SubSystem)_adapter.getSubSystem(_remoteObject);
+		}
 		synchronized (ss.getConnectorService())
 		{
 		if (!ss.isConnected())
@@ -194,7 +203,15 @@ public class SystemFetchOperation extends JobChangeAdapter implements IRunnableW
 			
 		}
 		}
-	    Object[] children = _adapter.getChildren(monitor, _remoteObject);
+		Object[] children = null;
+		if (_remoteObject instanceof IContextObject)
+		{
+			children = _adapter.getChildren(monitor, (IContextObject)_remoteObject);
+		}
+		else
+		{
+			children = _adapter.getChildren(monitor, (IAdaptable)_remoteObject);
+		}
 	    _collector.add(children, monitor);
 	    monitor.done();
 	}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/AbstractSystemViewAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/AbstractSystemViewAdapter.java
index a510323c357..8d8cac796c4 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/AbstractSystemViewAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/AbstractSystemViewAdapter.java
@@ -23,6 +23,7 @@ import java.util.Vector;
 
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -278,10 +279,13 @@ public abstract class AbstractSystemViewAdapter
 	{
 		if (element instanceof AbstractResource)
 		  return ((AbstractResource)element).getSubSystem();
+		else if (element instanceof IContextObject)
+			return ((IContextObject)element).getSubSystem();
 		else
 		  return null;	
 	}
 	
+	
 	/**
      * <i>Called by SystemView viewer. No need to override or call.</i><br>
 	 * Returns any framework-supplied remote object actions that should be contributed to the popup menu
@@ -406,6 +410,10 @@ public abstract class AbstractSystemViewAdapter
 	 */
 	public String getLabel(Object element)
 	{
+		if (element instanceof IContextObject)
+		{
+			element = ((IContextObject)element).getModelObject();
+		}
 		return getText(element);
 	}
 	
@@ -441,21 +449,44 @@ public abstract class AbstractSystemViewAdapter
 	 * Return true if this object has children.
 	 */
 	public abstract boolean hasChildren(Object element);
-	
+
 	/**
-     * <i><b>Abstract</b>. Must be overridden by subclasses.</i><br>
-	 * Return the children of this object. Return null if children not supported.
+	 * Implementation of IWorkbenchAdapter.getChildren().  Rather than overriding this, adapter implementors
+	 * should override the getChildren() methods that take a monitor.
 	 */
-	public abstract Object[] getChildren(Object element);
+	public Object[] getChildren(Object object)
+	{
+		return getChildren(new NullProgressMonitor(), (IAdaptable)object);
+	}
+	
 	
 	/**
      * This should be overridden by subclasses in order to provide
      * deferred query support via the Eclipse Jobs mechanism
 	 * Return the children of this object. Return null if children not supported.
+	 * 
+	 * @param monitor the progress monitor
+	 * @param element the model object to get children from
+	 * @return the children of element
 	 */
-	public Object[] getChildren(IProgressMonitor monitor, Object element)
+	public abstract Object[] getChildren(IProgressMonitor monitor, IAdaptable element);
+	
+	/**
+     * This should be overridden by subclasses in order to provide
+     * deferred query support via the Eclipse Jobs mechanism.  The context object is passed in
+     * in place of the model object.  By default, we just fall back to the original mechanism
+	 * Return the children of this object. Return null if children not supported.
+	 * 
+	 * This method should be overridden if your adapter supports context objects.  If not, this will
+	 * fall back to the model object version of the method.
+	 * 
+	 * @param monitor the progress monitor
+	 * @param element the context object that wrappers a model object, it's subsystem and filter reference
+	 * @return the children of the model object within the context object that matches the containing filter reference criteria
+	 */
+	public Object[] getChildren(IProgressMonitor monitor, IContextObject element)
 	{
-		return getChildren(element);
+		return getChildren(monitor, element.getModelObject());
 	}
 	
 
@@ -1778,7 +1809,7 @@ public abstract class AbstractSystemViewAdapter
 	 */
 	protected SystemFetchOperation getSystemFetchOperation(Object o, IElementCollector collector)
 	{
-	    return new SystemFetchOperation(null, (IAdaptable)o, this, collector);
+	    return new SystemFetchOperation(null, o, this, collector);
 	}
 	
 	
@@ -1790,8 +1821,15 @@ public abstract class AbstractSystemViewAdapter
         return true;
     }
 
-    public ISchedulingRule getRule(Object element) {
+    public ISchedulingRule getRule(Object element) 
+    {
+    	if (element instanceof IContextObject)
+    	{
+    		element = ((IContextObject)element).getModelObject();
+    	}
     	IAdaptable location = (IAdaptable)element;
         return new SystemSchedulingRule(location); 
     }
+    
+
 }
\ No newline at end of file
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ContextObject.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ContextObject.java
new file mode 100644
index 00000000000..d2a341e7db4
--- /dev/null
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ContextObject.java
@@ -0,0 +1,68 @@
+/********************************************************************************
+ * Copyright (c) 2006 IBM Corporation. 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
+ * 
+ * Initial Contributors:
+ * The following IBM employees contributed to the Remote System Explorer
+ * component that contains this file: David McKnight.
+ * 
+ * Contributors:
+ * {Name} (company) - description of contribution.
+ ********************************************************************************/
+package org.eclipse.rse.ui.view;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.rse.core.filters.ISystemFilterReference;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+
+
+/**
+ * This class is used by tree views to pass context information from the views to
+ * the view providers and model adapters for queries.  The context information consists of
+ * a model object and it may optionally contain the associated filter reference a subsystem.
+ * 
+ * Context objects are created transiently and are only used to aid in providing filter information
+ * during a query.
+ *
+ */
+public class ContextObject implements IContextObject
+{
+	private ISubSystem _subSystem = null;
+	private ISystemFilterReference _filterReference = null;
+	private Object _modelObject = null;
+	
+	public ContextObject(Object modelObject, ISubSystem subSystem, ISystemFilterReference filterReference)
+	{
+		_subSystem = subSystem;
+		_filterReference = filterReference;
+		_modelObject = modelObject;
+	}
+	
+	public ContextObject(Object modelObject, ISubSystem subSystem)
+	{
+		_modelObject = modelObject;
+		_subSystem = subSystem;
+	}
+	
+	public ContextObject(Object modelObject)
+	{
+		_modelObject = modelObject;
+	}
+	
+	public ISystemFilterReference getFilterReference()
+	{
+		return _filterReference;
+	}
+	
+	public ISubSystem getSubSystem()
+	{
+		return _subSystem;
+	}
+	
+	public IAdaptable getModelObject()
+	{
+		return (IAdaptable)_modelObject;
+	}
+}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/IContextObject.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/IContextObject.java
new file mode 100644
index 00000000000..2e50c59b695
--- /dev/null
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/IContextObject.java
@@ -0,0 +1,48 @@
+/********************************************************************************
+ * Copyright (c) 2006 IBM Corporation. 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
+ * 
+ * Initial Contributors:
+ * The following IBM employees contributed to the Remote System Explorer
+ * component that contains this file: David McKnight.
+ * 
+ * Contributors:
+ * {Name} (company) - description of contribution.
+ ********************************************************************************/
+package org.eclipse.rse.ui.view;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.rse.core.filters.ISystemFilterReference;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+
+/**
+ * This class is used by tree views to pass context information from the views to
+ * the view providers and model adapters for queries.  The context information consists of
+ * a model object and it may optionally contain the associated filter reference a subsystem.
+ * 
+ * Context objects are created transiently and are only used to aid in providing filter information
+ * during a query.
+ *
+ */
+public interface IContextObject 
+{
+	/**
+	 * Gets the associated filter reference for the corresponding model object
+	 * @return the associated filter reference
+	 */
+	public ISystemFilterReference getFilterReference();
+	
+	/**
+	 * Gets the model object for which this context applies
+	 * @return the model object
+	 */
+	public IAdaptable getModelObject();
+	
+	/**
+	 * Gets the associated subsystem for the corresponding model object
+	 * @return the associated subsystem
+	 */
+	public ISubSystem getSubSystem();
+}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ISystemViewElementAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ISystemViewElementAdapter.java
index c95dd4bf046..60fb386ad70 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ISystemViewElementAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ISystemViewElementAdapter.java
@@ -18,6 +18,7 @@ package org.eclipse.rse.ui.view;
 
 import java.util.List;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -168,17 +169,34 @@ public interface ISystemViewElementAdapter extends IPropertySource, ISystemDragD
 	 * Return the parent of this object
 	 */
 	public Object getParent(Object element);
-	/**
-	 * Return the children of this object
-	 */
-	public Object[] getChildren(Object element);
 	
 	/**
-	 * Return the children of this object.  This version (with monitor) is used when the
-	 * request happens on a modal thread.  The implementation needs to take this into
+	 * Return the children of this model object. 
+	 * 
+	 * @param monitor the progress monitor
+	 * @param element the model object to query
+	 * 
+	 * @return the children of element
+	 * 
+	 * The implementation needs to take this into
 	 * account so that SWT thread exceptions are avoided.
 	 */
-	public Object[] getChildren(IProgressMonitor monitor, Object element);
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element);
+	
+	/**
+	 * Return the children of this object.  When a contextObject is passed in
+	 * instead of an adaptable model object, the adapter needs handle both the model object
+	 * as well as the associated filter.
+	 * 
+	 * @param monitor the progress monitor
+	 * @param contextObject a wrapper object that contains the model object plus context information
+	 * 
+	 * @return the children of the model object in contextObject that matches the filter in contextObject
+	 * 
+	 * The implementation needs to take this into
+	 * account so that SWT thread exceptions are avoided.
+	 */
+	public Object[] getChildren(IProgressMonitor monitor, IContextObject contextObject);
 	
 	/**
 	 * Return the children of this object, using the given Expand-To filter
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDeferredTableTreeContentManager.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDeferredTableTreeContentManager.java
index b09b72d7452..02d99d97a54 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDeferredTableTreeContentManager.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemDeferredTableTreeContentManager.java
@@ -15,12 +15,13 @@
 package org.eclipse.rse.ui.view;
 
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.rse.ui.operations.SystemDeferredTreeContentManager;
 import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.progress.DeferredTreeContentManager;
+import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 
 public class SystemDeferredTableTreeContentManager extends
-		DeferredTreeContentManager {
+		SystemDeferredTreeContentManager {
 
 	private SystemTableTreeViewProvider _provider;
 	private SystemTableTreeView _view;
@@ -42,6 +43,24 @@ public class SystemDeferredTableTreeContentManager extends
 		}
 	}
 	
+    /**
+     * Return the IDeferredWorkbenchAdapter for element or the element if it is
+     * an instance of IDeferredWorkbenchAdapter. If it does not exist return
+     * null.
+     * 
+     * @param element
+     * @return IDeferredWorkbenchAdapter or <code>null</code>
+     */
+    protected IDeferredWorkbenchAdapter getAdapter(Object element) 
+    {
+    	
+    	if (element instanceof IContextObject)
+    	{
+    		element = ((IContextObject)element).getModelObject();
+    	}
+        return super.getAdapter(element);
+    }
+    
 	
 	public class RelayoutView implements Runnable
 	{
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemSelectRemoteObjectAPIProviderImpl.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemSelectRemoteObjectAPIProviderImpl.java
index 1ff7828be9e..acc22f5ac31 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemSelectRemoteObjectAPIProviderImpl.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemSelectRemoteObjectAPIProviderImpl.java
@@ -15,6 +15,7 @@
  ********************************************************************************/
 
 package org.eclipse.rse.ui.view;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.rse.core.SystemAdapterHelpers;
 import org.eclipse.rse.core.SystemBasePlugin;
@@ -344,7 +345,7 @@ public class SystemSelectRemoteObjectAPIProviderImpl
         Object[] children = null;
 
 		if (filterString == null)
-	 	  children = subsystemAdapter.getChildren(subsystem);
+	 	  children = subsystemAdapter.getChildren(new NullProgressMonitor(), (IAdaptable)subsystem);
 	 	else
 	 	{
 	 	  children = resolveFilterString(subsystem, filterString);
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableTreeView.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableTreeView.java
index adbf1be201f..fcf498f58b0 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableTreeView.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableTreeView.java
@@ -21,6 +21,7 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Platform;
@@ -45,6 +46,7 @@ import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.window.SameShellProvider;
 import org.eclipse.rse.core.SystemAdapterHelpers;
 import org.eclipse.rse.core.SystemBasePlugin;
+import org.eclipse.rse.core.filters.ISystemFilterReference;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.rse.core.model.ISystemRegistry;
 import org.eclipse.rse.core.subsystems.ISubSystem;
@@ -76,6 +78,7 @@ import org.eclipse.rse.ui.actions.SystemSubMenuManager;
 import org.eclipse.rse.ui.messages.ISystemMessageLine;
 import org.eclipse.rse.ui.messages.SystemMessageDialog;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.FileTransfer;
 import org.eclipse.swt.dnd.TextTransfer;
@@ -89,6 +92,7 @@ import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Item;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;
@@ -1855,4 +1859,168 @@ implements IMenuListener, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelec
 			}
 		}
 	}
+	
+	/**
+	 * Overridden so that we can pass a wrapper IContextObject into the provider to get children instead 
+	 * of the model object, itself
+	 */
+	protected void createChildren(final Widget widget) 
+	{
+		if (widget instanceof TreeItem)
+		{
+		final Item[] tis = getChildren(widget);
+		if (tis != null && tis.length > 0) {
+			Object data = tis[0].getData();
+			if (data != null) {
+				return; // children already there!
+			}
+		}
+
+		BusyIndicator.showWhile(widget.getDisplay(), new Runnable() {
+			public void run() {
+				// fix for PR 1FW89L7:
+				// don't complain and remove all "dummies" ...
+				if (tis != null) {
+					for (int i = 0; i < tis.length; i++) {
+						if (tis[i].getData() != null) {
+							disassociate(tis[i]);
+							Assert.isTrue(tis[i].getData() == null,
+									"Second or later child is non -null");//$NON-NLS-1$
+
+						}
+						tis[i].dispose();
+					}
+				}
+				Object d = widget.getData();
+				if (d != null) 
+				{
+					Object parentElement = getContextObject((TreeItem)widget);
+					Object[] children = getSortedChildren(parentElement);
+					if (children != null)
+					{
+						for (int i = 0; i < children.length; i++) 
+						{	
+							createTreeItem(widget, children[i], -1);
+						}
+					}
+				}
+			}
+
+		});
+		}
+		else
+		{
+			super.createChildren(widget);
+		}
+	}
+	
+	
+	/**
+	 * Get the containing filter reference for an item
+	 * @param item the item to get the filter reference for
+	 * @return the filter reference
+	 */
+	public ISystemFilterReference getContainingFilterReference(TreeItem item)
+	{
+		Object data = item.getData();
+		if (data instanceof ISystemFilterReference)
+		{
+			return (ISystemFilterReference)data;
+		}
+		else
+		{
+			TreeItem parent = item.getParentItem();
+			if (parent != null)
+			{
+				return getContainingFilterReference(parent);
+			}
+			else				
+			{
+				Object input = getInput();
+				if (input instanceof ISystemFilterReference)
+				{
+					return (ISystemFilterReference)input;
+				}
+				else
+				{
+					return null;
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Get the containing subsystem from an item
+	 * @param item the item to get the subsystem for
+	 * @return the subsystem
+	 */
+	public ISubSystem getContainingSubSystem(TreeItem item)
+	{
+		Object data = item.getData();
+		if (data instanceof ISubSystem)
+		{
+			return (ISubSystem)data;
+		}
+		else
+		{
+			TreeItem parent = item.getParentItem();
+			if (parent != null)
+			{
+				return getContainingSubSystem(parent);
+			}
+			else				
+			{
+				Object input = getInput();
+				if (input instanceof ISubSystem)
+				{
+					return (ISubSystem)input;
+				}
+				else
+				{
+					return null;
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Get the context object from a tree item
+	 * @param item the item to get the context for
+	 * @return the context object
+	 */
+	public IContextObject getContextObject(TreeItem item)
+	{
+		Object data = item.getData();
+		ISystemFilterReference filterReference = getContainingFilterReference(item);
+		if (filterReference != null)
+		{
+			return new ContextObject(data, filterReference.getSubSystem(), filterReference);
+		}
+		else
+		{
+			ISubSystem subSystem = getContainingSubSystem(item);
+			if (subSystem != null)
+			{
+				return new ContextObject(data, subSystem);
+			}
+			else
+			{				
+				return new ContextObject(data);
+			}
+		}
+	}
+	
+	/**
+	 * Overrides the standard viewer method to get the model object from the context object
+	 */
+	public void add(Object parentElementOrTreePath, Object[] childElements) {
+		Assert.isNotNull(parentElementOrTreePath);
+		assertElementsNotNull(childElements);
+		
+		if (parentElementOrTreePath instanceof IContextObject)
+		{
+			parentElementOrTreePath = ((IContextObject)parentElementOrTreePath).getModelObject();
+		}
+		super.add(parentElementOrTreePath, childElements);
+	}
 }
\ No newline at end of file
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableTreeViewProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableTreeViewProvider.java
index 69dd2e719f7..5d843032a66 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableTreeViewProvider.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableTreeViewProvider.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.ILabelProvider;
@@ -180,20 +181,29 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
 
 	public Object[] getElements(Object object)
 	{
+		
+    	
 		Object[] results = null;
 		if (object == _lastObject && _lastResults != null)
 		{
 			return _lastResults;
 		}
 		else
-			if (object instanceof IAdaptable)
+		{
+			Object element = object;
+			// object could either be a model object or a wrapper IContextObject 
+	    	if (object instanceof IContextObject)
+	    	{
+	    		element = ((IContextObject)object).getModelObject();
+	    	}
 			{
-				ISystemViewElementAdapter adapter = getAdapterFor(object);
+				
+				ISystemViewElementAdapter adapter = getAdapterFor(element);
 				adapter.setViewer(_viewer);
 				
 		
 				
-				if (adapter.hasChildren(object))
+				if (adapter.hasChildren(element))
 				{
 					if (supportsDeferredQueries())
 			    	{
@@ -212,7 +222,14 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
 			    	}
 					else
 					{
-						results = adapter.getChildren(object);
+						  if (object instanceof IContextObject)
+				    	  {
+				    		  results = adapter.getChildren(new NullProgressMonitor(), (IContextObject)object);
+				    	  }
+				    	  else 
+				    	  {
+				    		  results = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
+				    	  }
 					}
 					if (adapter instanceof SystemViewRootInputAdapter && results != null)
 					{
@@ -233,6 +250,7 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
 					_lastObject = object;
 				}
 			}
+		}
 		if (results == null)
 		{
 			return new Object[0];
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableViewProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableViewProvider.java
index fbb8e085cb7..49ded4fd57d 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableViewProvider.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemTableViewProvider.java
@@ -25,6 +25,7 @@ import java.util.Map;
 
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ILabelProviderListener;
@@ -152,7 +153,7 @@ public class SystemTableViewProvider implements ILabelProvider, ITableLabelProvi
 				if (adapter != null)
 				{
 				    adapter.setViewer(_viewer);
-					results = adapter.getChildren(object);
+					results = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
 					if (adapter instanceof SystemViewRootInputAdapter)
 					{
 						ArrayList filterredResults = new ArrayList();
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemView.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemView.java
index bd5e492b7fe..d3472802b11 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemView.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemView.java
@@ -25,9 +25,11 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.action.ActionContributionItem;
@@ -109,6 +111,7 @@ import org.eclipse.rse.ui.dialogs.SystemPromptDialog;
 import org.eclipse.rse.ui.messages.ISystemMessageLine;
 import org.eclipse.rse.ui.messages.SystemMessageDialog;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.FileTransfer;
 import org.eclipse.swt.dnd.Transfer;
@@ -5159,8 +5162,17 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
 		return false;
 	}
 */
+
 	public void add(Object parentElementOrTreePath, Object[] childElements) {
 		assertElementsNotNull(childElements);
+		
+		ISystemFilterReference originalFilter = null;
+		if (parentElementOrTreePath instanceof IContextObject)
+		{
+			IContextObject context = (IContextObject)parentElementOrTreePath;
+			originalFilter = context.getFilterReference();
+			parentElementOrTreePath = context.getModelObject();
+		}
 
 		Vector matches = new Vector();
 		matches = findAllRemoteItemReferences(parentElementOrTreePath, parentElementOrTreePath, matches);
@@ -5211,7 +5223,20 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
 		{
 		for (int i = 0; i < matches.size(); i++) {
 			Widget match = (Widget) matches.get(i);
-			internalAdd(match, parentElementOrTreePath, childElements);
+			ISystemFilterReference ref = getContainingFilterReference((TreeItem)match);
+			if (matches.size() > 1 && ref != null && ref != originalFilter)
+			{
+				// could have the same object under multiple filters
+				// need to apply filter
+				ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)parentElementOrTreePath).getAdapter(ISystemViewElementAdapter.class);
+				IContextObject contextObject = getContextObject((TreeItem)match);
+				Object[] newChildren = adapter.getChildren(new NullProgressMonitor(), contextObject);
+				internalAdd(match, parentElementOrTreePath, newChildren);
+			}
+			else
+			{
+				internalAdd(match, parentElementOrTreePath, childElements);
+			}
 		}
 		}
 		
@@ -5226,4 +5251,156 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
 
 		
 	}
+
+
+	/**
+	 * Get the containing filter reference for an item
+	 * @param item the item to get the filter reference for
+	 * @return the filter reference
+	 */
+	public ISystemFilterReference getContainingFilterReference(TreeItem item)
+	{
+		Object data = item.getData();
+		if (data instanceof ISystemFilterReference)
+		{
+			return (ISystemFilterReference)data;
+		}
+		else
+		{
+			TreeItem parent = item.getParentItem();
+			if (parent != null)
+			{
+				return getContainingFilterReference(parent);
+			}
+			else				
+			{
+				Object input = getInput();
+				if (input instanceof ISystemFilterReference)
+				{
+					return (ISystemFilterReference)input;
+				}
+				else
+				{
+					return null;
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Get the containing subsystem from an item
+	 * @param item the item to get the subsystem for
+	 * @return the subsystem
+	 */
+	public ISubSystem getContainingSubSystem(TreeItem item)
+	{
+		Object data = item.getData();
+		if (data instanceof ISubSystem)
+		{
+			return (ISubSystem)data;
+		}
+		else
+		{
+			TreeItem parent = item.getParentItem();
+			if (parent != null)
+			{
+				return getContainingSubSystem(parent);
+			}
+			else				
+			{
+				Object input = getInput();
+				if (input instanceof ISubSystem)
+				{
+					return (ISubSystem)input;
+				}
+				else
+				{
+					return null;
+				}
+			}
+		}
+	}
+	
+	
+	/**
+	 * Get the context object from a tree item
+	 * @param item the item to get the context for
+	 * @return the context object
+	 */
+	public IContextObject getContextObject(TreeItem item)
+	{
+		Object data = item.getData();
+		ISystemFilterReference filterReference = getContainingFilterReference(item);
+		if (filterReference != null)
+		{
+			return new ContextObject(data, filterReference.getSubSystem(), filterReference);
+		}
+		else
+		{
+			ISubSystem subSystem = getContainingSubSystem(item);
+			if (subSystem != null)
+			{
+				return new ContextObject(data, subSystem);
+			}
+			else
+			{				
+				return new ContextObject(data);
+			}
+		}
+	}
+
+	/**
+	 * Overridden so that we can pass a wrapper IContextObject into the provider to get children instead 
+	 * of the model object, itself
+	 */
+	protected void createChildren(final Widget widget) 
+	{
+		if (widget instanceof TreeItem)
+		{
+		final Item[] tis = getChildren(widget);
+		if (tis != null && tis.length > 0) {
+			Object data = tis[0].getData();
+			if (data != null) {
+				return; // children already there!
+			}
+		}
+
+		BusyIndicator.showWhile(widget.getDisplay(), new Runnable() {
+			public void run() {
+				// fix for PR 1FW89L7:
+				// don't complain and remove all "dummies" ...
+				if (tis != null) {
+					for (int i = 0; i < tis.length; i++) {
+						if (tis[i].getData() != null) {
+							disassociate(tis[i]);
+							Assert.isTrue(tis[i].getData() == null,
+									"Second or later child is non -null");//$NON-NLS-1$
+
+						}
+						tis[i].dispose();
+					}
+				}
+				Object d = widget.getData();
+				if (d != null) 
+				{
+					Object parentElement = getContextObject((TreeItem)widget);
+					Object[] children = getSortedChildren(parentElement);
+					if (children != null)
+					{
+						for (int i = 0; i < children.length; i++) 
+						{	
+							createTreeItem(widget, children[i], -1);
+						}
+					}
+				}
+			}
+
+		});
+		}
+		else
+		{
+			super.createChildren(widget);
+		}
+	}
+
 }
\ No newline at end of file
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewAPIProviderForConnections.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewAPIProviderForConnections.java
index ed1055ee2f6..7de2e6b0cdf 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewAPIProviderForConnections.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewAPIProviderForConnections.java
@@ -15,6 +15,7 @@
  ********************************************************************************/
 
 package org.eclipse.rse.ui.view;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.rse.core.model.IHost;
 
 /**
@@ -64,7 +65,7 @@ public class SystemViewAPIProviderForConnections
 	public Object[] getSystemViewRoots()
 	{
 		//return sr.getSubSystems(connection);
-		return getAdapter(connection).getChildren(connection); // pc42690
+		return getAdapter(connection).getChildren(new NullProgressMonitor(), connection); // pc42690
 	}
 	/**
 	 * Return true if {@link #getSystemViewRoots()} will return a non-empty list
@@ -83,7 +84,7 @@ public class SystemViewAPIProviderForConnections
 	public Object[] getConnectionChildren(IHost selectedConnection)
 	{
 		//return sr.getSubSystems(selectedConnection);
-		return getAdapter(selectedConnection).getChildren(selectedConnection); // pc42690
+		return getAdapter(selectedConnection).getChildren(new NullProgressMonitor(), selectedConnection); // pc42690
 	}
 	/**
 	 * This method is called by the connection adapter when deciding to show a plus-sign
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewConnectionAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewConnectionAdapter.java
index 3cbaf2ba1fa..9d22ac6662d 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewConnectionAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewConnectionAdapter.java
@@ -17,6 +17,7 @@
 package org.eclipse.rse.ui.view;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.ICellEditorValidator;
@@ -250,7 +251,7 @@ public class SystemViewConnectionAdapter
 	/**
 	 * Return the children of this object
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		IHost conn = (IHost)element;	
 		ISystemViewInputProvider input = getInput();
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterAdapter.java
index 79d62bd8a57..f745ff80e7c 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterAdapter.java
@@ -17,6 +17,7 @@
 package org.eclipse.rse.ui.view;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -172,7 +173,7 @@ public class SystemViewFilterAdapter extends AbstractSystemViewAdapter implement
 	 * Return the children of this filter.
 	 * This is a combination of nested filters and resolved filter objects.
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		ISystemFilter filter = getFilter(element);
 		// transient filters...
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterPoolAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterPoolAdapter.java
index 338704e9d21..67862d0221c 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterPoolAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterPoolAdapter.java
@@ -17,6 +17,7 @@
 package org.eclipse.rse.ui.view;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -151,7 +152,7 @@ public class SystemViewFilterPoolAdapter extends AbstractSystemViewAdapter imple
 	 * Return the children of this object.
 	 * For filter pools, this is a list of filters.
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		ISystemFilterPool fp = (ISystemFilterPool)element;
 		return fp.getSystemFilters();		
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterPoolReferenceAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterPoolReferenceAdapter.java
index 8bd819bf0d8..9960a52286c 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterPoolReferenceAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterPoolReferenceAdapter.java
@@ -17,6 +17,7 @@
 package org.eclipse.rse.ui.view;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -197,7 +198,7 @@ public class SystemViewFilterPoolReferenceAdapter
 	 * Return the children of this object.
 	 * For filter pools, this is a list of filters.
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		ISystemFilterPoolReference fpRef = getFilterPoolReference(element);
 		ISubSystem ss = getSubSystem(element);
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterReferenceAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterReferenceAdapter.java
index 2df912b6f61..020f7d06ac0 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterReferenceAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterReferenceAdapter.java
@@ -223,24 +223,11 @@ public class SystemViewFilterReferenceAdapter
 	 *  <li>resolved objects for each filter string if user has elected NOT to show filter strings in his preferences
 	 * </ul>
 	 */
-	public Object[] getChildren(IProgressMonitor monitor, Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		return internalGetChildren(monitor, element);
 	}
 	
-	/**
-	 * Return the children of this object.
-	 * For filters, this is one or more of:
-	 * <ul>
-	 *  <li>filters if nested filters supported
-	 *  <li>filter strings if user has elected to show filter strings in his preferences
-	 *  <li>resolved objects for each filter string if user has elected NOT to show filter strings in his preferences
-	 * </ul>
-	 */
-	public Object[] getChildren(Object element)
-	{
-	    return internalGetChildren(null, element);	    
-	}
 	
 	/*
 	 * Returns the children of the specified element.  If a monitor is passed in then 
@@ -621,7 +608,7 @@ public class SystemViewFilterReferenceAdapter
 
 	/**
 	 * Return a validator for verifying the new name is correct.
-	 * @param either a filter for a rename action, or a filter pool for a "new" action.
+	 * @param element either a filter for a rename action, or a filter pool for a "new" action.
 	 */
 	public ISystemValidator getNameValidator(Object element)
 	{
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterStringAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterStringAdapter.java
index b3ef5a28427..f9fca5bec00 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterStringAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewFilterStringAdapter.java
@@ -17,6 +17,7 @@
 package org.eclipse.rse.ui.view;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -148,7 +149,7 @@ public class SystemViewFilterStringAdapter extends AbstractSystemViewAdapter imp
 	 * Return the children of this filter.
 	 * This returns an empty list.
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		return null;
 	}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewLabelAndContentProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewLabelAndContentProvider.java
index d044c6a8e6a..23f37c94c9a 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewLabelAndContentProvider.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewLabelAndContentProvider.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
@@ -37,10 +38,10 @@ import org.eclipse.rse.core.SystemBasePlugin;
 import org.eclipse.rse.core.model.SystemMessageObject;
 import org.eclipse.rse.core.subsystems.ISubSystem;
 import org.eclipse.rse.model.ISystemResourceChangeListener;
+import org.eclipse.rse.ui.operations.SystemDeferredTreeContentManager;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.model.IWorkbenchAdapter;
-import org.eclipse.ui.progress.DeferredTreeContentManager;
 import org.eclipse.ui.progress.PendingUpdateAdapter;
 
 
@@ -65,7 +66,7 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
 	private String                      filterString = null;
 	private Hashtable                   resolvedChildrenPerFolder = null; // local cache to improve performance
 	
-	private DeferredTreeContentManager manager;
+	private SystemDeferredTreeContentManager manager;
 	/**
 	 * The cache of images that have been dispensed by this provider.
 	 * Maps ImageDescriptor->Image.
@@ -167,6 +168,8 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
 	      }
         }
     }
+
+	
     /**
      * Returns the implementation of ISystemViewElement for the given
      * object.  Returns null if the adapter is not defined or the
@@ -174,6 +177,10 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
      */
     protected ISystemViewElementAdapter getAdapter(Object o) 
     {
+    	if (o instanceof IContextObject)
+    	{
+    		o = ((IContextObject)o).getModelObject();
+    	}
     	ISystemViewElementAdapter adapter = null;    	
     	if (o == null)
     	{
@@ -241,20 +248,33 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
     /**
      * @see ITreeContentProvider
      */
-    public Object[] getChildren(Object element) 
+    public Object[] getChildren(Object object) 
     {
-    	ISystemViewElementAdapter adapter = getAdapter(element);
+    	ISystemViewElementAdapter adapter = getAdapter(object);
+    	Object element = object;
+    	if (object instanceof IContextObject)
+    	{
+    		element = ((IContextObject)object).getModelObject();
+    	}
     	if (supportsDeferredQueries())
     	{
 	        if (manager != null && adapter.supportsDeferredQueries()) 
 	        {
-	            ISubSystem ss = adapter.getSubSystem(element);
+	        	ISubSystem ss = null;
+	        	if (object instanceof IContextObject)
+	        	{
+	        		ss = ((IContextObject)object).getSubSystem();
+	        	}
+	        	else
+	        	{
+	        		ss = adapter.getSubSystem(object);
+	        	}
 	            if (ss != null)
 	            {
 	               // if (ss.isConnected())
 	                {
 			            
-						Object[] children = manager.getChildren(element);
+						Object[] children = manager.getChildren(object);
 						if (children != null) 
 						{
 							// This will be a placeholder to indicate 
@@ -301,8 +321,16 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
     	  	if (children != null) // found cached list?
     	  	  return children;    //  return it to caller
     	  }
+
+    	  if (object instanceof IContextObject)
+    	  {
+    		  children = adapter.getChildren(new NullProgressMonitor(), (IContextObject)object);
+    	  }
+    	  else 
+    	  {
+    		  children = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
+    	  }
     	  
-    	  children = adapter.getChildren(element);
 
     	  if ((filesOnly || foldersOnly) && 
     	      // an array of one SystemMessageObject item implies some kind of error, so don't cache...
@@ -378,7 +406,7 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
     	}
     	if (viewer instanceof AbstractTreeViewer) 
     	{
-			manager = new DeferredTreeContentManager(this, (AbstractTreeViewer) viewer);
+			manager = new SystemDeferredTreeContentManager(this, (AbstractTreeViewer) viewer);
 		}
     }
     
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewMessageAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewMessageAdapter.java
index 1aa0340a528..a464367271e 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewMessageAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewMessageAdapter.java
@@ -15,6 +15,8 @@
  ********************************************************************************/
 
 package org.eclipse.rse.ui.view;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.core.model.ISystemMessageObject;
@@ -100,7 +102,7 @@ public class SystemViewMessageAdapter
 	/**
 	 * Return the children of this object. Not applicable for us.
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		return null;		
 	}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewPromptableAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewPromptableAdapter.java
index 259e46e84eb..75ac918586a 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewPromptableAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewPromptableAdapter.java
@@ -15,6 +15,8 @@
  ********************************************************************************/
 
 package org.eclipse.rse.ui.view;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.model.ISystemPromptableObject;
@@ -99,7 +101,7 @@ public class SystemViewPromptableAdapter
 	/**
 	 * Return the children of this object. Not applicable for us.
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		ISystemPromptableObject promptable = (ISystemPromptableObject)element;
 		if (!promptable.hasChildren())
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewRootInputAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewRootInputAdapter.java
index f145d9a2694..e7817565915 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewRootInputAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewRootInputAdapter.java
@@ -16,6 +16,8 @@
 
 package org.eclipse.rse.ui.view;
 
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.core.SystemPreferencesManager;
@@ -102,7 +104,7 @@ public class SystemViewRootInputAdapter extends AbstractSystemViewAdapter implem
 	/**
 	 * Return the children of this object
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		ISystemViewInputProvider provider = (ISystemViewInputProvider)element;
 
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewScratchpadAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewScratchpadAdapter.java
index 5cf5e9fcd31..4c6cea1e0c9 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewScratchpadAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewScratchpadAdapter.java
@@ -18,6 +18,7 @@ package org.eclipse.rse.ui.view;
 
 import java.util.List;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -103,7 +104,7 @@ public class SystemViewScratchpadAdapter extends AbstractSystemViewAdapter imple
 	/**
 	 * Return the children of this object
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 	    SystemScratchpad pad = (SystemScratchpad)element;
 	    return pad.getChildren();
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewSubSystemAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewSubSystemAdapter.java
index a1245a984cb..f18fe4a72e6 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewSubSystemAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/SystemViewSubSystemAdapter.java
@@ -15,6 +15,7 @@
  ********************************************************************************/
 
 package org.eclipse.rse.ui.view;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.resource.ImageDescriptor;
@@ -165,7 +166,7 @@ public class SystemViewSubSystemAdapter extends AbstractSystemViewAdapter
 	/**
 	 * Return the children of this object
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		//System.out.println("INSIDE GETCHILDREN FOR SUBSYSTEM VIEW ADAPTER: "+element);		
 		ISubSystem ss = (ISubSystem)element;
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/monitor/MonitorViewPage.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/monitor/MonitorViewPage.java
index 10a45e375ac..a55b56ad69e 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/monitor/MonitorViewPage.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/monitor/MonitorViewPage.java
@@ -143,7 +143,7 @@ FocusListener
 				   {
 					    public IStatus run(IProgressMonitor monitor) 
 					    {			
-						    Object[] children = _adapter.getChildren(monitor, _inputObject);
+						    Object[] children = _adapter.getChildren(monitor, (IAdaptable)_inputObject);
 		   					if (children != null)
 		   					{
 		   						SystemTableTreeViewProvider provider = (SystemTableTreeViewProvider)_viewer.getContentProvider();
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/scratchpad/SystemScratchpadView.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/scratchpad/SystemScratchpadView.java
index dc7ae9b3c80..7bec3a7e3ce 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/scratchpad/SystemScratchpadView.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/scratchpad/SystemScratchpadView.java
@@ -21,6 +21,7 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Platform;
@@ -48,6 +49,7 @@ import org.eclipse.rse.core.filters.ISystemFilterReference;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.rse.core.model.ISystemRegistry;
 import org.eclipse.rse.core.references.IRSEBaseReferencingObject;
+import org.eclipse.rse.core.subsystems.ISubSystem;
 import org.eclipse.rse.model.ISystemRemoteChangeEvent;
 import org.eclipse.rse.model.ISystemRemoteChangeEvents;
 import org.eclipse.rse.model.ISystemRemoteChangeListener;
@@ -73,6 +75,8 @@ import org.eclipse.rse.ui.actions.SystemSubMenuManager;
 import org.eclipse.rse.ui.messages.ISystemMessageLine;
 import org.eclipse.rse.ui.messages.SystemMessageDialog;
 import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
+import org.eclipse.rse.ui.view.ContextObject;
+import org.eclipse.rse.ui.view.IContextObject;
 import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
 import org.eclipse.rse.ui.view.ISystemSelectAllTarget;
 import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
@@ -81,6 +85,7 @@ import org.eclipse.rse.ui.view.SystemViewDataDragAdapter;
 import org.eclipse.rse.ui.view.SystemViewDataDropAdapter;
 import org.eclipse.rse.ui.view.SystemViewMenuListener;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
 import org.eclipse.swt.dnd.DND;
 import org.eclipse.swt.dnd.FileTransfer;
 import org.eclipse.swt.dnd.TextTransfer;
@@ -90,6 +95,7 @@ import org.eclipse.swt.events.KeyEvent;
 import org.eclipse.swt.events.MouseAdapter;
 import org.eclipse.swt.events.MouseEvent;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Item;
 import org.eclipse.swt.widgets.Layout;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;
@@ -1402,5 +1408,167 @@ public class SystemScratchpadView
 		}
 	}
 	
+	/**
+	 * Overridden so that we can pass a wrapper IContextObject into the provider to get children instead 
+	 * of the model object, itself
+	 */
+	protected void createChildren(final Widget widget) 
+	{
+		if (widget instanceof TreeItem)
+		{
+		final Item[] tis = getChildren(widget);
+		if (tis != null && tis.length > 0) {
+			Object data = tis[0].getData();
+			if (data != null) {
+				return; // children already there!
+			}
+		}
+
+		BusyIndicator.showWhile(widget.getDisplay(), new Runnable() {
+			public void run() {
+				// fix for PR 1FW89L7:
+				// don't complain and remove all "dummies" ...
+				if (tis != null) {
+					for (int i = 0; i < tis.length; i++) {
+						if (tis[i].getData() != null) {
+							disassociate(tis[i]);
+							Assert.isTrue(tis[i].getData() == null,
+									"Second or later child is non -null");//$NON-NLS-1$
+
+						}
+						tis[i].dispose();
+					}
+				}
+				Object d = widget.getData();
+				if (d != null) 
+				{
+					Object parentElement = getContextObject((TreeItem)widget);
+					Object[] children = getSortedChildren(parentElement);
+					if (children != null)
+					{
+						for (int i = 0; i < children.length; i++) 
+						{	
+							createTreeItem(widget, children[i], -1);
+						}
+					}
+				}
+			}
+
+		});
+		}
+		else
+		{
+			super.createChildren(widget);
+		}
+	}
 	
+	
+	/**
+	 * Get the containing filter reference for an item
+	 * @param item the item to get the filter reference for
+	 * @return the filter reference
+	 */
+	public ISystemFilterReference getContainingFilterReference(TreeItem item)
+	{
+		Object data = item.getData();
+		if (data instanceof ISystemFilterReference)
+		{
+			return (ISystemFilterReference)data;
+		}
+		else
+		{
+			TreeItem parent = item.getParentItem();
+			if (parent != null)
+			{
+				return getContainingFilterReference(parent);
+			}
+			else				
+			{
+				Object input = getInput();
+				if (input instanceof ISystemFilterReference)
+				{
+					return (ISystemFilterReference)input;
+				}
+				else
+				{
+					return null;
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Get the containing subsystem from an item
+	 * @param item the item to get the subsystem for
+	 * @return the subsystem
+	 */
+	public ISubSystem getContainingSubSystem(TreeItem item)
+	{
+		Object data = item.getData();
+		if (data instanceof ISubSystem)
+		{
+			return (ISubSystem)data;
+		}
+		else
+		{
+			TreeItem parent = item.getParentItem();
+			if (parent != null)
+			{
+				return getContainingSubSystem(parent);
+			}
+			else				
+			{
+				Object input = getInput();
+				if (input instanceof ISubSystem)
+				{
+					return (ISubSystem)input;
+				}
+				else
+				{
+					return null;
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Get the context object from a tree item
+	 * @param item the item to get the context for
+	 * @return the context object
+	 */
+	public IContextObject getContextObject(TreeItem item)
+	{
+		Object data = item.getData();
+		ISystemFilterReference filterReference = getContainingFilterReference(item);
+		if (filterReference != null)
+		{
+			return new ContextObject(data, filterReference.getSubSystem(), filterReference);
+		}
+		else
+		{
+			ISubSystem subSystem = getContainingSubSystem(item);
+			if (subSystem != null)
+			{
+				return new ContextObject(data, subSystem);
+			}
+			else
+			{				
+				return new ContextObject(data);
+			}
+		}
+	}
+	
+	/**
+	 * Overrides the standard viewer method to get the model object from the context object
+	 */
+	public void add(Object parentElementOrTreePath, Object[] childElements) {
+		Assert.isNotNull(parentElementOrTreePath);
+		assertElementsNotNull(childElements);
+		
+		if (parentElementOrTreePath instanceof IContextObject)
+		{
+			parentElementOrTreePath = ((IContextObject)parentElementOrTreePath).getModelObject();
+		}
+		super.add(parentElementOrTreePath, childElements);
+	}
 }
\ No newline at end of file
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/scratchpad/SystemScratchpadViewProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/scratchpad/SystemScratchpadViewProvider.java
index d40ce4d9dd1..b5905bdb635 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/scratchpad/SystemScratchpadViewProvider.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/scratchpad/SystemScratchpadViewProvider.java
@@ -21,11 +21,13 @@ import java.util.Map;
 
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.rse.ui.view.IContextObject;
 import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.model.IWorkbenchAdapter;
@@ -120,20 +122,32 @@ public class SystemScratchpadViewProvider implements ILabelProvider, ITreeConten
 	{
 		Object[] results = null;
 
-			if (object instanceof IAdaptable)
+		Object element = object;
+		if (object instanceof IContextObject)
+    	{
+    		element = ((IContextObject)object).getModelObject();
+    	}
+		if (element instanceof IAdaptable)
+		{				
+			ISystemViewElementAdapter adapter = getAdapterFor(element);
+			if (adapter != null && adapter.hasChildren(element))
 			{
-				ISystemViewElementAdapter adapter = getAdapterFor(object);
-				if (adapter != null && adapter.hasChildren(object))
-				{
-					results = adapter.getChildren(object);
-				}
-				else
-				{
-					IWorkbenchAdapter wa = (IWorkbenchAdapter)((IAdaptable)object).getAdapter(IWorkbenchAdapter.class);
-					if (wa != null)
-						return wa.getChildren(object);
-				}
+				  if (object instanceof IContextObject)
+		    	  {
+		    		  results = adapter.getChildren(new NullProgressMonitor(), (IContextObject)object);
+		    	  }
+		    	  else 
+		    	  {
+		    		  results = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
+		    	  }
 			}
+			else
+			{
+				IWorkbenchAdapter wa = (IWorkbenchAdapter)((IAdaptable)object).getAdapter(IWorkbenchAdapter.class);
+				if (wa != null)
+					return wa.getChildren(object);
+			}
+		}
 		if (results == null)
 		{
 			return new Object[0];
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/search/SystemSearchViewContentProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/search/SystemSearchViewContentProvider.java
index a7d63c3fd14..e6f3b6ba2a0 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/search/SystemSearchViewContentProvider.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/search/SystemSearchViewContentProvider.java
@@ -17,6 +17,7 @@
 package org.eclipse.rse.ui.view.search;
 
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.rse.core.SystemAdapterHelpers;
@@ -55,7 +56,7 @@ public class SystemSearchViewContentProvider implements ITreeContentProvider {
 				return null;
 			}
 			else {
-				return adapter.getChildren(parentElement);
+				return adapter.getChildren(new NullProgressMonitor(), (IAdaptable)parentElement);
 			}
 		}
 		
@@ -124,7 +125,7 @@ public class SystemSearchViewContentProvider implements ITreeContentProvider {
 				return null;
 			}
 			else {
-				return adapter.getChildren(inputElement);
+				return adapter.getChildren(new NullProgressMonitor(), (IAdaptable)inputElement);
 			}
 		}
 		
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewCategoryAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewCategoryAdapter.java
index 632f928dde1..2567e79e4a3 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewCategoryAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewCategoryAdapter.java
@@ -17,6 +17,8 @@
 package org.eclipse.rse.ui.view.team;
 import java.util.Vector;
 
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.core.IRSEUserIdConstants;
@@ -139,7 +141,7 @@ public class SystemTeamViewCategoryAdapter
 	/**
 	 * Return the children of this profile. 
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		SystemTeamViewCategoryNode category = (SystemTeamViewCategoryNode)element;	
 		ISystemProfile profile = category.getProfile();
@@ -151,6 +153,8 @@ public class SystemTeamViewCategoryAdapter
 		else
 			return createSubSystemConfigurationNodes(profile, category);
 	}
+	
+	
 	/**
 	 * Create subsystem factory child nodes for expanded category node
 	 */
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewContentProvider.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewContentProvider.java
index 5c72a51cfeb..1161539f047 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewContentProvider.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewContentProvider.java
@@ -19,6 +19,7 @@ package org.eclipse.rse.ui.view.team;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.rse.core.SystemBasePlugin;
@@ -64,7 +65,7 @@ public class SystemTeamViewContentProvider extends WorkbenchContentProvider
 		{
 			ISystemViewElementAdapter adapter = getSystemViewAdapter(element);
 			if (adapter != null)
-				children = adapter.getChildren(element);
+				children = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)element);
 			else
 				children = super.getChildren(element);
 		}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewProfileAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewProfileAdapter.java
index f3cc80e2d1e..debd2b13139 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewProfileAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewProfileAdapter.java
@@ -17,6 +17,7 @@
 package org.eclipse.rse.ui.view.team;
 import java.util.Hashtable;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -209,7 +210,7 @@ public class SystemTeamViewProfileAdapter
 	/**
 	 * Return the children of this profile. 
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{
 		ISystemProfile profile = (ISystemProfile)element;	
 		return getCategoryChildren(profile);
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewSubSystemConfigurationAdapter.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewSubSystemConfigurationAdapter.java
index e06ba26d360..f5e82e29301 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewSubSystemConfigurationAdapter.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/team/SystemTeamViewSubSystemConfigurationAdapter.java
@@ -16,6 +16,8 @@
 
 package org.eclipse.rse.ui.view.team;
 
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.rse.core.filters.ISystemFilterPoolManager;
@@ -165,7 +167,7 @@ public class SystemTeamViewSubSystemConfigurationAdapter
 	/**
 	 * Return the children of this profile. 
 	 */
-	public Object[] getChildren(Object element)
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
 	{		
 		SystemTeamViewSubSystemConfigurationNode ssfNode = (SystemTeamViewSubSystemConfigurationNode)element;
 		SystemTeamViewCategoryNode category = ssfNode.getParentCategory();
diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemNodeAdapter.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemNodeAdapter.java
index 7b6d0c9161a..dbc6ef45d7f 100644
--- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemNodeAdapter.java
+++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemNodeAdapter.java
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.rse.tests.internal.testsubsystem;
 
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -124,7 +125,7 @@ public class TestSubSystemNodeAdapter extends AbstractSystemViewAdapter
 	/* (non-Javadoc)
 	 * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(java.lang.Object)
 	 */
-	public Object[] getChildren(Object element) {
+	public Object[] getChildren(IProgressMonitor monitor, IAdaptable element) {
 		if (isTestSubSystemNodeContainer(element))
 			return ((ITestSubSystemNodeContainer)element).getChildNodes();
 		return null;