diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
index 898e21d..85bc753 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
@@ -42,6 +42,7 @@
   static {
     IMAGES_BY_TYPE.put(Enum.class, "enum.gif");
     IMAGES_BY_TYPE.put(ExtendMessage.class, "extend.gif");
+    IMAGES_BY_TYPE.put(Extensions.class, "extensions.gif");
     IMAGES_BY_TYPE.put(Group.class, "group.gif");
     IMAGES_BY_TYPE.put(Import.class, "import.gif");
     IMAGES_BY_TYPE.put(Literal.class, "literal.gif");
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
index 9fe9161..e486599 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
@@ -1,9 +1,10 @@
 /*
  * Copyright (c) 2011 Google Inc.
- *
- * 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
- *
+ * 
+ * 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
  */
 package com.google.eclipse.protobuf.ui.labeling;
@@ -16,16 +17,16 @@
 import com.google.eclipse.protobuf.util.Properties;
 import com.google.inject.*;
 
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.jface.viewers.StyledString;
 import org.eclipse.xtext.nodemodel.INode;
 
 /**
  * Registry of commonly used text in the 'Protocol Buffer' editor.
- *
+ * 
  * @author alruiz@google.com (Alex Ruiz)
  */
-@Singleton
-public class Labels {
+@Singleton public class Labels {
 
   @Inject private ModelNodes nodes;
   @Inject private Properties properties;
@@ -35,6 +36,10 @@
       ExtendMessage extend = (ExtendMessage) o;
       return labelFor(extend);
     }
+    if (o instanceof Extensions) {
+      Extensions extensions = (Extensions) o;
+      return labelFor(extensions);
+    }
     if (o instanceof Import) {
       Import i = (Import) o;
       return labelFor(i);
@@ -58,6 +63,22 @@
     return messageName(extend.getMessage());
   }
 
+  private Object labelFor(Extensions extensions) {
+    StringBuilder builder = new StringBuilder();
+    EList<Range> ranges = extensions.getRanges();
+    int rangeCount = ranges.size();
+    for (int i = 0; i < rangeCount; i++) {
+      if (i > 0) builder.append(", ");
+      Range range = ranges.get(i);
+      builder.append(range.getFrom());
+      String to = range.getTo();
+      if (to != null) {
+        builder.append(" > ").append(to);
+      }
+    }
+    return builder.toString();
+  }
+
   private Object labelFor(Import i) {
     INode node = nodes.firstNodeForFeature(i, IMPORT__IMPORT_URI);
     if (node == null) return i.getImportURI();
@@ -74,7 +95,9 @@
   private Object labelFor(Property p) {
     StyledString text = new StyledString(p.getName());
     String typeName = properties.typeNameOf(p);
-    if (typeName == null) typeName = "<unresolved reference>"; // TODO move to properties file
+    if (typeName == null) typeName = "<unresolved reference>"; // TODO move to
+                                                               // properties
+                                                               // file
     String indexAndType = String.format(" [%d] : %s", p.getIndex(), typeName);
     text.append(indexAndType, DECORATIONS_STYLER);
     return text;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
index 7821e1c..ec63990 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
@@ -32,6 +32,10 @@
     IGNORED_ELEMENT_TYPES.add(FieldOption.class);
     IGNORED_ELEMENT_TYPES.add(MessageRef.class);
   }
+  
+  boolean _isLeaf(Extensions e) {
+    return true;
+  }
 
   boolean _isLeaf(Option o) {
     return true;
