diff --git a/bridge/mattermost/mattermost.go b/bridge/mattermost/mattermost.go
index 94b649bb..b9d082e3 100644
--- a/bridge/mattermost/mattermost.go
+++ b/bridge/mattermost/mattermost.go
@@ -101,6 +101,7 @@ func (b *Bmattermost) Send(msg config.Message) error {
 	}
 	if !b.Config.UseAPI {
 		matterMessage := matterhook.OMessage{IconURL: b.Config.IconURL}
+		matterMessage.IconURL = msg.Avatar
 		matterMessage.Channel = channel
 		matterMessage.UserName = nick
 		matterMessage.Type = ""
diff --git a/gateway/gateway.go b/gateway/gateway.go
index 4c2f7463..140bfc4d 100644
--- a/gateway/gateway.go
+++ b/gateway/gateway.go
@@ -190,6 +190,7 @@ func (gw *Gateway) handleMessage(msg config.Message, dest *bridge.Bridge) {
 		}
 		log.Debugf("Sending %#v from %s (%s) to %s (%s)", msg, msg.Account, originchannel, dest.Account, channel.Name)
 		msg.Channel = channel.Name
+		gw.modifyAvatar(&msg, dest)
 		gw.modifyUsername(&msg, dest)
 		// for api we need originchannel as channel
 		if dest.Protocol == "api" {
@@ -229,6 +230,17 @@ func (gw *Gateway) modifyUsername(msg *config.Message, dest *bridge.Bridge) {
 	msg.Username = nick
 }
 
+func (gw *Gateway) modifyAvatar(msg *config.Message, dest *bridge.Bridge) {
+	iconurl := gw.Config.General.IconURL
+	if iconurl == "" {
+		iconurl = dest.Config.IconURL
+	}
+	iconurl = strings.Replace(iconurl, "{NICK}", msg.Username, -1)
+	if msg.Avatar == "" {
+		msg.Avatar = iconurl
+	}
+}
+
 func getChannelID(msg config.Message) string {
 	return msg.Channel + msg.Account
 }