diff --git a/com.google.eclipse.protobuf.ui/icons/rpc.gif b/com.google.eclipse.protobuf.ui/icons/rpc.gif
new file mode 100644
index 0000000..b5dd4ec
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/icons/rpc.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/icons/syntax.gif b/com.google.eclipse.protobuf.ui/icons/syntax.gif
new file mode 100644
index 0000000..c71de32
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/icons/syntax.gif
Binary files differ
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 0534220..7fe0ced 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
@@ -48,7 +48,9 @@
     IMAGES_BY_TYPE.put(Option.class, "option.gif");
     IMAGES_BY_TYPE.put(Package.class, "package.gif");
     IMAGES_BY_TYPE.put(Protobuf.class, "protobuf.gif");
+    IMAGES_BY_TYPE.put(Rpc.class, "rpc.gif");
     IMAGES_BY_TYPE.put(Service.class, "service.gif");
+    IMAGES_BY_TYPE.put(Syntax.class, "syntax.gif");
   }
 
   private static final List<String> STANDALONE_IMAGES = asList("extensions.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 db89fd2..09f8cc2 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
@@ -28,6 +28,10 @@
   @Inject private Properties properties;
 
   public Object labelFor(Object o) {
+    if (o instanceof ExtendMessage) {
+      ExtendMessage extend = (ExtendMessage) o;
+      return labelFor(extend);
+    }
     if (o instanceof Import) {
       Import i = (Import) o;
       return labelFor(i);
@@ -44,9 +48,17 @@
       Protobuf p = (Protobuf) o;
       return labelFor(p);
     }
+    if (o instanceof Rpc) {
+      Rpc r = (Rpc) o;
+      return labelFor(r);
+    }
     return null;
   }
 
+  private Object labelFor(ExtendMessage extend) {
+    return messageName(extend.getMessage());
+  }
+
   private Object labelFor(Import i) {
     String uri = i.getImportURI();
     if (uri == null || !uri.startsWith(URI_PREFIX)) return uri;
@@ -71,4 +83,15 @@
     // TODO show this text till I figure out how to hide 'Protobuf' node in outline view
     return "Protocol Buffer";
   }
+
+  private Object labelFor(Rpc r) {
+    StyledString text = new StyledString(r.getName());
+    String types = String.format(" : %s > %s", messageName(r.getArgType()), messageName(r.getReturnType()));
+    text.append(types, DECORATIONS_STYLER);
+    return text;
+  }
+
+  private String messageName(MessageReference r) {
+    return r.getType().getName();
+  }
 }
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 02334ba..412134b 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
@@ -8,12 +8,14 @@
  */
 package com.google.eclipse.protobuf.ui.outline;
 
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.ui.editor.outline.IOutlineNode;
 import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider;
 
 import com.google.eclipse.protobuf.protobuf.*;
 
 /**
- * Customization of the default outline structure
+ * Customization of the default outline structure.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -27,7 +29,8 @@
     return true;
   }
 
-  boolean _isLeaf(Service s) {
-    return true;
+  @Override protected void createNode(IOutlineNode parent, EObject modelElement) {
+    if (modelElement instanceof MessageReference) return;
+    super.createNode(parent, modelElement);
   }
 }
