diff --git a/Drupal_Apache_Solr_Service.php b/Drupal_Apache_Solr_Service.php
index 16075bc..d3d339c 100644
--- a/Drupal_Apache_Solr_Service.php
+++ b/Drupal_Apache_Solr_Service.php
@@ -74,6 +74,7 @@ class DrupalApacheSolrService {
    * Servlet mappings
    */
   const PING_SERVLET = 'admin/ping';
+  const SYSTEM_SERVLET = 'admin/system';
   const UPDATE_SERVLET = 'update';
   const SEARCH_SERVLET = 'select';
   const LUKE_SERVLET = 'admin/luke';
@@ -102,6 +103,7 @@ class DrupalApacheSolrService {
   protected $env_id;
   protected $luke;
   protected $stats;
+  protected $system_info;
 
   /**
    * Call the /admin/ping servlet, to test the connection to the server.
@@ -135,6 +137,44 @@ class DrupalApacheSolrService {
   }
 
   /**
+   * Call the /admin/ping servlet, to test the connection to the server.
+   *
+   * @param $timeout
+   *   maximum time to wait for ping in seconds, -1 for unlimited (default 2).
+   * @return
+   *   (float) seconds taken to ping the server, FALSE if timeout occurs.
+   */
+  public function setSystemInfo() {
+    $url = $this->_constructUrl(self::SYSTEM_SERVLET);
+    if ($this->env_id) {
+      $this->system_info_cid = $this->env_id . ":system:" . drupal_hash_base64($url);
+      $cache = cache_get($this->system_info_cid, 'cache_apachesolr');
+      if (isset($cache->data)) {
+        $this->system_info = simplexml_load_string($cache->data);
+      }
+    }
+    // Second pass to populate the cache if necessary.
+    if (empty($this->system_info)) {
+      $response = $this->_sendRawGet($url);
+      $this->system_info = simplexml_load_string($response->data);
+      if ($this->env_id) {
+        cache_set($this->system_info_cid, $response->data, 'cache_apachesolr');
+      }
+    }
+  }
+
+  /**
+   * Get information about the Solr Core.
+   *
+   * Returns a Simple XMl document
+   */
+  public function getSystemInfo() {
+    if (!isset($this->system_info)) {
+      $this->setSystemInfo();
+    }
+    return $this->system_info;
+  }
+  /**
    * Sets $this->luke with the meta-data about the index from admin/luke.
    */
   protected function setLuke($num_terms = 0) {
diff --git a/apachesolr.admin.inc b/apachesolr.admin.inc
index c7b5830..8714400 100644
--- a/apachesolr.admin.inc
+++ b/apachesolr.admin.inc
@@ -688,29 +688,57 @@ function apachesolr_mlt_add_block_form_submit($form, &$form_state) {
  * Page callback to show available conf files.
  */
 function apachesolr_config_files_overview() {
-  $output = array();
-  $xml = NULL;
+  $output = t('Nothing found');
+  $files = array();
   try {
     $solr = apachesolr_get_solr();
+    $system_info = $solr->getSystemInfo();
+    $lucene_version = $system_info->xpath('//str[@name="lucene-spec-version"]');
+    $lucene_version = (int) reset($lucene_version);
+
     $response = $solr->makeServletRequest('admin/file');
-    $xml = simplexml_load_string($response->data);
+    if ($lucene_version >= 3) {
+      $result = json_decode($response->data);
+      if (!empty($result) && isset($result->files)) {
+        foreach ($result->files as $name => $file) {
+          $files[] = array(
+            'name' => $name,
+            'date' => $file->modified,
+            'long' => $file->size,
+          );
+        }
+      }
+    }
+    else {
+      $result = simplexml_load_string($response->data);
+      $items = $result->xpath('//lst[@name="files"]/lst');
+      if ($items) {
+        $files = array();
+        foreach ($items as $item) {
+          $name =  $item->attributes();
+          $files[] = array(
+            'name' => (string) $name[0],
+            'date' => (string) $item->date,
+            'long' => (string) $item->long,
+            'long' => (string) $item->long,
+          );
+        }
+      }
+    }
   }
   catch (Exception $e) {
     watchdog('Apache Solr', nl2br(check_plain($e->getMessage())), NULL, WATCHDOG_ERROR);
     drupal_set_message(nl2br(check_plain($e->getMessage())), "warning");
   }
-  if ($xml) {
-    $files = $xml->xpath('//lst[@name="files"]/lst');
+
+  if (!empty($files)) {
     $items = array();
     foreach ($files as $file) {
-      $atr = $file->attributes();
-      $name = (string) $atr[0];
-      $str = l($name, 'admin/reports/apachesolr/conf/' . $name);
-      $str .= '<br />' . format_date(strtotime((string) $file->date));
-      $str .= '<br />' . t('Size (bytes): @bytes', array('@bytes' => (string) $file->long));
-      $items[$name] = $str;
+      $str = l($file['name'], 'admin/reports/apachesolr/conf/' . $file['name']);
+      $str .= '<br />' . format_date(strtotime($file['date']));
+      $str .= '<br />' . t('Size (bytes): @bytes', array('@bytes' => $file['long']));
+      $items[$file['name']] = $str;
     }
-    ksort($items);
     $output = theme('item_list', array('items' => array_values($items)));
   }
   return $output;
diff --git a/solr-conf/solrconfig.xml b/solr-conf/solrconfig.xml
index 0505e6e..79f45ed 100644
--- a/solr-conf/solrconfig.xml
+++ b/solr-conf/solrconfig.xml
@@ -18,8 +18,8 @@
 
 <config name="drupal-3.0-beta9">
 
-  <!-- Set this to 'false' if you want solr to continue working after it has 
-       encountered an severe configuration error.  In a production environment, 
+  <!-- Set this to 'false' if you want solr to continue working after it has
+       encountered an severe configuration error.  In a production environment,
        you may want solr to keep working even if one handler is mis-configured.
 
        You may also set this to false using by setting the system property:
@@ -85,7 +85,7 @@
 
     <!--
       This option specifies which Lucene LockFactory implementation to use.
-      
+
       single = SingleInstanceLockFactory - suggested for a read-only index
                or when there is no possibility of another process trying
                to modify the index.
@@ -106,7 +106,7 @@
     <maxMergeDocs>2147483647</maxMergeDocs>
     <maxFieldLength>20000</maxFieldLength>
 
-    <!-- If true, unlock any held write or commit locks on startup. 
+    <!-- If true, unlock any held write or commit locks on startup.
          This defeats the locking mechanism that allows multiple
          processes to safely access a lucene index, and should be
          used with care.
@@ -135,7 +135,7 @@
       <!--
           Delete all commit points once they have reached the given age.
           Supports DateMathParser syntax e.g.
-          
+
           <str name="maxCommitAge">30MINUTES</str>
           <str name="maxCommitAge">1DAY</str>
       -->
@@ -143,7 +143,7 @@
 
   </mainIndex>
 
-  <!--	Enables JMX if and only if an existing MBeanServer is found, use 
+  <!--	Enables JMX if and only if an existing MBeanServer is found, use
   		this if you want to configure JMX through JVM parameters. Remove
   		this to disable exposing Solr configuration and statistics to JMX.
 
@@ -169,9 +169,9 @@
          maxDocs - number of updates since last commit is greater than this
          maxTime - oldest uncommited update (in ms) is this long ago
     -->
-    <autoCommit> 
+    <autoCommit>
       <maxDocs>2000</maxDocs>
-      <maxTime>120000</maxTime> 
+      <maxTime>120000</maxTime>
     </autoCommit>
 
 
@@ -192,7 +192,7 @@
     </listener>
     -->
     <!-- A postOptimize event is fired only after every optimize command, useful
-         in conjunction with index distribution to only distribute optimized indicies 
+         in conjunction with index distribution to only distribute optimized indicies
     <listener event="postOptimize" class="solr.RunExecutableListener">
       <str name="exe">snapshooter</str>
       <str name="dir">solr/bin</str>
@@ -348,7 +348,7 @@
 
   </query>
 
-  <!-- 
+  <!--
     Let the dispatch filter handler /select?qt=XXX
     handleSelect=true will use consistent error handling for /select and /update
     handleSelect=false will use solr1.1 style error formatting
@@ -358,7 +358,7 @@
     <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
 
     <!-- Set HTTP caching related parameters (for proxy caches and clients).
-          
+
          To get the behaviour of Solr 1.2 (ie: no caching related headers)
          use the never304="true" option and do not specify a value for
          <cacheControl>
@@ -397,7 +397,7 @@
 
   <!-- requestHandler plugins... incoming queries will be dispatched to the
      correct handler based on the path or the qt (query type) param.
-     Names starting with a '/' are accessed with the a path equal to the 
+     Names starting with a '/' are accessed with the a path equal to the
      registered name.  Names without a leading '/' are accessed with:
       http://host/app/select?qt=name
      If no qt is defined, the requestHandler that declares default="true"
@@ -430,8 +430,8 @@
 <!-- SLAVE_REPLICATION_START
 <requestHandler name="/replication" class="solr.ReplicationHandler" >
     <lst name="slave">
-        <str name="masterUrl">$MASTER_CORE_URL/replication</str> 
-        <str name="pollInterval">$POLL_TIME</str>  
+        <str name="masterUrl">$MASTER_CORE_URL/replication</str>
+        <str name="pollInterval">$POLL_TIME</str>
      </lst>
 </requestHandler>
  SLAVE_REPLICATION_END -->
@@ -439,7 +439,7 @@
   <!-- DisMaxRequestHandler allows easy searching across multiple fields
        for simple user-entered phrases.  It's implementation is now
        just the standard SearchHandler with a default query type
-       of "dismax". 
+       of "dismax".
        see http://wiki.apache.org/solr/DisMaxRequestHandler
    -->
   <requestHandler name="dismax" class="solr.SearchHandler">
@@ -516,16 +516,16 @@
 
   <!--
    Search components are registered to SolrCore and used by Search Handlers
-   
+
    By default, the following components are avaliable:
-    
+
    <searchComponent name="query"     class="org.apache.solr.handler.component.QueryComponent" />
    <searchComponent name="facet"     class="org.apache.solr.handler.component.FacetComponent" />
    <searchComponent name="mlt"       class="org.apache.solr.handler.component.MoreLikeThisComponent" />
    <searchComponent name="highlight" class="org.apache.solr.handler.component.HighlightComponent" />
    <searchComponent name="stats"     class="org.apache.solr.handler.component.StatsComponent" />
    <searchComponent name="debug"     class="org.apache.solr.handler.component.DebugComponent" />
-   
+
    Default configuration in a requestHandler would look like:
     <arr name="components">
       <str>query</str>
@@ -538,11 +538,11 @@
 
     If you register a searchComponent to one of the standard names, that will be used instead.
     To insert components before or after the 'standard' components, use:
-    
+
     <arr name="first-components">
       <str>myFirstComponentName</str>
     </arr>
-    
+
     <arr name="last-components">
       <str>myLastComponentName</str>
     </arr>
@@ -592,7 +592,7 @@
   </requestHandler>
 
 
-  <!-- Update request handler.  
+  <!-- Update request handler.
 
        Note: Since solr1.1 requestHandlers requires a valid content type header if posted in
        the body. For example, curl now requires: -H 'Content-type:text/xml; charset=utf-8'
@@ -612,28 +612,30 @@
   <!-- CSV update handler, loaded on demand -->
   <requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy" />
 
-
-  <!-- 
-   Admin Handlers - This will register all the standard admin RequestHandlers.  Adding 
+  <!--
+   Admin Handlers - This will register all the standard admin RequestHandlers.  Adding
    this single handler is equivalent to registering:
-   
+
   <requestHandler name="/admin/luke"       class="org.apache.solr.handler.admin.LukeRequestHandler" />
   <requestHandler name="/admin/system"     class="org.apache.solr.handler.admin.SystemInfoHandler" />
   <requestHandler name="/admin/plugins"    class="org.apache.solr.handler.admin.PluginInfoHandler" />
   <requestHandler name="/admin/threads"    class="org.apache.solr.handler.admin.ThreadDumpHandler" />
   <requestHandler name="/admin/properties" class="org.apache.solr.handler.admin.PropertiesRequestHandler" />
   <requestHandler name="/admin/file"       class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
-  
+
   If you wish to hide files under ${solr.home}/conf, explicitly register the ShowFileRequestHandler using:
   <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
     <lst name="invariants">
-     <str name="hidden">synonyms.txt</str> 
-     <str name="hidden">anotherfile.txt</str> 
+     <str name="hidden">synonyms.txt</str>
+     <str name="hidden">anotherfile.txt</str>
     </lst>
   </requestHandler>
   -->
   <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
 
+  <!-- System info -->
+  <requestHandler name="/admin/system"     class="org.apache.solr.handler.admin.SystemInfoHandler" />
+
   <!-- ping/healthcheck -->
   <requestHandler name="/admin/ping" class="PingRequestHandler">
     <lst name="defaults">
@@ -643,6 +645,18 @@
     </lst>
   </requestHandler>
 
+  <!-- Files that are needed to start the service -->
+  <requestHandler name="/admin/file" class="org.apache.solr.handler.admin.ShowFileRequestHandler" >
+    <lst name="invariants">
+     <str name="hidden">admin-extra.html</str>
+     <str name="hidden">scripts.conf</str>
+     <str name="hidden">xslt/example.xsl</str>
+     <str name="hidden">xslt/example_atom.xsl</str>
+     <str name="hidden">xslt/example_rss.xsl</str>
+     <str name="hidden">xslt/luke.xsl</str>
+    </lst>
+  </requestHandler>
+
   <!-- Echo the request contents back to the client -->
   <requestHandler name="/debug/dump" class="solr.DumpRequestHandler" >
     <lst name="defaults">
@@ -685,7 +699,7 @@
   <!-- queryResponseWriter plugins... query responses will be written using the
     writer specified by the 'wt' request parameter matching the name of a registered
     writer.
-    The "default" writer is the default and will be used if 'wt' is not specified 
+    The "default" writer is the default and will be used if 'wt' is not specified
     in the request. XMLResponseWriter will be used if nothing is specified here.
     The json, python, and ruby writers are also available by default.
 
@@ -701,7 +715,7 @@
 
   <!-- XSLT response writer transforms the XML output by any xslt file found
        in Solr's conf/xslt directory.  Changes to xslt files are checked for
-       every xsltCacheLifetimeSeconds.  
+       every xsltCacheLifetimeSeconds.
    -->
   <queryResponseWriter name="xslt" class="org.apache.solr.request.XSLTResponseWriter">
     <int name="xsltCacheLifetimeSeconds">5</int>
@@ -712,24 +726,13 @@
   <queryParser name="lucene" class="org.apache.solr.search.LuceneQParserPlugin"/>
   -->
 
-  <!-- example of registering a custom function parser 
+  <!-- example of registering a custom function parser
   <valueSourceParser name="myfunc" class="com.mycompany.MyValueSourceParser" />
   -->
 
   <!-- config for the admin interface -->
   <admin>
     <defaultQuery>solr</defaultQuery>
-
-    <gettableFiles>
-         solrconfig.xml
-         schema.xml
-         elevate.xml
-         mapping-ISOLatin1Accent.txt
-         protwords.txt
-         stopwords.txt
-         synonyms.txt
-    </gettableFiles>   
-
     <!-- configure a healthcheck file for servers behind a loadbalancer
     <healthcheck type="file">server-enabled</healthcheck>
     -->
