diff --git a/server.go b/server.go
index 360c52e..7951fa3 100644
--- a/server.go
+++ b/server.go
@@ -268,28 +268,35 @@ func (s *Server) Op(fingerprint string) {
 // Whitelist adds the given fingerprint to the whitelist
 func (s *Server) Whitelist(fingerprint string) error {
 	if strings.HasPrefix(fingerprint, "github.com/") {
-		logger.Infof("Adding github account %s to whitelist", fingerprint)
-
-		keys, err := getGithubPubKeys(fingerprint)
-		if err != nil {
-			return err
-		}
-		if len(keys) == 0 {
-			return fmt.Errorf("No github user %s", fingerprint)
-		}
-		for _, key := range keys {
-			fingerprint = Fingerprint(key)
-			logger.Infof("Adding whitelist: %s", fingerprint)
-			s.Lock()
-			s.whitelist[fingerprint] = struct{}{}
-			s.Unlock()
-		}
+		return s.whitelistIdentityUrl(fingerprint)
 	} else {
-		logger.Infof("Adding whitelist: %s", fingerprint)
-		s.Lock()
-		s.whitelist[fingerprint] = struct{}{}
-		s.Unlock()
+		return s.whitelistFingerprint(fingerprint)
 	}
+}
+
+func (s *Server) whitelistIdentityUrl(user string) error {
+	logger.Infof("Adding github account %s to whitelist", user)
+
+	user = strings.Replace(user, "github.com/", "", -1)
+	keys, err := getGithubPubKeys(user)
+	if err != nil {
+		return err
+	}
+	if len(keys) == 0 {
+		return fmt.Errorf("No keys for github user %s", user)
+	}
+	for _, key := range keys {
+		fingerprint := Fingerprint(key)
+		s.whitelistFingerprint(fingerprint)
+	}
+	return nil
+}
+
+func (s *Server) whitelistFingerprint(fingerprint string) error {
+	logger.Infof("Adding whitelist: %s", fingerprint)
+	s.Lock()
+	s.whitelist[fingerprint] = struct{}{}
+	s.Unlock()
 	return nil
 }
 
@@ -299,8 +306,8 @@ var client = http.Client{
     Timeout: timeout,
 }
 // Returns an array of public keys for the given github user URL
-func getGithubPubKeys(url string) ([]ssh.PublicKey, error) {
-	resp, err := client.Get("http://" + url + ".keys")
+func getGithubPubKeys(user string) ([]ssh.PublicKey, error) {
+	resp, err := client.Get("http://github.com/" + user + ".keys")
 	if err != nil {
 		return nil, err
 	}
@@ -312,6 +319,12 @@ func getGithubPubKeys(url string) ([]ssh.PublicKey, error) {
 	}
 
 	bodyStr := string(body)
+
+	// More informative error than that from base64 DecodeString
+	if bodyStr == "Not Found" {
+		return nil, fmt.Errorf("No github user %s found", user)
+	}
+
 	pubs := []ssh.PublicKey{}
 	for _, key := range strings.SplitN(bodyStr, "\n", -1) {
 		splitKey := strings.SplitN(key, " ", -1)