var Shout = function() {
	var Loader = require('../loader.js');
	this.shouts = new Loader();
	this.shouts.load('data/shouts.js');
	this.shouts = this.shouts.data;
}

Shout.prototype = {
	handle: function(from, chan, message) {
		var irc = global.irc;
		var self = this;

		if (matches = message.trimRight().match(/^!([\S]*)$/i)) {
			for (shout in self.shouts) {
				if (matches[1] === shout) {
					irc.client.say(chan, self.shouts[shout]);
					break;
				}
			}
		/* Check for a user parameter in the form of !<shout><space><username> */
		}else if (matches = message.trimRight().match(/^!\S* \S*$/i)) {
			var parameters = message.split(" ");
			for (shout in self.shouts) {
				/* Use Substr to remove the prefixed '!' */
				if (parameters[0].substr(1) === shout) {
					irc.client.say(chan, parameters[1] + ": " + self.shouts[shout]);
					break;
				}
			}
		}
	}
};

module.exports = new Shout();
@@ -119,16 +119,18 @@
 houts.js
+on
 ');%0A%09thi
@@ -158,16 +158,39 @@
 s.data;%0A
+%09this.prefixCmd = '@';%0A
 %7D%0A%0AShout
@@ -292,298 +292,493 @@
 is;%0A
-%0A
 %09%09
-if (matches = message.trimRight().match(/%5E!(%5B%5CS%5D*)$/i)) %7B%0A%09%09%09fo
+var userList = global.modules%5B'userlist'%5D;%0A%0A%09%09//match on all text block prefixed by the shout's prefix.%0A%09%09var regShoutMatch = new RegExp(this.prefixCmd + '(%5C%5CS+)','gi');%0A%09%09va
 r 
-(
 shout
- in self.shouts) %7B%0A%09%09%09%09if (matches%5B1%5D === shout) %7B
+Match;%0A%0A%09%09//Execute till the time there is a potential shouts to parse.%0A%09%09while ((shoutMatch= regShoutMatch.exec(message)) !== null)
 %0A%09%09
+%7B%0A
 %09%09%09
-irc.client.say(chan, self.shouts%5Bshout%5D);%0A%09%09%09%09%09break;
+//Check if shouts exists..%0A%09%09%09if (self.shouts%5BshoutMatch%5B1%5D%5D !== undefined)
 %0A%09%09%09
-%09%7D
+%7B
 %0A%09%09%09
-%7D%0A%09%09/* Check for a user parameter in the form of !%3Cshout%3E%3Cspace%3E%3Cusername%3E */%0A%09%09%7Delse if (m
+%09//check if shout is directed to users x.%0A%09%09%09%09var userMatch;%0A%09%09%09%09if (userM
 atch
-es
  = m
@@ -788,296 +788,375 @@
 age.
-trimRight().match(/%5E!%5CS* %5CS*$
+substring(regShoutMatch.lastIndex).match(/%5E%5Cs+(%5B%5CS%5D+)
 /i))
- %7B
 %0A%09%09%09
-var parameters = message.split(%22 %22);%0A%09%09%09for (shout in self.shouts) %7B%0A%09%09%09%09/* Use Substr to remove the prefixed '!' */%0A%09%09%09%09if (parameters%5B0%5D.substr(1) === shout) %7B%0A%09%09%09%09%09irc.client.say(chan, parameters%5B1%5D + %22: %22 + self.shouts%5Bshout%5D);%0A%09%09%09%09%09break;%0A%09%09%09%09%7D
+%09%09//if userlist module is not loaded then send as a targeted shouts anyway...%0A%09%09%09%09%09if (!(userList === undefined %7C%7C userList.userExists(chan, userMatch%5B1%5D)))%0A%09%09%09%09%09%09userMatch = null;%0A%09%09%09%09irc.client.say(chan, userMatch ?%0A%09%09%09%09%09userMatch%5B1%5D + %22: %22 + self.shouts%5BshoutMatch%5B1%5D%5D :%0A%09%09%09%09%09self.shouts%5BshoutMatch%5B1%5D%5D)
 %0A%09%09%09
@@ -1197,8 +1197,9 @@
 Shout();
+%0A

Update shout.js