diff --git a/opentrafficshaper/plugins/webserver/pages/configmanager.pm b/opentrafficshaper/plugins/webserver/pages/configmanager.pm
index b180a9f5318fae27d270c50fbc8b7797c664f12f..08be843be8758ccf296b519ee03680b807479839 100644
--- a/opentrafficshaper/plugins/webserver/pages/configmanager.pm
+++ b/opentrafficshaper/plugins/webserver/pages/configmanager.pm
@@ -211,7 +211,7 @@ sub override_addedit
 		# We need a ID first of all...
 		if (defined($queryParams->{'oid'})) {
 			# Check if we get some data back when pulling the override from the backend
-			if (defined($formData = getOverride($queryParams->{'oid'}))) {
+			if (defined($formData = getOverride($queryParams->{'oid'}->{'value'}))) {
 				# Setup our checkboxes
 				foreach my $checkbox (@formElementCheckboxes) {
 					if (defined($formData->{$checkbox})) {
@@ -223,7 +223,7 @@ sub override_addedit
 				# XXX - TODO
 			# If we didn't get any data, then something went wrong
 			} else {
-				my $encodedID = encode_entities($queryParams->{'oid'});
+				my $encodedID = encode_entities($queryParams->{'oid'}->{'value'});
 				push(@errors,"Override data could not be loaded using oid '$encodedID'");
 			}
 			# Lastly if we were given a oid, this is actually an edit
@@ -600,10 +600,10 @@ EOF
 	}
 
 	# Grab the override
-	my $override = getOverride($queryParams->{'oid'});
+	my $override = getOverride($queryParams->{'oid'}->{'value'});
 
 	# Make the oid safe for HTML
-	my $encodedID = encode_entities($queryParams->{'oid'});
+	my $encodedID = encode_entities($queryParams->{'oid'}->{'value'});
 
 	# Make sure the oid was valid... we would have an override now if it was
 	if (!defined($override)) {
diff --git a/opentrafficshaper/plugins/webserver/pages/limits.pm b/opentrafficshaper/plugins/webserver/pages/limits.pm
index 9aafe256e5c770d84d0d8b09384521187bac33b3..b89f14febadf5a6717ed3918d375d40540b84e28 100644
--- a/opentrafficshaper/plugins/webserver/pages/limits.pm
+++ b/opentrafficshaper/plugins/webserver/pages/limits.pm
@@ -110,7 +110,7 @@ EOF
 
 		# Conditionals
 		if (defined($queryParams->{'source'})) {
-			if ($limit->{'Source'} ne $queryParams->{'source'}) {
+			if ($limit->{'Source'} ne $queryParams->{'source'}->{'value'}) {
 				next;
 			}
 		}
@@ -323,7 +323,7 @@ sub limit_addedit
 		# We need a key first of all...
 		if (defined($queryParams->{'lid'})) {
 			# Check if we get some data back when pulling the limit from the backend
-			if (defined($formData = getLimit($queryParams->{'lid'}))) {
+			if (defined($formData = getLimit($queryParams->{'lid'}->{'value'}))) {
 				# We need to make sure we're only editing our own limits
 				if ($formData->{'Source'} ne "plugin.webserver.limits") {
 					return (HTTP_TEMPORARY_REDIRECT,'limits');
@@ -333,7 +333,7 @@ sub limit_addedit
 # XXX - TODO
 			# If we didn't get any data, then something went wrong
 			} else {
-				my $encodedID = encode_entities($queryParams->{'lid'});
+				my $encodedID = encode_entities($queryParams->{'lid'}->{'value'});
 				push(@errors,"Limit data could not be loaded using limit ID '$encodedID'");
 			}
 			# Lastly if we were given a key, this is actually an edit
@@ -702,10 +702,10 @@ EOF
 	}
 
 	# Grab the limit
-	my $limit = getLimit($queryParams->{'lid'});
+	my $limit = getLimit($queryParams->{'lid'}->{'value'});
 
 	# Make the key safe for HTML
-	my $encodedLID = encode_entities($queryParams->{'lid'});
+	my $encodedLID = encode_entities($queryParams->{'lid'}->{'value'});
 
 	# Make sure the limit ID is valid... we would have a limit now if it was
 	if (!defined($limit)) {
diff --git a/opentrafficshaper/plugins/webserver/pages/statistics.pm b/opentrafficshaper/plugins/webserver/pages/statistics.pm
index d3dd93078d73bc4fa7820b7951198a3be736cb33..b5018dc61e7420c3560d667c6e665522fc49b933 100644
--- a/opentrafficshaper/plugins/webserver/pages/statistics.pm
+++ b/opentrafficshaper/plugins/webserver/pages/statistics.pm
@@ -74,7 +74,7 @@ EOF
 			goto END;
 		}
 		# Check if we get some data back when pulling the limit from the backend
-		if (!defined($limit = getLimit($queryParams->{'lid'}))) {
+		if (!defined($limit = getLimit($queryParams->{'lid'}->{'value'}))) {
 			$content .=<<EOF;
 				<tr class="info">
 					<td colspan="8"><p class="text-center">No Results</p></td>
@@ -144,12 +144,12 @@ sub databylimit
 	}
 
 	my $limit;
-	if (!defined($limit = getLimit($queryParams->{'lid'}))) {
+	if (!defined($limit = getLimit($queryParams->{'lid'}->{'value'}))) {
 		return (HTTP_OK,{ 'error' => 'Invalid limit' },{ 'type' => 'json' });
 	}
 
 	# Pull in stats data
-	my $statsData = opentrafficshaper::plugins::statistics::getStatsByLID($queryParams->{'lid'});
+	my $statsData = opentrafficshaper::plugins::statistics::getStatsByLID($queryParams->{'lid'}->{'value'});
 
 	# First stage refinement
 	my $rawData;
diff --git a/opentrafficshaper/utils.pm b/opentrafficshaper/utils.pm
index efdbc0c22c7913555527caa94eba94b9bfa67cf8..88589fd758664827ee6786630a5364b26649e723 100644
--- a/opentrafficshaper/utils.pm
+++ b/opentrafficshaper/utils.pm
@@ -79,17 +79,23 @@ sub parseFormContent
 	return \%res;
 }
 
+
 # Parse query data
 sub parseURIQuery
 {
 	my $request = shift;
 	my %res;
 
-	use URI::QueryParam;
 
-	# Pull in URL params
-	foreach my $key ($request->uri->query_param) {
-		$res{$key} = $request->uri->query_param($key);
+	# Grab URI components
+	my @components = $request->uri->query_form;
+	# Loop with the components in sets of name & value
+	while (@components) {
+		my ($name,$value) = (shift(@components),shift(@components));
+
+		# Store values and the last value we go
+		push(@{$res{$name}->{'values'}},$value);
+		$res{$name}->{'value'} = $value;
 	}
 
 	return \%res;