diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index 853b1c0..3e88b60 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -261,11 +261,6 @@
     proposeAndAccept(name, context, acceptor);
   }
 
-  private ICompletionProposal createCompletionProposal(String proposal, String displayString,
-      ContentAssistContext context) {
-    return createCompletionProposal(proposal, displayString, defaultImage(), context);
-  }
-
   private void proposeAndAccept(String proposalText, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     acceptor.accept(createCompletionProposal(proposalText, context));
   }
@@ -337,7 +332,8 @@
     } else if (properties.isBool(option)) {
       proposalText = proposalText + TRUE;
     }
-    ICompletionProposal proposal = createCompletionProposal(proposalText, displayString, context);
+    Image image = imageHelper.getImage(images.imageFor(Option.class));
+    ICompletionProposal proposal = createCompletionProposal(proposalText, displayString, image, context);
     if (isStringOption && proposal instanceof ConfigurableCompletionProposal) {
       // set cursor between the proposal's quotes
       ConfigurableCompletionProposal configurable = (ConfigurableCompletionProposal) proposal;
@@ -417,4 +413,9 @@
     String previousWord = styledText.getTextRange(start, valueLength);
     return word.equals(previousWord);
   }
+
+  /** {@inheritDoc} */
+  @Override public void completePropertyRef_Property(EObject model, Assignment assignment,
+      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+  }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
index fc0ca3e..984b28f 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
@@ -133,16 +133,18 @@
   }
 
   /**
-   * Returns the options available for the given option container. For example, if the given object is an
+   * Returns the options available for the given option or option container. For example, if the given object is an
    * <code>{@link Enum}</code>, this method will return <code>{@link #enumOptions()}</code>.
-   * @param optionContainer the given container of an option.
-   * @return the options available for the given option container, or an empty collection if the are not any
+   * @param o an option or an option container.
+   * @return the options available for the given option or option container, or an empty collection if the are not any
    * options available for the given option container.
    */
-  public Collection<Property> availableOptionPropertiesFor(EObject optionContainer) {
-    if (optionContainer instanceof Protobuf) return fileOptions();
-    if (optionContainer instanceof Enum) return enumOptions();
-    if (optionContainer instanceof Message) return messageOptions();
+  public Collection<Property> availableOptionPropertiesFor(EObject o) {
+    EObject target = o;
+    if (target instanceof BuiltInOption) target = target.eContainer();
+    if (target instanceof Protobuf) return fileOptions();
+    if (target instanceof Enum) return enumOptions();
+    if (target instanceof Message) return messageOptions();
     return emptyList();
   }
 
