     switch (sess, self.session) {
       case (.Some(let parameterSession), _): session = parameterSession
       case (_, .Some(let selfSession)): session = selfSession
-      default: throw ClientError.UnableToCheckAuthenticationMethodWithoutSession(method)
+      default: throw SwiftSSH2Error.UnableToProceedWithoutValidSSH2Session("Cannot check authentication method: \(method)")
     }
    
     // We convert to lowercase to compare methods in same casing

    session = SSH2Session(cSession: cSession)
    
    guard let oSession = self.session else {
      throw ClientError.UnableToCreateUnderlyingLibSSH2Session
    }
    
    // Set the session as blocking

    switch (sess, self.session) {
      case (.Some(let parameterSession), _): session = parameterSession
      case (_, .Some(let selfSession)): session = selfSession
      default: throw SwiftSSH2Error.UnableToProceedWithoutValidSSH2Session("Cannot check authentication methods.")
    }
    
    let username: String
    switch (usr, self.username) {
      case (.Some(let parameterUsername), _): username = parameterUsername
      case (_, .Some(let selfUsername)): username = selfUsername
      default: throw SwiftSSH2Error.AuthenticationFailed("Cannot check authentication methods without valid username")
    }
    
    // Reading the authentication methods from the session
    guard let methodsList:String = String(UTF8String: libssh2_userauth_list(session.cSession, username, UInt32(username.characters.count))) else {
      throw SwiftSSH2Error.RetrieveDataOperationError("Failed to get authentication method for host \(self.hostaddr!)")
    }
    
    let methods = methodsList.componentsSeparatedByString(",")
