diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java
index 2b295b4..5811392 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIMessages.java
@@ -299,6 +299,7 @@
 	public static String OffsetStatusLineContributionItem_11;
 	public static String OffsetStatusLineContributionItem_12;
 	public static String OffsetStatusLineContributionItem_13;
+	public static String OffsetStatusLineContributionItem_14;
 	public static String OffsetStatusLineContributionItem_15;
 	public static String OffsetStatusLineContributionItem_16;
 	public static String OffsetStatusLineContributionItem_17;
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties
index 65d725f..71727bd 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/SSEUIPluginResources.properties
@@ -273,6 +273,7 @@
 OffsetStatusLineContributionItem_11=Type
 OffsetStatusLineContributionItem_12=Input Type: 
 OffsetStatusLineContributionItem_13=Partitioner: 
+OffsetStatusLineContributionItem_14=Selection
 OffsetStatusLineContributionItem_15=Start
 OffsetStatusLineContributionItem_16=Length
 OffsetStatusLineContributionItem_17=Text Length
diff --git a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/ui/OffsetStatusLineContributionItem.java b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/ui/OffsetStatusLineContributionItem.java
index 9b19440..63ffe56 100644
--- a/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/ui/OffsetStatusLineContributionItem.java
+++ b/bundles/org.eclipse.wst.sse.ui/src/org/eclipse/wst/sse/ui/internal/ui/OffsetStatusLineContributionItem.java
@@ -29,6 +29,7 @@
 import org.eclipse.jface.text.ITypedRegion;
 import org.eclipse.jface.text.TextUtilities;
 import org.eclipse.jface.text.source.Annotation;
+import org.eclipse.jface.text.source.IAnnotationModel;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.ColumnWeightData;
@@ -39,6 +40,7 @@
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.ListViewer;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableLayout;
 import org.eclipse.jface.viewers.TableViewer;
@@ -98,7 +100,7 @@
 			setShellStyle(getShellStyle() | SWT.RESIZE);
 		}
 
