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..905ba9b 100644
--- a/apachesolr.admin.inc
+++ b/apachesolr.admin.inc
@@ -689,29 +689,77 @@ function apachesolr_mlt_add_block_form_submit($form, &$form_state) {
  */
 function apachesolr_config_files_overview() {
   $output = array();
-  $xml = NULL;
+  $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');
-    $items = array();
+
+  if (!empty($files)) {
+    // Initializes table header.
+    $header = array(
+      'name' => t('File name'),
+      'date' => t('Modified'),
+      'size' => t('Size'),
+    );
+
+    // Builds table rows.
+    $rows = 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;
-    }
-    ksort($items);
-    $output = theme('item_list', array('items' => array_values($items)));
+      // TODO: try to map the name to something more meaningful.
+      $rows[] = array(
+        'name' => l($file['name'], 'admin/reports/apachesolr/conf/' . $file['name']),
+        'date' => format_date(strtotime($file['date'])),
+        'size' => t('Size (bytes): @bytes', array('@bytes' => $file['long'])),
+      );
+    }
+    ksort($rows);
+
+    // Display the table of field names, index types, and term counts.
+    $variables = array(
+      'header' => $header,
+      'rows' => $rows,
+    );
+    $output .= theme('table', $variables);
+  }
+  else {
+    $output .= '<p>' . t('No data on indexed fields.') . "</p>\n";
   }
   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
@@ -612,7 +612,6 @@
   <!-- 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 
    this single handler is equivalent to registering:
@@ -634,6 +633,9 @@
   -->
   <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">
@@ -719,17 +733,6 @@
   <!-- 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>
     -->
