Code cleanup.
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
index e394477..f1d8ca5 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
@@ -34,11 +34,17 @@
 
   private ProtoDescriptor descriptor;
 
-  public synchronized ProtoDescriptor get() {
-    IProtoDescriptorSource actualSource = sourceFromPlugin();
-    if (actualSource == null) actualSource = source;
-    if (descriptor == null) descriptor = new ProtoDescriptor(parser, actualSource, nodes);
-    return descriptor;
+  private final Object lock = new Object();
+
+  public ProtoDescriptor get() {
+    synchronized (lock) {
+      if (descriptor == null) {
+        IProtoDescriptorSource actualSource = sourceFromPlugin();
+        if (actualSource == null) actualSource = source;
+        descriptor = new ProtoDescriptor(parser, actualSource, nodes);
+      }
+      return descriptor;
+    }
   }
   
   private IProtoDescriptorSource sourceFromPlugin() {