diff --git a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
index d051678..5e07e0c 100644
--- a/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
+++ b/hyracks/hyracks-storage-am-common/src/main/java/edu/uci/ics/hyracks/storage/am/common/dataflow/IndexDataflowHelper.java
@@ -62,66 +62,74 @@
     }
 
     public void create() throws HyracksDataException {
-        long resourceID = getResourceID();
-        index = lcManager.getIndex(resourceID);
-        if (index != null) {
-            lcManager.unregister(resourceID);
-        } else {
-            index = createIndexInstance();
-        }
+        synchronized (lcManager) {
+            long resourceID = getResourceID();
+            index = lcManager.getIndex(resourceID);
+            if (index != null) {
+                lcManager.unregister(resourceID);
+            } else {
+                index = createIndexInstance();
+            }
 
-        // The previous resource ID needs to be removed since calling IIndex.create() may possibly destroy 
-        // any physical artifact that the LocalResourceRepository is managing (e.g. a file containing the resource ID). 
-        // Once the index has been created, a new resource ID can be generated.
-        if (resourceID != -1) {
-            localResourceRepository.deleteResourceByName(file.getFile().getPath());
+            // The previous resource ID needs to be removed since calling IIndex.create() may possibly destroy 
+            // any physical artifact that the LocalResourceRepository is managing (e.g. a file containing the resource ID). 
+            // Once the index has been created, a new resource ID can be generated.
+            if (resourceID != -1) {
+                localResourceRepository.deleteResourceByName(file.getFile().getPath());
+            }
+            index.create();
+            try {
+                //TODO Create LocalResource through LocalResourceFactory interface
+                resourceID = resourceIdFactory.createId();
+                ILocalResourceFactory localResourceFactory = opDesc.getLocalResourceFactoryProvider()
+                        .getLocalResourceFactory();
+                localResourceRepository.insert(localResourceFactory.createLocalResource(resourceID, file.getFile()
+                        .getPath(), partition));
+            } catch (IOException e) {
+                throw new HyracksDataException(e);
+            }
+            lcManager.register(resourceID, index);
         }
-        index.create();
-        try {
-            //TODO Create LocalResource through LocalResourceFactory interface
-            resourceID = resourceIdFactory.createId();
-            ILocalResourceFactory localResourceFactory = opDesc.getLocalResourceFactoryProvider()
-                    .getLocalResourceFactory();
-            localResourceRepository.insert(localResourceFactory.createLocalResource(resourceID, file.getFile()
-                    .getPath(), partition));
-        } catch (IOException e) {
-            throw new HyracksDataException(e);
-        }
-        lcManager.register(resourceID, index);
     }
 
     public void open() throws HyracksDataException {
-        long resourceID = getResourceID();
+        synchronized (lcManager) {
+            long resourceID = getResourceID();
 
-        if (resourceID == -1) {
-            throw new HyracksDataException("Index does not have a valid resource ID. Has it been created yet?");
-        }
+            if (resourceID == -1) {
+                throw new HyracksDataException("Index does not have a valid resource ID. Has it been created yet?");
+            }
 
-        index = lcManager.getIndex(resourceID);
-        if (index == null) {
-            index = createIndexInstance();
-            lcManager.register(resourceID, index);
+            index = lcManager.getIndex(resourceID);
+            if (index == null) {
+                index = createIndexInstance();
+                lcManager.register(resourceID, index);
+            }
+            lcManager.open(resourceID);
         }
-        lcManager.open(resourceID);
     }
 
     public void close() throws HyracksDataException {
-        lcManager.close(getResourceID());
+        synchronized (lcManager) {
+            lcManager.close(getResourceID());
+        }
     }
 
     public void destroy() throws HyracksDataException {
-        long resourceID = getResourceID();
-        index = lcManager.getIndex(resourceID);
-        if (index != null) {
-            lcManager.unregister(resourceID);
-        } else {
-            index = createIndexInstance();
-        }
+        synchronized (lcManager) {
+            long resourceID = getResourceID();
+            index = lcManager.getIndex(resourceID);
+            if (index != null) {
+                lcManager.unregister(resourceID);
+            } else {
+                index = createIndexInstance();
+            }
 
-        if (resourceID != -1) {
-            localResourceRepository.deleteResourceByName(file.getFile().getPath());
+            if (resourceID != -1) {
+                localResourceRepository.deleteResourceByName(file.getFile().getPath());
+            }
+            index.destroy();
         }
-        index.destroy();
     }
 
     public FileReference getFileReference() {
