 					loc.temp = ListToArray(loc.key, "(");
 					loc.firstKey = loc.temp[1];
 					loc.secondKey = SpanExcluding(loc.temp[2], ")");
-					if (!StructKeyExists(loc.dates, loc.firstKey))
-						loc.dates[loc.firstKey] = {};
-					loc.dates[loc.firstKey][ReplaceNoCase(loc.secondKey, "$", "")] = loc.returnValue[loc.key];
+					
+					loc.iEnd = ArrayLen(loc.returnValue[loc.key]);
+					for (loc.i = 1; loc.i lte loc.iEnd; loc.i++)
+					{
+						if (!StructKeyExists(loc.dates, loc.firstKey))
+							loc.dates[loc.firstKey] = [];
+						loc.dates[loc.firstKey][loc.i][ReplaceNoCase(loc.secondKey, "$", "")] = loc.returnValue[loc.key][loc.i];
+					}
 				}
 			}
 			for (loc.key in loc.dates)
 			{
-				if (!StructKeyExists(loc.dates[loc.key], "year"))
-					loc.dates[loc.key].year = 1899;
-				if (!StructKeyExists(loc.dates[loc.key], "month"))
-					loc.dates[loc.key].month = 1;
-				if (!StructKeyExists(loc.dates[loc.key], "day"))
-					loc.dates[loc.key].day = 1;
-				if (!StructKeyExists(loc.dates[loc.key], "hour"))
-					loc.dates[loc.key].hour = 0;
-				if (!StructKeyExists(loc.dates[loc.key], "minute"))
-					loc.dates[loc.key].minute = 0;
-				if (!StructKeyExists(loc.dates[loc.key], "second"))
-					loc.dates[loc.key].second = 0;
-				try
-				{
-					loc.returnValue[loc.key] = CreateDateTime(loc.dates[loc.key].year, loc.dates[loc.key].month, loc.dates[loc.key].day, loc.dates[loc.key].hour, loc.dates[loc.key].minute, loc.dates[loc.key].second);
-				}
-				catch(Any e)
-				{
-					loc.returnValue[loc.key] = "";
+				loc.iEnd = ArrayLen(loc.dates[loc.key]);
+				for (loc.i = 1; loc.i lte loc.iEnd; loc.i++)
+				{
+					if (!StructKeyExists(loc.dates[loc.key][loc.i], "year"))
+						loc.dates[loc.key][loc.i].year = 1899;
+					if (!StructKeyExists(loc.dates[loc.key][loc.i], "month"))
+						loc.dates[loc.key][loc.i].month = 1;
+					if (!StructKeyExists(loc.dates[loc.key][loc.i], "day"))
+						loc.dates[loc.key][loc.i].day = 1;
+					if (!StructKeyExists(loc.dates[loc.key][loc.i], "hour"))
+						loc.dates[loc.key][loc.i].hour = 0;
+					if (!StructKeyExists(loc.dates[loc.key][loc.i], "minute"))
+						loc.dates[loc.key][loc.i].minute = 0;
+					if (!StructKeyExists(loc.dates[loc.key][loc.i], "second"))
+						loc.dates[loc.key][loc.i].second = 0;
+					if (!StructKeyExists(loc.returnValue, loc.key) || !IsArray(loc.returnValue[loc.key]))
+						loc.returnValue[loc.key] = [];
+					try
+					{
+						loc.returnValue[loc.key][loc.i] = CreateDateTime(loc.dates[loc.key][loc.i].year, loc.dates[loc.key][loc.i].month, loc.dates[loc.key][loc.i].day, loc.dates[loc.key][loc.i].hour, loc.dates[loc.key][loc.i].minute, loc.dates[loc.key][loc.i].second);
+					}
+					catch(Any e)
+					{
+						loc.returnValue[loc.key][loc.i] = "";
+					}
 				}
 				if (StructKeyExists(loc.returnValue, "#loc.key#($year)"))
 					StructDelete(loc.returnValue, "#loc.key#($year)");

	<cfscript>
		var loc = {};

		// combine the form and url scopes into one scope.
		// url variables take precedence.
		loc.returnValue = Duplicate(arguments.formScope);
		StructDelete(loc.returnValue, "fieldnames", false);
		StructAppend(loc.returnValue, arguments.urlScope, true);

		// go through the matching route pattern and add URL variables from the route to the struct
		loc.iEnd = ListLen(arguments.foundRoute.pattern, "/");
		for (loc.i=1; loc.i <= loc.iEnd; loc.i++)
		{
			loc.item = ListGetAt(arguments.foundRoute.pattern, loc.i, "/");
			if (Left(loc.item, 1) == "[")
				loc.returnValue[ReplaceList(loc.item, "[,]", ",")] = ListGetAt(arguments.route, loc.i, "/");
		}

		// add controller and action unless they already exist
		if (!StructKeyExists(loc.returnValue, "controller"))
			loc.returnValue.controller = arguments.foundRoute.controller;
		if (!StructKeyExists(loc.returnValue, "action"))
			loc.returnValue.action = arguments.foundRoute.action;

		// convert controller to upperCamelCase and action to normal camelCase
		loc.returnValue.controller = REReplace(loc.returnValue.controller, "-([a-z])", "\u\1", "all");
		loc.returnValue.action = REReplace(loc.returnValue.action, "-([a-z])", "\u\1", "all");

		// add name of route to params if a named route is running
		if (StructKeyExists(arguments.foundRoute, "name") && Len(arguments.foundRoute.name) && !StructKeyExists(loc.returnValue, "route"))
			loc.returnValue.route = arguments.foundRoute.name;

		// decrypt all values except controller and action
		if (application.wheels.obfuscateUrls)
		{

		// run verifications and before filters if they exist on the controller
		$runVerifications(controller=loc.controller, actionName=loc.params.action, params=loc.params);
		$runFilters(controller=loc.controller, type="before", actionName=loc.params.action);
		
		// check to see if the controller params has changed and if so, instantiate the new controller and re-run filters and verifications
		if (loc.params.controller != loc.controller.controllerName()) {
			loc.controller = $controller(loc.params.controller).$createControllerObject(loc.params);
			$runVerifications(controller=loc.controller, actionName=loc.params.action, params=loc.params);
			$runFilters(controller=loc.controller, type="before", actionName=loc.params.action);
		}
		
		if (application.wheels.showDebugInformation)
			$debugPoint("beforeFilters,action");
