diff --git a/apachesolr_views_query.inc b/apachesolr_views_query.inc
index 5f81a24..1d4226a 100644
--- a/apachesolr_views_query.inc
+++ b/apachesolr_views_query.inc
@@ -601,21 +601,47 @@ class apachesolr_views_query extends views_plugin_query implements Drupal_Solr_Q
     if (empty($this->_view_arguments)) {
       return $this->_base_path;
     }
+
+    // Create a copy of the facets that are set for the query.
+    $facets = $this->_facets;
+    // Iterate through the view arguments and populate them with either a facet
+    // value, the value passes as an argument to the view or the wildcard
+    // specified in the argument options.
     foreach ($this->_view_arguments as $field => $argument) {
-      // because some arguments arn't standard base arguments we need to do things differently
-      // so that the facet blocks behave. So any argument thats not part of a facet block
-      // we have its value copied into the path
-      // arguments that are a facet block argument will be processed differently
-      $path_part = $this->part_of_facet_block($argument) ? $this->argument_part($field) : $argument->argument;
+      // Check if the argument is configured to be populated by a facet block
+      // and if facet data for the argument is available.
+      if ($argument->options['facet_block'] && in_array($argument->field, array_keys($facets))) {
+        $path_part = $this->argument_part($argument->field, $facets);
+      }
+      // Otherwise, check if a views argument value is set for the argument and
+      // use that if available.
+      elseif (isset($argument->argument)) {
+        $path_part = $argument->argument;
+        // Remove from facets to prevent that values show up in more than one argument.
+        if (!empty($facets[$argument->field])) {
+          foreach ($facets[$argument->field] as $key => $facet) {
+            if ($facet['value'] == $argument->argument) {
+              unset($facets[$argument->field][$key]);
+            }
+          }
+        }
+      }
+      else {
+        $path_part = FALSE;
+      }
+
       if (!empty($path_part)) {
         $path_parts[$argument->position + 1] = $path_part;
         $wildcard_count = 0;
       }
+      // If neither a facet nor a views argument value is set, use the wildcard
+      // specified for the argument.
       else {
         $path_parts[$argument->position + 1] = $argument->options['wildcard'];
         $wildcard_count++;
       }
     }
+
     $arguments = explode('/', $this->_base_path);
     $path = '';
     foreach ($arguments as $arg) {
@@ -639,49 +665,32 @@ class apachesolr_views_query extends views_plugin_query implements Drupal_Solr_Q
   }
   
   /**
-   * return the facet argument suitable for Views
+   * Return a facet value suitable to be used as the value of a views argument.
    *
    * @param string $field
-   * name of the facet
+   *   Name of the facet.
    *
+   * @param array $facets
+   *   An array of facets. If omitted $this->_facets is used.
+   *   
    * @return string the part of the url for Views that matches this facet value
    */
-  protected function argument_part($field) {
+  protected function argument_part($field, $facets = NULL) {
+    if (is_null($facets)) {
+      $facets = $this->_facets;
+    }
     $argument_path = '';
-    if (empty($this->_facets[$field])) {
+    if (empty($facets[$field])) {
       return '';
     }
-    foreach ($this->_facets[$field] as $defintion) {
+    foreach ($facets[$field] as $defintion) {
       if (!$defintion['exclude']) {
         $argument_path .= ',' . $defintion['value'];
       }
     }
-    
     return drupal_substr($argument_path, 1);
   }
-  
-  /**
-   * determine if argument field is part of a facet block
-   *
-   * @return bool
-   * Whether or not the provided argument could be in a facet block
-   */
-  protected function part_of_facet_block($argument) {
-    foreach (apachesolr_get_enabled_facets() as $module => $module_facets) {
-      foreach($module_facets as $delta => $facet_field) {
-        $facet_arguments[] = $facet_field;
-      }
-    }
-
-    // Facets are IM_* where as arguement are tid so this is a quick fix
-    if ((!empty($facet_arguments)) && ($argument->field == "tid")) return true;
 
-    // we use field instead of real_field
-    // because we want these specific ones defined in
-    // apachesolr_views.views.inc
-    return (in_array($argument->field, $facet_arguments));
-  }
-    
   /**
    * return any query string for use in the l function
    *
@@ -708,7 +717,6 @@ class apachesolr_views_query extends views_plugin_query implements Drupal_Solr_Q
     foreach ($this->_extra_query as $field => $value) {
       $query_values[$field] = $value;
     }
-    
     return $query_values;
   }
   
diff --git a/handlers/apachesolr_views_handler_argument.inc b/handlers/apachesolr_views_handler_argument.inc
index 6a35ea4..0ceb2a8 100644
--- a/handlers/apachesolr_views_handler_argument.inc
+++ b/handlers/apachesolr_views_handler_argument.inc
@@ -25,6 +25,7 @@ class apachesolr_views_handler_argument extends views_handler_argument {
   function option_definition() {
     $options = parent::option_definition();
     $options['break_phrase'] = array('default' => FALSE);
+    $options['facet_block'] = array('default' => TRUE);
     $options['not'] = array('default' => FALSE);
 
     return $options;
@@ -41,6 +42,18 @@ class apachesolr_views_handler_argument extends views_handler_argument {
       '#default_value' => !empty($this->options['break_phrase']),
     );
 
+    // Make it possible to exclude an argument from being populated with values
+    // from facet blocks, e.g. if this argument is passed as part of the menu
+    // link or by other means and you still want to be able to use facet blocks
+    // of the same field without losing the menu link.
+    // @see apachesolr_views_query->part_of_facet_block().
+    $form['facet_block'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Allow this argument to be populated from facet blocks.'),
+      '#description' => t('If unchecked, this argument will not be populated with values from Apachesolr facet block but only with values that come directly from the URL.'),
+      '#default_value' => !empty($this->options['facet_block']),
+    );
+
     $form['not'] = array(
       '#type' => 'checkbox',
       '#title' => t('Exclude the argument'),
