diff --git a/facetapi_pretty_paths.module b/facetapi_pretty_paths.module
index d5cfd78..1f9fce6 100644
--- a/facetapi_pretty_paths.module
+++ b/facetapi_pretty_paths.module
@@ -152,8 +152,15 @@ function facetapi_pretty_paths_facetapi_pretty_paths_coders() {
  */
 function facetapi_pretty_paths_facetapi_facet_info_alter(array &$facet_info, array $searcher_info) {
   foreach ($facet_info as &$facet) {
-    if ($facet['field type'] == 'taxonomy_term') {
+    // Check for Apache Solr Taxonomy Term fields
+    if(!empty($facet_info['map options']['module_name']) && $facet_info['map options']['module_name'] == 'Taxonomy') {
       $facet['facetapi pretty paths coder'] = 'taxonomy';
+      continue;
+    }
+    // Check for Search API Taxonomy Term fields
+    if (!empty($facet['field type']) && $facet['field type'] == 'taxonomy_term') {
+      $facet['facetapi pretty paths coder'] = 'taxonomy';
+      continue;
     }
   }
 }
diff --git a/plugins/coders/facetapi_pretty_paths_coder_taxonomy.inc b/plugins/coders/facetapi_pretty_paths_coder_taxonomy.inc
index c2a25ca..c2aa454 100644
--- a/plugins/coders/facetapi_pretty_paths_coder_taxonomy.inc
+++ b/plugins/coders/facetapi_pretty_paths_coder_taxonomy.inc
@@ -28,7 +28,8 @@ class FacetApiPrettyPathsCoderTaxonomy extends FacetApiPrettyPathsCoderDefault {
    * @see FacetApiPrettyPathsCoderDefault::decodePathSegmentValue()
    */
   public function decodePathSegmentValue(array $args) {
-    $args['value'] = array_pop(explode('-', $args['value']));
+    $exploded = explode('-', $args['value']);
+    $args['value'] = array_pop($exploded);
     return parent::decodePathSegmentValue($args);
   }
 }
diff --git a/plugins/facetapi/url_processor_pretty_paths.inc b/plugins/facetapi/url_processor_pretty_paths.inc
index dab60a7..3be1c65 100644
--- a/plugins/facetapi/url_processor_pretty_paths.inc
+++ b/plugins/facetapi/url_processor_pretty_paths.inc
@@ -53,13 +53,22 @@ class FacetapiUrlProcessorPrettyPaths extends FacetapiUrlProcessorStandard {
     // Remove /search/url part and prepare args for iteration.
     $menu_item = menu_get_item();
     $query = drupal_encode_path($_GET['q']);
+
     if (strpos($query, $menu_item['path']) === 0) {
-      $query = substr($query, strlen($menu_item['path']));
+      $facet_args = substr($query, strlen($menu_item['path']));
+    }
+    else {
+      // Encode the path for use in a regular expression
+      $regex = preg_quote($menu_item['path'], '/');
+      // Remove possible replacers
+      $regex = str_replace('%', '[^\/]+\/', $regex);
+      // Take whatever is left
+      $facet_args = preg_replace('/' . $regex . '/', '', $query);
     }
-    $args = explode('/', $query);
 
-    $facets = $this->adapter->getEnabledFacets();
+    $args = explode('/', $facet_args);
 
+    $facets = $this->adapter->getEnabledFacets();
     // Traverse all segments "<alias>/<value>" from right to left (array_pop).
     while ($value = array_pop($args)) {
       if (!($alias = array_pop($args))) {