-		private void createAnnotationContents(Composite annotationsTabComposite) {
+		private void createAnnotationTabContents(Composite annotationsTabComposite) {
 			annotationsTabComposite.setLayout(new GridLayout());
 			annotationsTabComposite.setLayoutData(new GridData());
 
@@ -169,11 +171,16 @@
 			annotationsTable.setColumnProperties(columns);
 			// textSelection.getOffset(), textSelection.getLength()
 			List matchingAnnotations = new ArrayList(0);
-			Iterator iterator = fTextEditor.getDocumentProvider().getAnnotationModel(fTextEditor.getEditorInput()).getAnnotationIterator();
-			while (iterator.hasNext()) {
-				Annotation element = (Annotation) iterator.next();
-				if (true) {
-					matchingAnnotations.add(element);
+			if (fTextEditor != null) {
+				IAnnotationModel annotationModel = fTextEditor.getDocumentProvider().getAnnotationModel(fTextEditor.getEditorInput());
+				if (annotationModel != null) {
+					Iterator iterator = annotationModel.getAnnotationIterator();
+					while (iterator.hasNext()) {
+						Annotation element = (Annotation) iterator.next();
+						if (true) {
+							matchingAnnotations.add(element);
+						}
+					}
 				}
 			}
 			annotationsTable.setInput(matchingAnnotations);
@@ -218,7 +225,7 @@
 			partitionTab.setText(SSEUIMessages.OffsetStatusLineContributionItem_2); //$NON-NLS-1$
 			Composite partitions = new Composite(tabfolder, SWT.NONE);
 			partitionTab.setControl(partitions);
-			createPartitionContents(partitions);
+			createPartitionTabContents(partitions);
 
 			// only create the ITextRegions tab for IStructuredDocuments
 			if (fDocument instanceof IStructuredDocument) {
@@ -227,14 +234,20 @@
 				SashForm regions = new SashForm(tabfolder, SWT.NONE);
 				regions.setOrientation(SWT.HORIZONTAL);
 				regionTab.setControl(regions);
-				createRegionsContents(regions);
+				createRegionTabContents(regions);
 			}
 
 			TabItem annotationsTab = new TabItem(tabfolder, SWT.BORDER);
 			annotationsTab.setText("Annotations"); //$NON-NLS-1$
 			Composite annotations = new Composite(tabfolder, SWT.NONE);
 			annotationsTab.setControl(annotations);
-			createAnnotationContents(annotations);
+			createAnnotationTabContents(annotations);
+
+			TabItem selectionTab = new TabItem(tabfolder, SWT.BORDER);
+			selectionTab.setText(SSEUIMessages.OffsetStatusLineContributionItem_14);
+			Composite selection = new Composite(tabfolder, SWT.NONE);
+			selectionTab.setControl(selection);
+			createSelectionTabContents(selection);
 
 			return composite;
 		}
@@ -242,7 +255,7 @@
 		/**
 		 * @param area
 		 */
-		private void createPartitionContents(Composite area) {
+		private void createPartitionTabContents(Composite area) {
 			area.setLayout(new GridLayout());
 			area.setLayoutData(new GridData());
 
@@ -401,11 +414,37 @@
 			partitioningCombo.setFocus();
 		}
 
+		private void createSelectionTabContents(Composite area) {
+			area.setLayout(new GridLayout());
+			area.setLayoutData(new GridData());
+
+			ISelection sel = fTextEditor.getSelectionProvider().getSelection();
+
+			Text typeName = new Text(area, SWT.WRAP);
+			typeName.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+			typeName.setText(sel.getClass().getName());
+			typeName.setBackground(area.getBackground());
+
+			(new Label(area, SWT.NONE)).setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+
+			ListViewer objectList = new ListViewer(area, SWT.SINGLE | SWT.BORDER);
+			objectList.setContentProvider(new ArrayContentProvider());
+			if (sel instanceof IStructuredSelection) {
+				Object[] toArray = ((IStructuredSelection) sel).toArray();
+				objectList.setInput(toArray);
+				typeName.setText(toArray.length + " objects in " + sel.getClass().getName());
+			}
+			else {
+				objectList.setInput(new Object[0]);
+			}
+			objectList.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		}
+
 		/**
 		 * @param composite
 		 * @return
 		 */
-		private Composite createRegionsContents(SashForm sashForm) {
+		private Composite createRegionTabContents(SashForm sashForm) {
 			ISelection sel = fTextEditor.getSelectionProvider().getSelection();
 			final ITextSelection textSelection = (ITextSelection) sel;
 			final List documentRegions = new ArrayList();
@@ -442,10 +481,10 @@
 						children.add(((ITextRegionCollection) parentElement).getRegions().toArray());
 					}
 					if (parentElement instanceof ITextRegion) {
-						children.add(new Pair(CONTEXT, ((ITextRegion) parentElement).getType()));
-						children.add(new Pair(START, Integer.toString(((ITextRegion) parentElement).getStart())));
-						children.add(new Pair(TEXTLENGTH, Integer.toString(((ITextRegion) parentElement).getTextLength())));
-						children.add(new Pair(LENGTH, Integer.toString(((ITextRegion) parentElement).getLength())));
+						children.add(new KeyValuePair(CONTEXT, ((ITextRegion) parentElement).getType()));
+						children.add(new KeyValuePair(START, Integer.toString(((ITextRegion) parentElement).getStart())));
+						children.add(new KeyValuePair(TEXTLENGTH, Integer.toString(((ITextRegion) parentElement).getTextLength())));
+						children.add(new KeyValuePair(LENGTH, Integer.toString(((ITextRegion) parentElement).getLength())));
 					}
 					if (parentElement instanceof ITextRegionList) {
 						children.add(Arrays.asList(((ITextRegionList) parentElement).toArray()));
@@ -473,7 +512,7 @@
 				}
 
 				public boolean hasChildren(Object element) {
-					return !(element instanceof Pair);
+					return !(element instanceof KeyValuePair);
 				}
 
 				public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
@@ -481,8 +520,8 @@
 			});
 			tree.setLabelProvider(new LabelProvider() {
 				public String getText(Object element) {
-					if (element instanceof Pair)
-						return ((Pair) element).fKey.toString().toLowerCase() + ": " + ((Pair) element).fValue; //$NON-NLS-1$
+					if (element instanceof KeyValuePair)
+						return ((KeyValuePair) element).fKey.toString().toLowerCase() + ": " + ((KeyValuePair) element).fValue; //$NON-NLS-1$
 					if (element instanceof IStructuredDocumentRegion) {
 						IStructuredDocumentRegion documentRegion = (IStructuredDocumentRegion) element;
 						int packageNameLength = documentRegion.getClass().getPackage().getName().length();
@@ -505,14 +544,16 @@
 				}
 			});
 			tree.setInput(fDocument);
+
+
 			final Text displayText = new Text(sashForm, SWT.V_SCROLL | SWT.H_SCROLL | SWT.READ_ONLY | SWT.BORDER);
 			displayText.setBackground(sashForm.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
 			tree.addSelectionChangedListener(new ISelectionChangedListener() {
 				public void selectionChanged(SelectionChangedEvent event) {
 					if (event.getSelection() instanceof IStructuredSelection) {
 						Object o = ((IStructuredSelection) event.getSelection()).getFirstElement();
-						if (o instanceof Pair)
-							displayText.setText(((Pair) o).fValue.toString());
+						if (o instanceof KeyValuePair)
+							displayText.setText(((KeyValuePair) o).fValue.toString());
 						else if (o instanceof ITextSelection) {
 							ITextSelection text = (ITextSelection) o;
 							try {
@@ -522,6 +563,10 @@
 								displayText.setText(""); //$NON-NLS-1$
 							}
 						}
+						else if (o instanceof ITextRegionCollection) {
+							ITextRegionCollection region = (ITextRegionCollection) o;
+							displayText.setText(region.getFullText());
+						}
 						else
 							displayText.setText("" + o); //$NON-NLS-1$
 					}
@@ -590,11 +635,11 @@
 		}
 	}
 
-	static class Pair {
+	static class KeyValuePair {
 		Object fKey;
 		String fValue;
 
-		public Pair(Object key, String value) {
+		public KeyValuePair(Object key, String value) {
 			fKey = key;
 			fValue = value;
 		}
