diff --git a/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
index 7794d75..7b696f1 100644
--- a/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf.ui/META-INF/MANIFEST.MF
@@ -26,6 +26,7 @@
 Export-Package: com.google.eclipse.protobuf.ui.contentassist,
  com.google.eclipse.protobuf.ui.contentassist.antlr,
  com.google.eclipse.protobuf.ui.editor,
+ com.google.eclipse.protobuf.ui.editor.logging,
  com.google.eclipse.protobuf.ui.plugin,
  com.google.eclipse.protobuf.ui.preferences,
  com.google.eclipse.protobuf.ui.preferences.compiler,
diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml
index 8edb1b1..7b7c4da 100644
--- a/com.google.eclipse.protobuf.ui/plugin.xml
+++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?eclipse version="3.0"?>
 <plugin>
+   <extension-point id="remoteLogging" name="Remote Logging" schema="schema/remoteLogging.exsd"/>
   <extension point="org.eclipse.ui.editors">
     <editor class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
       contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor" default="true" icon="icons/pb.gif"
@@ -256,4 +257,4 @@
       <newWizardShortcut id="com.google.eclipse.protobuf.ui.wizards.NewProtoFileWizard" />
     </perspectiveExtension>
   </extension>
-</plugin>
\ No newline at end of file
+</plugin>
diff --git a/com.google.eclipse.protobuf.ui/schema/remoteLogging.exsd b/com.google.eclipse.protobuf.ui/schema/remoteLogging.exsd
new file mode 100644
index 0000000..7f16700
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/schema/remoteLogging.exsd
@@ -0,0 +1,90 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="com.google.eclipse.protobuf.ui" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+      <appInfo>
+         <meta.schema plugin="com.google.eclipse.protobuf.ui" id="remoteLoggin" name="Remote Logging"/>
+      </appInfo>
+      <documentation>
+         Provides support for remote logging.
+      </documentation>
+   </annotation>
+
+   <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
+      <complexType>
+         <attribute name="point" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="id" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+            </annotation>
+         </attribute>
+         <attribute name="name" type="string">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute translatable="true"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <element name="editorUsage">
+      <complexType>
+         <attribute name="class" type="string" use="required">
+            <annotation>
+               <documentation>
+                  
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="java" basedOn=":com.google.eclipse.protobuf.ui.editor.logging.EditorUsageLogger"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
+   <annotation>
+      <appInfo>
+         <meta.section type="since"/>
+      </appInfo>
+      <documentation>
+         1.2.7
+      </documentation>
+   </annotation>
+
+
+
+
+   <annotation>
+      <appInfo>
+         <meta.section type="copyright"/>
+      </appInfo>
+      <documentation>
+         Copyright (c) 2012 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
+
+Contributors:
+Google, Inc. - initial API and implementation
+      </documentation>
+   </annotation>
+
+</schema>
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/logging/EditorUsageLogger.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/logging/EditorUsageLogger.java
new file mode 100644
index 0000000..e6fd701
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/logging/EditorUsageLogger.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2012 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.logging;
+
+import org.eclipse.ui.IEditorInput;
+
+/**
+ * Logs usage of the Protocol Buffer editor.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public interface EditorUsageLogger {
+  void logDocumentCreation(IEditorInput editorInput);
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/logging/RemoteLogger.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/logging/RemoteLogger.java
new file mode 100644
index 0000000..999bb4d
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/logging/RemoteLogger.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2012 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.logging;
+
+import static java.util.logging.Level.SEVERE;
+
+import com.google.inject.*;
+
+import org.eclipse.core.runtime.*;
+
+import java.util.logging.Logger;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton public class RemoteLogger {
+  private static final String EXTENSION_ID = "com.google.eclipse.protobuf.ui.remoteLogging";
+
+  private static Logger logger = Logger.getLogger(RemoteLogger.class.getCanonicalName());
+
+  @Inject private IExtensionRegistry registry;
+
+  private boolean initialized;
+  private EditorUsageLogger editorUsageLogger;
+
+  private final Object lock = new Object();
+
+  public EditorUsageLogger editorUsage() {
+    synchronized (lock) {
+      if (!initialized) {
+        initialize();
+      }
+      return editorUsageLogger;
+    }
+  }
+
+  private void initialize() {
+    initialized = true;
+    IConfigurationElement[] config = registry.getConfigurationElementsFor(EXTENSION_ID);
+    if (config == null) {
+      return;
+    }
+    for (IConfigurationElement e : config) {
+      if ("editorUsage".equals(e.getName()) && editorUsageLogger == null) {
+        try {
+          editorUsageLogger = (EditorUsageLogger) e.createExecutableExtension("class");
+        } catch (CoreException error) {
+          logger.log(SEVERE, "Unable to create 'editorUsage' instance", error);
+        }
+      }
+    }
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
index 5c53b9f..e32e226 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
@@ -16,7 +16,10 @@
 import static org.eclipse.core.filebuffers.LocationKind.*;
 import static org.eclipse.text.undo.DocumentUndoManagerRegistry.getDocumentUndoManager;
 
-import java.util.List;
+import com.google.eclipse.protobuf.ui.editor.logging.*;
+import com.google.eclipse.protobuf.ui.preferences.editor.save.SaveActionsPreferences;
+import com.google.eclipse.protobuf.ui.util.editor.ChangedLineRegionCalculator;
+import com.google.inject.*;
 
 import org.eclipse.core.filebuffers.*;
 import org.eclipse.core.runtime.*;
@@ -27,9 +30,7 @@
 import org.eclipse.ui.*;
 import org.eclipse.xtext.ui.editor.model.*;
 
-import com.google.eclipse.protobuf.ui.preferences.editor.save.SaveActionsPreferences;
-import com.google.eclipse.protobuf.ui.util.editor.ChangedLineRegionCalculator;
-import com.google.inject.*;
+import java.util.List;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -39,6 +40,7 @@
 
   @Inject private ChangedLineRegionCalculator calculator;
   @Inject private Provider<SaveActionsPreferences> preferencesProvider;
+  @Inject private RemoteLogger logger;
   @Inject private SaveActions saveActions;
 
   private final List<DocumentContentsFactory> documentFactories;
@@ -48,12 +50,22 @@
   }
 
   @Override protected ElementInfo createElementInfo(Object element) throws CoreException {
+    logEditorUsage(element);
     if (findDocumentFactory(element) != null) {
       return createElementInfo((IEditorInput) element);
     }
     return super.createElementInfo(element);
   }
 
+  private void logEditorUsage(Object element) {
+    EditorUsageLogger editorUsageLogger = logger.editorUsage();
+    IEditorInput editorInput = null;
+    if (element instanceof IEditorInput) {
+      editorInput = (IEditorInput) element;
+    }
+    editorUsageLogger.logDocumentCreation(editorInput);
+  }
+
   private ElementInfo createElementInfo(IEditorInput input) throws CoreException {
     IDocument document = null;
     IStatus status = null;
