diff --git a/lib/fileUpload.coffee b/lib/fileUpload.coffee
index e69606b1430ce7e217ac5ff0d94d3e22ef2996ba..dd526dc7ce49d5eafce9c2e6254a812704ad952c 100644
--- a/lib/fileUpload.coffee
+++ b/lib/fileUpload.coffee
@@ -14,6 +14,7 @@ if FS?
 					"""
 					file:
 						_id: fileObj._id
+				, {upsert: true}
 
 	@Files = new FS.Collection 'Files',
 		stores: [fileStore],
diff --git a/packages/rocketchat-lib/server/sendMessage.coffee b/packages/rocketchat-lib/server/sendMessage.coffee
index bbe7f5a09a8e885639c9e71ab71700481a0996b2..4c48a7214845a1dbd876b3d745be38196bd70409 100644
--- a/packages/rocketchat-lib/server/sendMessage.coffee
+++ b/packages/rocketchat-lib/server/sendMessage.coffee
@@ -1,4 +1,4 @@
-RocketChat.sendMessage = (user, message, room) ->
+RocketChat.sendMessage = (user, message, room, options) ->
 
 	if not user or not message or not room._id
 		return false
@@ -15,7 +15,10 @@ RocketChat.sendMessage = (user, message, room) ->
 
 	message = RocketChat.callbacks.run 'beforeSaveMessage', message
 
-	message._id = ChatMessage.insert message
+	if message._id? and options?.upsert is true
+		ChatMessage.upsert {_id: message._id}, message
+	else
+		message._id = ChatMessage.insert message
 
 	###
 	Defer other updates as their return is not interesting to the user
diff --git a/server/methods/sendMessage.coffee b/server/methods/sendMessage.coffee
index fe3d1064a582ecefbece7b63dc0ddb5536920a64..85d9f878889a660988a03344668429d72394cb44 100644
--- a/server/methods/sendMessage.coffee
+++ b/server/methods/sendMessage.coffee
@@ -1,5 +1,5 @@
 Meteor.methods
-	sendMessage: (message) ->
+	sendMessage: (message, options) ->
 		if message.msg?.length > RocketChat.settings.get('Message_MaxAllowedSize')
 			throw new Meteor.Error 400, '[methods] sendMessage -> Message size exceed Message_MaxAllowedSize'
 
@@ -15,4 +15,4 @@ Meteor.methods
 		if not room
 			return false
 
-		RocketChat.sendMessage user, message, room
+		RocketChat.sendMessage user, message, room, options