diff --git a/subpathauto.module b/subpathauto.module
index f259cd1..8b28615 100644
--- a/subpathauto.module
+++ b/subpathauto.module
@@ -106,31 +106,24 @@ function subpathauto_lookup_subpath($action, $path = '', $original_path, $path_l
 
   $args = arg(NULL, $path);
   $depth = min($max_depth, substr_count($path, '/'));
-  //$depth = min($max_depth, count($args));
-  $path_len = drupal_strlen($path);
-  $slash_pos = $path_len;
+  $base_parts = explode('/', $path);
+  $sub_parts = array();
 
   // Perform a search for each base path with the right-most segment removed.
-  //$base_paths = array();
   for ($i = 1; $i <= $depth; $i++) {
-    //dpm("$path - $slash_pos");
-    $slash_pos = strrpos($path, '/', $path_len - $slash_pos);
-    $base_path = substr($path, 0, $slash_pos);
-    $sub_path  = substr($path, $slash_pos + 1);
-    //dpm("$path - $slash_pos - $base_path - $sub_path");
-    //$base_path = implode('/', array_slice($args, 0, -$i));
-    //$sub_path = implode('/', array_slice($args, -$i));
-    //$base_paths[$base_path] = $sub_path;
+    $sub_parts[] = array_pop($base_parts);
+    $base_path = implode('/', $base_parts);
+
     if ($action == 'alias') {
       $aliased_base_path = drupal_get_path_alias($base_path, $path_language);
       if ($aliased_base_path != $base_path) {
-        return $aliased_base_path . '/' . $sub_path;
+        return $aliased_base_path . '/' . implode('/', $sub_parts);
       }
     }
     elseif ($action == 'source') {
-      $sourced_base_path = drupal_get_normal_path($base_path, $path_language);
-      if ($sourced_base_path != $base_path) {
-        return $sourced_base_path . '/' . $sub_path;
+      $sourced_base_path = drupal_lookup_path($action, $base_path, $path_language);
+      if ($sourced_base_path !== FALSE && $sourced_base_path != $base_path) {
+        return $sourced_base_path . '/' . implode('/', $sub_parts);
       }
     }
   }
diff --git a/subpathauto.test b/subpathauto.test
index 6fbc74a..e697a49 100644
--- a/subpathauto.test
+++ b/subpathauto.test
@@ -105,3 +105,43 @@ class SubPathautoUnitTestCase extends DrupalWebTestCase {
     drupal_clear_path_cache();
   }
 }
+
+class SubPathautoDepthTestCase extends DrupalWebTestCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Sub-pathauto depth tests',
+      'description' => 'Test the depth parameter for Sub-pathauto.',
+      'group' => 'Sub-pathauto',
+    );
+  }
+
+  function setUp() {
+    parent::setUp(array('subpathauto'));
+    $this->adminUser = $this->drupalCreateUser(array('bypass node access'));
+    $this->drupalLogin($this->adminUser);
+  }
+  
+  /**
+   * These tests work because node/1/a/b/c is always a valid path.
+   */
+  function test() {
+    $alias = $this->randomName();
+    $node = $this->drupalCreateNode(array('path' => array('alias' => $alias)));
+    // Test alias worked.
+    $this->drupalGet($alias);
+    $this->assertText($node->title);
+    $this->assertResponse(200);
+    // Test depth = 1.
+    $this->drupalGet($alias . '/a');
+    $this->assertText($node->title);
+    $this->assertResponse(200);
+    // This page shouldn't be found..
+    $this->drupalGet($alias . '/a/b');
+    $this->assertResponse(404);
+    // Change depth to 2, should work now.
+    variable_set('subpathauto_depth', 2);
+    $this->drupalGet($alias . '/a/b');
+    $this->assertText($node->title);
+    $this->assertResponse(200);
+  }
+}
