diff --git a/src/scheme/user.rs b/src/scheme/user.rs
index df1c556079dd5e8dc52581d7291a58db89705357..cb410ca67183dabf5b94065e65280c2579897244 100644
--- a/src/scheme/user.rs
+++ b/src/scheme/user.rs
@@ -317,9 +317,22 @@ impl Scheme for UserScheme {
             let contexts = context::contexts();
             let context_lock = contexts.current().ok_or(Error::new(ESRCH))?;
             let context = context_lock.read();
-            let desc = context.get_file(FileHandle(file))
-                .ok_or(Error::new(EBADF))?
-                .clone();
+            // TODO: Faster, cleaner mechanism to get descriptor
+            let scheme = inner.scheme_id.load(Ordering::SeqCst);
+            let mut desc_res = Err(Error::new(EBADF));
+            for context_file_opt in context.files.lock().iter() {
+                if let Some(context_file) = context_file_opt {
+                    let (context_scheme, context_number) = {
+                        let desc = context_file.description.read();
+                        (desc.scheme, desc.number)
+                    };
+                    if context_scheme == scheme && context_number == file {
+                        desc_res = Ok(context_file.clone());
+                        break;
+                    }
+                }
+            }
+            let desc = desc_res?;
             (context.id, context.euid, context.egid, Arc::downgrade(&context_lock), desc)
         };