Index: src/client/connection.rs
--- src/client/connection.rs.orig
+++ src/client/connection.rs
@@ -438,32 +438,36 @@ impl Connection {
             .map_err(Error::Mpd)?
         };
 
-        // eprintln!("Connected, now authenticating");
+        // Doubles as a litmus test to see if we are authenticated.
+        if let Err(e) = client.subscribe(&self.wake_channel).map_err(Error::Mpd) {
+            let needs_password = matches!(
+                &e,
+                Error::Mpd(MpdError::Server(ServerError {
+                    code: MpdErrorCode::Password | MpdErrorCode::Permission,
+                    ..
+                }))
+            );
+            if !needs_password {
+                return Err(dbg!(e));
+            }
 
-        // If there is a password configured, use it to authenticate.
-        let mut cred_store_fail = false;
-        match password::get_mpd_password().map_err(|_| Error::CredentialStore) {
-            Ok(Some(password)) => {
-                if let Err(e) = client.login(&password).map_err(Error::Mpd) {
+            match password::get_mpd_password().map_err(|_| Error::CredentialStore) {
+                Ok(Some(password)) => {
+                    if let Err(e) = client.login(&password).map_err(Error::Mpd) {
+                        return Err(dbg!(e));
+                    }
+                    if let Err(e) = client.subscribe(&self.wake_channel).map_err(Error::Mpd) {
+                        return Err(dbg!(e));
+                    }
+                    // eprintln!("Successfully authenticated");
+                }
+                Ok(None) => {
                     return Err(dbg!(e));
                 }
-                // eprintln!("Successfully authenticated");
+                Err(e) => {
+                    return Err(dbg!(e));
+                }
             }
-            Ok(None) => {
-                // eprintln!("No password was specified.");
-            }
-            Err(_) => {
-                cred_store_fail = true;
-            }
-        }
-
-        // Doubles as a litmus test to see if we are authenticated.
-        if let Err(e) = client.subscribe(&self.wake_channel).map_err(Error::Mpd) {
-            return Err(dbg!(if cred_store_fail {
-                Error::CredentialStore
-            } else {
-                e
-            }));
         }
         // eprintln!("Subscribed to wake channel");
 
