diff --git a/lib/read_concern.js b/lib/read_concern.js
index <HASH>..<HASH> 100644
--- a/lib/read_concern.js
+++ b/lib/read_concern.js
@@ -29,10 +29,16 @@ class ReadConcern {
     }
 
     if (options.readConcern) {
+      if (options.readConcern instanceof ReadConcern) {
+        return options.readConcern;
+      }
+
       return new ReadConcern(options.readConcern.level);
     }
 
-    return new ReadConcern(options.level);
+    if (options.level) {
+      return new ReadConcern(options.level);
+    }
   }
 
   static get MAJORITY() {
refactor: improve robustness of `ReadConcern.fromOptions`

We made some assumptions in this method about the existence of
keys, as well as that no `readConcern` passed in would ever already
be of the type we were looking to cast to.