Index: metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/ApplicationController.java
===================================================================
--- metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/ApplicationController.java	(revision 7810)
+++ metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/ApplicationController.java	(revision 7811)
@@ -26,17 +26,12 @@
  */
 package edu.ucsb.nceas.metacat.index;
 
-import edu.ucsb.nceas.metacat.common.SolrServerFactory;
-import edu.ucsb.nceas.metacat.common.query.EnabledQueryEngines;
-
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Timer;
 
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -46,9 +41,11 @@
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.FileSystemXmlApplicationContext;
 
-import com.hazelcast.client.HazelcastClient;
 import com.ibm.icu.util.Calendar;
 
+import edu.ucsb.nceas.metacat.common.SolrServerFactory;
+import edu.ucsb.nceas.metacat.common.query.EnabledQueryEngines;
+
 /**
  * The start class of the index.
  * @author tao
@@ -228,8 +225,10 @@
     /**
      * Start the system metadata listener. Prior to call this method, we should call
      * initialize method first.
+     * @throws ServiceFailure 
+     * @throws FileNotFoundException 
      */
-    public void startSysmetaListener() {
+    public void startSysmetaListener() throws FileNotFoundException, ServiceFailure {
         if(sysmetaListeners != null) {
             //only expects one listener.
             for(SystemMetadataEventListener listener : sysmetaListeners) {
Index: metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/SystemMetadataEventListener.java
===================================================================
--- metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/SystemMetadataEventListener.java	(revision 7810)
+++ metacat-index/src/main/java/edu/ucsb/nceas/metacat/index/SystemMetadataEventListener.java	(revision 7811)
@@ -34,14 +34,10 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.dataone.configuration.Settings;
+import org.dataone.service.exceptions.ServiceFailure;
 import org.dataone.service.types.v1.Identifier;
 import org.dataone.service.types.v1.SystemMetadata;
 
-import com.hazelcast.client.ClientConfig;
-import com.hazelcast.client.HazelcastClient;
-import com.hazelcast.config.Config;
-import com.hazelcast.config.FileSystemXmlConfig;
 import com.hazelcast.core.EntryEvent;
 import com.hazelcast.core.EntryListener;
 import com.hazelcast.core.IMap;
@@ -51,13 +47,7 @@
 	private static Log log = LogFactory.getLog(SystemMetadataEventListener.class);
 	
 	private SolrIndex solrIndex = null;
-	
-	//private HazelcastClient hzClient;
-
-    private IMap<Identifier, SystemMetadata> systemMetadataMap;
-    
-    private IMap<Identifier, String> objectPathMap;
-    
+	        
     /**
      * Default constructor - caller needs to initialize manually
      * @see setSolrIndex()
@@ -72,7 +62,11 @@
      */
     public SystemMetadataEventListener(SolrIndex solrIndex) {
     	this.solrIndex = solrIndex;
-    	start();
+    	try {
+			start();
+		} catch (Exception e) {
+			log.error(e.getMessage(), e);
+		}
     }
     
     /**
@@ -93,59 +87,42 @@
 
 	/**
      * Registers this instance as a system metadata map event listener
+	 * @throws ServiceFailure 
+	 * @throws FileNotFoundException 
      */
-    public void start() {
+    public void start() throws FileNotFoundException, ServiceFailure {
     	
-        try {
-            // get shared structures and add listener
-            this.systemMetadataMap =  DistributedMapsFactory.getSystemMetadataMap();
-            this.objectPathMap = DistributedMapsFactory.getObjectPathMap();
-
-        } catch (Exception e) {
-            log.error("Unable to create hazelcast client: ", e);
-            e.printStackTrace();
-        }
-        
-        this.systemMetadataMap.addEntryListener(this, true);
-        log.info("System Metadata size: " + this.systemMetadataMap.size());
-        log.info("Object path size:" + this.objectPathMap.size());
+        // get shared structures and add listener
+        IMap<Identifier, String> objectPathMap = DistributedMapsFactory.getObjectPathMap();
+        IMap<Identifier, SystemMetadata> systemMetadataMap = DistributedMapsFactory.getSystemMetadataMap();
+		systemMetadataMap.addEntryListener(this, true);
+        log.info("System Metadata size: " + systemMetadataMap.size());
+        log.info("Object path size:" + objectPathMap.size());
     }
 
     /**
      * Removes this instance as a system metadata map event listener
+     * @throws ServiceFailure 
+     * @throws FileNotFoundException 
      */
-    public void stop() {
+    public void stop() throws FileNotFoundException, ServiceFailure {
     	log.info("stopping index entry listener...");
-        this.systemMetadataMap.removeEntryListener(this);
+    	DistributedMapsFactory.getSystemMetadataMap().removeEntryListener(this);
     }
     
     /**
-     * Get the SystemMetadata for the specified id from the distributed Map.
-     * The null maybe is returned if there is no system metadata found.
-     * @param id  the specified id.
-     * @return the SystemMetadata associated with the id.
-     */
-    private SystemMetadata getSystemMetadata(String id) {
-        SystemMetadata metadata = null;
-        if(systemMetadataMap != null && id != null) {
-            Identifier identifier = new Identifier();
-            identifier.setValue(id);
-            metadata = systemMetadataMap.get(identifier);
-        }
-        return metadata;
-    }
-    
-    /**
      * Get the obsoletes chain of the specified id. The returned list doesn't include
      * the specified id itself. The newer version has the lower index number in the list.
      * Empty list will be returned if there is no document to be obsoleted by this id.
      * @param id
      * @return
+     * @throws ServiceFailure
+     * @throws FileNotFoundException 
      */
-    private List<String> getObsoletes(String id) {
+    private List<String> getObsoletes(String id) throws FileNotFoundException, ServiceFailure {
         List<String> obsoletes = new ArrayList<String>();
         while (id != null) {
-            SystemMetadata metadata = getSystemMetadata(id);
+            SystemMetadata metadata = DistributedMapsFactory.getSystemMetadata(id);
             id = null;//set it to be null in order to stop the while loop if the id can't be assinged to a new value in the following code.
             if(metadata != null) {
                 Identifier identifier = metadata.getObsoletes();
@@ -196,10 +173,19 @@
 		SystemMetadata systemMetadata = entryEvent.getValue();
 		Identifier obsoletes = systemMetadata.getObsoletes();
 		List<String> obsoletesChain = null;
-		if(obsoletes != null) {
-		    obsoletesChain= getObsoletes(pid.getValue());
+		if (obsoletes != null) {
+		    try {
+				obsoletesChain = getObsoletes(pid.getValue());
+			} catch (Exception e) {
+	            log.error("Could not look up revision history" + e.getMessage(), e);
+			}
 		}
-		String objectPath = objectPathMap.get(pid);
+		String objectPath = null;
+		try {
+			objectPath = DistributedMapsFactory.getObjectPathMap().get(pid);
+		} catch (Exception e) {
+			log.error("Could not look up object path" + e.getMessage(), e);
+		}
 		if(objectPath != null) {
 		    InputStream data = null;
 	        try {
