diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
index bc8dd76..afb1eae 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualCopyToClipboardActionDelegate.java
@@ -25,16 +25,13 @@
 import org.eclipse.debug.internal.ui.actions.ActionMessages;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IVirtualItemListener;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IVirtualItemValidator;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem.Index;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
-import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.debug.ui.IDebugView;
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.MessageDialog;
@@ -149,36 +146,6 @@
 		}
 	}
 
-    private IPresentationContext makeVirtualPresentationContext(final IPresentationContext clientViewerContext) {
-        return new PresentationContext(clientViewerContext.getId()) {
-            {
-                String[] clientProperties = clientViewerContext.getProperties();
-                for (int i = 0; i < clientProperties.length; i++) {
-                    setProperty(clientProperties[i], clientViewerContext.getProperty(clientProperties[i]));
-                }
-                    
-            }
-            
-            public String[] getColumns() {
-                String[] clientColumns = super.getColumns();
-                
-                if (clientColumns == null || clientColumns.length == 0) {
-                    // No columns are used.
-                    return null;
-                }
-                
-                // Try to find the name column.
-                for (int i = 0; i < clientColumns.length; i++) {
-                    if (IDebugUIConstants.COLUMN_ID_VARIABLE_NAME.equals(clientColumns[i])) {
-                        return new String[] { IDebugUIConstants.COLUMN_ID_VARIABLE_NAME }; 
-                    }
-                }
-                
-                return new String[] { clientColumns[0] };
-            }
-        };
-    }
-	
 	private class ItemsToCopyVirtualItemValidator implements IVirtualItemValidator {
 	    
 	    Set fItemsToCopy = Collections.EMPTY_SET;
@@ -211,12 +178,17 @@
         VirtualTreeModelViewer virtualViewer = new VirtualTreeModelViewer(
             clientViewer.getDisplay(), 
             SWT.VIRTUAL, 
-            makeVirtualPresentationContext(clientViewer.getPresentationContext()), 
+            clientViewer.getPresentationContext(), 
             validator); 
         virtualViewer.setFilters(clientViewer.getFilters());
         virtualViewer.addLabelUpdateListener(listener);
         virtualViewer.getTree().addItemListener(listener);
+        String[] columns = clientViewer.getPresentationContext().getColumns();
         virtualViewer.setInput(input);
+        if (virtualViewer.canToggleColumns()) {
+            virtualViewer.setShowColumns(clientViewer.isShowColumns());
+            virtualViewer.setVisibleColumns(columns);
+        }
         virtualViewer.updateViewer(stateDelta);
         
         // Parse selected items from client viewer and add them to the virtual viewer selection.
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
index a7f0007..4306ee6 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/VirtualFindAction.java
@@ -29,15 +29,12 @@
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDeltaVisitor;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualItem;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
-import org.eclipse.debug.ui.IDebugUIConstants;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
@@ -158,49 +155,20 @@
         VirtualTreeModelViewer fVirtualViewer = new VirtualTreeModelViewer(
             clientViewer.getDisplay(), 
             SWT.NONE, 
-            makeVirtualPresentationContext(clientViewer.getPresentationContext()));
+            clientViewer.getPresentationContext());
         fVirtualViewer.setFilters(clientViewer.getFilters());
         fVirtualViewer.addViewerUpdateListener(listener);
         fVirtualViewer.addLabelUpdateListener(listener);
+        String[] columns = clientViewer.getPresentationContext().getColumns();
         fVirtualViewer.setInput(input);
         if (fVirtualViewer.canToggleColumns()) {
             fVirtualViewer.setShowColumns(clientViewer.isShowColumns());
+            fVirtualViewer.setVisibleColumns(columns);
         }
         fVirtualViewer.updateViewer(stateDelta);
         return fVirtualViewer;
 	}
 	
-	private IPresentationContext makeVirtualPresentationContext(final IPresentationContext clientViewerContext) {
-	    return new PresentationContext(clientViewerContext.getId()) {
-	        
-	        {
-	            String[] clientProperties = clientViewerContext.getProperties();
-	            for (int i = 0; i < clientProperties.length; i++) {
-	                setProperty(clientProperties[i], clientViewerContext.getProperty(clientProperties[i]));
-	            }
-	                
-	        }
-	        
-	        public String[] getColumns() {
-	            String[] clientColumns = super.getColumns();
-	            
-	            if (clientColumns == null || clientColumns.length == 0) {
-	                // No columns are used.
-	                return null;
-	            }
-	            
-	            // Try to find the name column.
-	            for (int i = 0; i < clientColumns.length; i++) {
-	                if (IDebugUIConstants.COLUMN_ID_VARIABLE_NAME.equals(clientColumns[i])) {
-	                    return new String[] { IDebugUIConstants.COLUMN_ID_VARIABLE_NAME }; 
-	                }
-	            }
-	            
-	            return new String[] { clientColumns[0] };
-	        }
-	    };
-	}
-	
 	public void run() {
 	    final VirtualViewerListener listener = new VirtualViewerListener();
 	    VirtualTreeModelViewer virtualViewer = initVirtualViewer(fClientViewer, listener);
