diff --git a/Solr_Base_Query.php b/Solr_Base_Query.php
index 679e987..705aa13 100644
--- a/Solr_Base_Query.php
+++ b/Solr_Base_Query.php
@@ -242,6 +242,7 @@ class SolrBaseQuery extends SolrFilterSubQuery implements DrupalSolrQueryInterfa
     'debugQuery' => TRUE,
     'start' => TRUE,
     'rows' => TRUE,
+    'stats' => TRUE,
     'facet' => TRUE,
     'facet.prefix' => TRUE,
     'facet.limit' => TRUE,
diff --git a/apachesolr.info b/apachesolr.info
index 0da5613..6fd8342 100644
--- a/apachesolr.info
+++ b/apachesolr.info
@@ -13,6 +13,7 @@ files[] = Solr_Base_Query.php
 files[] = plugins/facetapi/adapter.inc
 files[] = plugins/facetapi/query_type_date.inc
 files[] = plugins/facetapi/query_type_term.inc
+files[] = plugins/facetapi/query_type_numeric_range.inc
 files[] = tests/Dummy_Solr.php
 files[] = tests/solr_index_and_search.test
 files[] = tests/solr_base_query.test
diff --git a/apachesolr.module b/apachesolr.module
index 671df46..9d476eb 100644
--- a/apachesolr.module
+++ b/apachesolr.module
@@ -266,6 +266,12 @@ function apachesolr_facetapi_query_types() {
         'adapter' => 'apachesolr',
       ),
     ),
+    'apachesolr_numeric_range' => array(
+      'handler' => array(
+        'class' => 'ApacheSolrFacetapiNumericRange',
+        'adapter' => 'apachesolr',
+      ),
+    ),
   );
 }
 
@@ -1568,7 +1574,7 @@ function apachesolr_do_query(DrupalSolrQueryInterface $current_query, $page = 0)
     // Gets enabled facets, adds filter queries to $params.
     $adapter = facetapi_adapter_load($searcher);
     if ($adapter) {
-      $adapter->addActiveFilters($current_query);
+      $adapter->addActiveFilters($current_query, 'block');
     }
   }
 
@@ -2232,14 +2238,15 @@ function field_apachesolr_field_mappings() {
       'map callback' => 'apachesolr_fields_list_facet_map_callback',
       'index_type' => 'integer',
       'facets' => TRUE,
+      'query type' => array('term', 'numeric_range'),
       'facet missing allowed' => TRUE,
-      'query type' => 'numeric_range',
     ),
     'list_float' => array(
       'indexing_callback' => 'apachesolr_fields_default_indexing_callback',
       'map callback' => 'apachesolr_fields_list_facet_map_callback',
       'index_type' => 'float',
       'facets' => TRUE,
+      'query type' => array('term', 'numeric_range'),
       'facet missing allowed' => TRUE,
     ),
     'list_text' => array(
@@ -2259,16 +2266,22 @@ function field_apachesolr_field_mappings() {
     'number_integer' => array(
       'indexing_callback' => 'apachesolr_fields_default_indexing_callback',
       'index_type' => 'tint',
+      'facets' => TRUE,
+      'query type' => array('term', 'numeric_range'),
       'facet mincount allowed' => TRUE,
     ),
     'number_decimal' => array(
       'indexing_callback' => 'apachesolr_fields_default_indexing_callback',
       'index_type' => 'tfloat',
+      'facets' => TRUE,
+      'query type' => array('term', 'numeric_range'),
       'facet mincount allowed' => TRUE,
     ),
     'number_float' => array(
       'indexing_callback' => 'apachesolr_fields_default_indexing_callback',
       'index_type' => 'tfloat',
+      'facets' => TRUE,
+      'query type' => array('term', 'numeric_range'),
       'facet mincount allowed' => TRUE,
     ),
     'taxonomy_term_reference' => array(
@@ -2294,7 +2307,7 @@ function date_apachesolr_field_mappings() {
     'indexing_callback' => 'apachesolr_date_default_indexing_callback',
     'index_type' => 'date',
     'facets' => TRUE,
-    'query type' => 'date',
+    'query type' => array('date'),
     'min callback' => 'apachesolr_get_min_date',
     'max callback' => 'apachesolr_get_max_date',
     'map callback' => 'facetapi_map_date',
diff --git a/plugins/facetapi/query_type_numeric_range.inc b/plugins/facetapi/query_type_numeric_range.inc
new file mode 100644
index 0000000..713a269
--- /dev/null
+++ b/plugins/facetapi/query_type_numeric_range.inc
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * @file
+ * Numeric range query type plugin for the Apache Solr adapter.
+ */
+
+/**
+ * Plugin for "numeric_range" query types.
+ */
+class ApacheSolrFacetapiNumericRange extends FacetapiQueryType implements FacetapiQueryTypeInterface {
+
+  /**
+   * Returns the query type associated with the plugin.
+   *
+   * @return string
+   *   The query type.
+   */
+  static public function getType() {
+    return 'numeric_range';
+  }
+
+  /**
+   * Adds the filter to the query object.
+   *
+   * @param DrupalSolrQueryInterface $query
+   *   An object containing the query in the backend's native API.
+   */
+  public function execute($query) {
+    $settings = $this->adapter->getFacet($this->facet)->getSettings();
+    $active = $this->adapter->getActiveItems($this->facet);
+    // See:  http://wiki.apache.org/solr/StatsComponent
+    $query->addParam('stats', 'true');
+    $query->addParam('stats.field', $this->facet['field']);
+    // Range filters don't support OR operator.
+    foreach ($active as $value => $item) {
+      $query->addFilter($this->facet['field'], $value);
+    }
+  }
+
+  /**
+   * Initializes the facet's build array.
+   *
+   * @return array
+   *   The initialized render array.
+   */
+  public function build() {
+    $build = array();
+    if ($response = apachesolr_static_response_cache($this->adapter->getSearcher())) {
+      if (isset($response->stats->stats_fields->{$this->facet['field']})) {
+        $stats = (array) $response->stats->stats_fields->{$this->facet['field']};
+        foreach ($stats as $key => $val) {
+          $build[$this->facet['field']]['#range_' . $key] = $val;
+        }
+      }
+    }
+    return $build;
+  }
+}
