diff --git a/models/user.go b/models/user.go
index 6484c8cf69..2a4fb557db 100644
--- a/models/user.go
+++ b/models/user.go
@@ -333,15 +333,14 @@ func (u *User) generateRandomAvatar(e Engine) error {
 // which includes app sub-url as prefix. However, it is possible
 // to return full URL if user enables Gravatar-like service.
 func (u *User) RelAvatarLink() string {
-	defaultImgURL := setting.AppSubURL + "/img/avatar_default.png"
 	if u.ID == -1 {
-		return defaultImgURL
+		return base.DefaultAvatarLink()
 	}
 
 	switch {
 	case u.UseCustomAvatar:
 		if !com.IsFile(u.CustomAvatarPath()) {
-			return defaultImgURL
+			return base.DefaultAvatarLink()
 		}
 		return setting.AppSubURL + "/avatars/" + u.Avatar
 	case setting.DisableGravatar, setting.OfflineMode:
diff --git a/modules/base/tool.go b/modules/base/tool.go
index 0f730868eb..1bf1ce3951 100644
--- a/modules/base/tool.go
+++ b/modules/base/tool.go
@@ -192,6 +192,10 @@ func HashEmail(email string) string {
 	return EncodeMD5(strings.ToLower(strings.TrimSpace(email)))
 }
 
+func DefaultAvatarLink() string {
+	return setting.AppSubURL + "/img/avatar_default.png"
+}
+
 // AvatarLink returns relative avatar link to the site domain by given email,
 // which includes app sub-url as prefix. However, it is possible
 // to return full URL if user enables Gravatar-like service.
@@ -200,6 +204,7 @@ func AvatarLink(email string) string {
 		url, err := setting.LibravatarService.FromEmail(email)
 		if err != nil {
 			log.Error(4, "LibravatarService.FromEmail(email=%s): error %v", email, err)
+			return DefaultAvatarLink()
 		}
 		return url
 	}
@@ -208,7 +213,7 @@ func AvatarLink(email string) string {
 		return setting.GravatarSource + HashEmail(email)
 	}
 
-	return setting.AppSubURL + "/img/avatar_default.png"
+	return DefaultAvatarLink()
 }
 
 // Seconds-based time units