             soundCloud = /^https?:\/\/(soundcloud.com)\/(.*)\/(sets)\/(.*)$/   
             if url.match(spotify) or url.match(googlePlay) or url.match(youtube) or url.match(soundCloud)
                 user = msg.message.user.name.toLowerCase()
-                try
-                    @storage.nominations.push(user: user, url: msg.match[2])
-                catch
-                    @storage.nominations = []
-                    @storage.nominations.push(user: user, url: msg.match[2])
-                finally
-                    @save
-                    msg.send "Nomination saved"
+                if(@storage.nominationsByUser[user] <= 3)
+                    try
+                        @storage.nominations.push(user: user, url: msg.match[2])
+                        #increment stored nominations of user by 1
+                        @storage.nominationsByUser[user] = @storage.nominationsByUser[user] + 1;
+                    catch
+                        @storage.nominations = []
+                        @storage.nominations.push(user: user, url: msg.match[2])
+                    finally
+                        @save
+                        msg.send "Nomination saved"
+                else
+                    msg.send "Invalid nomination: nominations exceeded. Limit: 3"
             else
                 msg.send "Invalid nomination: invalid url"
         else

    reset: (msg) ->
        @storage.nominations = []
        @storage.history = []
        @save
        msg.send "All AOTW data has been reset"


            @storage = @robot.brain.data.aotw ||= {
                nominations: []
                history: []
                nominationsByUser: {}
            }

            @robot.logger.debug "AOTW data loaded: " + JSON.stringify(@storage)
