diff --git a/lib/sdam/topology.js b/lib/sdam/topology.js
index <HASH>..<HASH> 100644
--- a/lib/sdam/topology.js
+++ b/lib/sdam/topology.js
@@ -291,7 +291,16 @@ class Topology extends EventEmitter {
    * @return {Server} An instance of a `Server` meeting the criteria of the predicate provided
    */
   selectServer(selector, options, callback) {
-    if (typeof options === 'function') (callback = options), (options = {});
+    if (typeof options === 'function') {
+      callback = options;
+      if (typeof selector !== 'function') {
+        options = selector;
+        selector = readPreferenceServerSelector(options.readPreference);
+      } else {
+        options = {};
+      }
+    }
+
     options = Object.assign(
       {},
       { serverSelectionTimeoutMS: this.s.serverSelectionTimeoutMS },
fix(topology): correctly pick up command options for cursors

The cursor code also uses `selectServers` but passes its options
in as the first parameter, rather than a server selector.