diff --git a/com.google.eclipse.protobuf.ui/icons/pb-ro.gif b/com.google.eclipse.protobuf.ui/icons/pb-ro.gif
new file mode 100644
index 0000000..ececd94
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/icons/pb-ro.gif
Binary files differ
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
index 87ba97d..ff92c08 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
@@ -28,6 +28,7 @@
 import com.google.eclipse.protobuf.scoping.IFileUriResolver;
 import com.google.eclipse.protobuf.ui.builder.nature.AutoAddNatureEditorCallback;
 import com.google.eclipse.protobuf.ui.documentation.ProtobufDocumentationProvider;
+import com.google.eclipse.protobuf.ui.editor.FileOutsideWorkspaceIconUpdater;
 import com.google.eclipse.protobuf.ui.editor.ProtobufUriEditorOpener;
 import com.google.eclipse.protobuf.ui.editor.hyperlinking.ProtobufHyperlinkDetector;
 import com.google.eclipse.protobuf.ui.editor.model.ProtobufDocumentProvider;
@@ -68,7 +69,7 @@
   public Class<? extends IFileUriResolver> bindFileUriResolver() {
     return FileUriResolver.class;
   }
-
+  
   public Class<? extends IHighlightingConfiguration> bindHighlightingConfiguration() {
     return HighlightingConfiguration.class;
   }
@@ -109,6 +110,12 @@
     return ProtobufQuickAssistProcessor.class;
   }
 
+  public void configureFileOutsideWorkspaceIconUpdater(Binder binder) {
+    binder.bind(IXtextEditorCallback.class)
+          .annotatedWith(named("FileOutsideWorkspaceIconUpdater"))
+          .to(FileOutsideWorkspaceIconUpdater.class);
+  }
+  
   @Override public void configureLanguageSpecificURIEditorOpener(Binder binder) {
     if (!isWorkbenchRunning())return;
     binder.bind(IURIEditorOpener.class)
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOutsideWorkspaceIconUpdater.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOutsideWorkspaceIconUpdater.java
new file mode 100644
index 0000000..d33862a
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOutsideWorkspaceIconUpdater.java
@@ -0,0 +1,76 @@
+/*
+ * 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
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.editor;
+
+import static org.eclipse.core.runtime.Status.OK_STATUS;
+import static org.eclipse.xtext.ui.editor.Messages.XtextEditorErrorTickUpdater_JobName;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.progress.UIJob;
+import org.eclipse.xtext.ui.PluginImageHelper;
+import org.eclipse.xtext.ui.editor.IXtextEditorCallback.NullImpl;
+import org.eclipse.xtext.ui.editor.SchedulingRuleFactory;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+
+import com.google.inject.Inject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class FileOutsideWorkspaceIconUpdater extends NullImpl {
+
+  private static final ISchedulingRule SEQUENCE_RULE = SchedulingRuleFactory.INSTANCE.newSequence();
+
+  @Inject
+  private PluginImageHelper imageHelper;
+
+  @Override
+  public void afterSetInput(XtextEditor editor) {
+    IEditorInput editorInput = editor.getEditorInput();
+    IResource resource = (IResource) editorInput.getAdapter(IResource.class);
+    if (resource == null) {
+      UpdateEditorImageJob job = new UpdateEditorImageJob();
+      job.scheduleFor(editor, imageHelper.getImage("pb-ro.gif"));
+    }
+  }
+
+  private static class UpdateEditorImageJob extends UIJob {
+    private XtextEditor editor;
+    private Image titleImage;
+
+    public UpdateEditorImageJob() {
+      super(XtextEditorErrorTickUpdater_JobName);
+      setRule(SEQUENCE_RULE);
+    }
+
+    @Override
+    public IStatus runInUIThread(final IProgressMonitor monitor) {
+      IEditorSite site = null != editor ? editor.getEditorSite() : null;
+      if (site != null) {
+        if (!monitor.isCanceled() && titleImage != null && !titleImage.isDisposed() && editor != null) {
+          editor.updatedTitleImage(titleImage);
+        }
+      }
+      return OK_STATUS;
+    }
+
+    void scheduleFor(XtextEditor newEditor, Image newTitleImage) {
+      cancel();
+      editor = newEditor;
+      titleImage = newTitleImage;
+      schedule();
+    }
+  }
+}
