diff --git a/custom_search.module b/custom_search.module
index 25d303e..e2aa7cf 100644
--- a/custom_search.module
+++ b/custom_search.module
@@ -414,6 +414,16 @@ function custom_search_submit($form, &$form_state) {
     }
   }
 
+  // Invoke other modules hooks.
+  $other = array();
+  foreach (module_implements('custom_search_filter') as $module) {
+    $function = $module . '_custom_search_filter';
+    if (function_exists($function)) {
+      $other = call_user_func_array($function, array($form, $form_state, $other));
+    }   
+  }
+
+
   $search_types = module_implements('search_info');
   if (in_array(current($types), $search_types)) {
     $type = current($types);
@@ -465,6 +475,7 @@ function custom_search_submit($form, &$form_state) {
 
   // Integrates other search modules.
   if (module_exists('apachesolr_search')) {
+    $fields = field_info_fields();
     for ($i = 0; $i < count($types); $i++) {
       // Remove the item from the array if it's not a content type.
       if (!in_array($types[$i], array_keys(node_type_get_types()))) {
@@ -475,7 +486,8 @@ function custom_search_submit($form, &$form_state) {
       'keywords'  => $original_keywords,
       'types'     => $types,
       'terms'     => (!empty($terms)) ? $terms : array(),
-    ));
+      'other'     => (!empty($other)) ? $other : array(),
+    ), $keys, $fields);
   }
   elseif (module_exists('google_appliance')) {
     $search_path = _custom_search_google_appliance_search(array(
diff --git a/includes/apachesolr_search.inc b/includes/apachesolr_search.inc
index b411790..00a35df 100644
--- a/includes/apachesolr_search.inc
+++ b/includes/apachesolr_search.inc
@@ -14,7 +14,7 @@
  * the complete search path
  */
 
-function _custom_search_apachesolr_search($variables) {
+function _custom_search_apachesolr_search($variables, &$keys, $fields) {
   // Use the search info for the apachesolr module to get the search path.
   $solr_info = apachesolr_search_search_info();
   $type = 'search/' . $solr_info['path'] . '/' . $variables['keywords'];
@@ -22,13 +22,12 @@ function _custom_search_apachesolr_search($variables) {
 
   if (count($variables['types']) && !in_array('all', $variables['types'])) {
     foreach ($variables['types'] as $t) {
-      $keys['fq[' . count($keys) . ']'] = 'bundle:' . $t;
+      $keys['f[' . count($keys) . ']'] = 'bundle:' . $t;
     }
   }
 
   if (module_exists('taxonomy') && count($variables['terms'])) {
     // Get all fields info to get correct filter names.
-    $fields = field_info_fields();
     $taxonomy_fields = array();
     foreach ($fields as $name => $settings) {
       if ($settings['type'] == 'taxonomy_term_reference') {
@@ -39,9 +38,16 @@ function _custom_search_apachesolr_search($variables) {
     // Build keys for taxonomy.
     foreach ($variables['terms'] as $t) {
       $vocid = taxonomy_term_load($t)->vid;
-      $keys['fq[' . count($keys) . ']'] = 'im_' . $taxonomy_fields[$vocid] . ':' . $t;
+      $keys['f[' . count($keys) . ']'] = 'im_' . $taxonomy_fields[$vocid] . ':' . $t;
     }
   }
 
+  foreach (module_implements('custom_search_apachesolr_processing') as $module) {
+    $function = $module . '_custom_search_apachesolr_processing';
+    
+    if (function_exists($function)) {
+      call_user_func_array($function, array(&$keys, $fields, $variables['other']));
+    }
+  }
   return array('path' => $type, 'query' => $keys);
 }
