diff --git a/src/context/context.rs b/src/context/context.rs
index be8ffe7cc209f026f2a9e105e626b9c55bb29843..b594b60d63e39285925545c0f5fdbca6db00c465 100644
--- a/src/context/context.rs
+++ b/src/context/context.rs
@@ -133,25 +133,27 @@ impl Context {
                                    .iter().rposition(|&b| b == b'/' || b == b':')
                                    .map_or(cwd.len(), |i| i + 1)]
                    .to_vec()
-            } else if path.starts_with(b"/") {
-                let mut canon = cwd[..cwd.iter().position(|&b| b == b':').map_or(1, |i| i + 1)].to_vec();
-                canon.extend_from_slice(&path);
-                canon
             } else {
-                let mut canon = cwd.clone();
-                if ! canon.ends_with(b"/") {
-                    canon.push(b'/');
-                }
+                let mut canon = if !path.starts_with(b"/") {
+                    let mut c = cwd.clone();
+                    if ! c.ends_with(b"/") {
+                        c.push(b'/');
+                    }
+                    c
+                } else {
+                    cwd[..cwd.iter().position(|&b| b == b':').map_or(1, |i| i + 1)].to_vec()
+                };
+
                 canon.extend_from_slice(&path);
                 // NOTE: assumes the scheme does not include anything like "../" or "./"
                 let mut result = {
-                    let rparts = canon.split(|&c| c == b'/')
+                    let parts = canon.split(|&c| c == b'/')
                         .filter(|&part| part != b".")
                         .rev()
                         .scan(0, |nskip, part| {
                             if part == b".." {
                                 *nskip += 1;
-                                Some(None) 
+                                Some(None)
                             } else {
                                 if *nskip > 0 {
                                     *nskip -= 1;
@@ -163,7 +165,7 @@ impl Context {
                         })
                         .filter_map(|x| x)
                         .collect::<Vec<_>>();
-                    rparts
+                    parts
                         .iter()
                         .rev()
                         .fold(Vec::new(), |mut vec, &part| {
@@ -173,11 +175,12 @@ impl Context {
                         })
                 };
                 result.pop(); // remove extra '/'
+
+                // replace with the root of the schema if it's empty
                 if result.len() == 0 {
-                    // replace with the root of the schema if it's empty
                     let pos = canon.iter()
-                                   .position(|&b| b == b':')
-                                   .map_or(canon.len(), |p| p + 1);
+                                    .position(|&b| b == b':')
+                                    .map_or(canon.len(), |p| p + 1);
                     canon.truncate(pos);
                     canon
                 } else {