diff --git a/webui/wisp-multiuser-add.php b/webui/wisp-multiuser-add.php
new file mode 100644
index 0000000000000000000000000000000000000000..5b45a0d84e22500b6da8a016dcb5c3dbacac0b5a
--- /dev/null
+++ b/webui/wisp-multiuser-add.php
@@ -0,0 +1,249 @@
+<?php
+# Policy add
+# Copyright (C) 2008, LinuxRulz
+# 
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+
+include_once("includes/header.php");
+include_once("includes/footer.php");
+include_once("includes/db.php");
+
+
+$db = connect_db();
+
+
+printHeader(array(
+));
+
+
+if (!isset($_POST['frmaction'])) {
+
+?>
+
+	<p class="pageheader">Add WiSP Users</p>
+
+	<!-- Add user input fields -->
+	<form method="post" action="wisp-multiuser-add.php">
+		<div>
+			<input type="hidden" name="frmaction" value="insert" />
+		</div>
+		<table class="entry">
+			<tr>
+				<td class="textcenter" colspan="2">Add multiple users</td>
+			</tr>
+			<tr>
+				<td><div></div><td>
+			</tr>
+			<tr>
+				<td class="entrytitle">Number of users</td>
+				<td><input type="text" name="num_users" /></td>
+			</tr>
+			<tr>
+				<td class="entrytitle">Login Prefix</td>
+				<td><input type="text" name="login_prefix" /></td>
+			</tr>
+			<tr>
+				<td class="entrytitle">Uptime Limit</td>
+				<td><input type="text" name="session_timeout" /></td>
+			</tr>
+			<tr>
+				<td class="entrytitle">Data Limit</td>
+				<td><input type="text" name="data_limit" /></td>
+			</tr>
+			<tr>
+				<td class="entrytitle">Time Limit</td>
+				<td><input type="text" name="time_limit" /></td>
+			</tr>
+			<tr>
+				<td class="textcenter" colspan="2"><input type="submit" value="Submit" /></td>
+			</tr>
+		</table>
+	</form>
+
+<?php
+
+}
+	
+if ($_POST['frmaction'] == "insert") {
+
+?>
+
+	<p class="pageheader">Add WiSP Users</p>
+
+<?php
+
+	# Perform checks on input
+	if (isset($_POST['num_users']) && isset($_POST['session_timeout']) && isset($_POST['data_limit']) && isset($_POST['time_limit'])) {
+		$db->beginTransaction();
+
+		$numberOfUsers = (int)$_POST['num_users'];
+		$sessionTimeout = (int)$_POST['session_timeout'];
+		$dataLimit = (int)$_POST['data_limit'];
+		$timeLimit = (int)$_POST['time_limit'];
+		$loginNamePrefix = $_POST['login_prefix'];
+
+		for ($counter = 0; $counter <= $numberOfUsers; $counter += 1) {
+
+			# Check if user already exists
+			$checkUsernameDuplicates = 0;
+
+			do {
+				# Generate random username
+				$randomString = chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122));
+
+				# If there is no login name prefix
+				if (empty($loginNamePrefix)) {
+					$userName = $randomString;
+
+					$lookForUser = $db->query("SELECT ID FROM ${DB_TABLE_PREFIX}users WHERE Username LIKE '%$userName%'");
+					$lookForUserRow = $lookForUser->fetchObject();
+
+					# If the user was found
+					if ($lookForUserRow) {
+						$checkUsernameDuplicates = 1;
+					} else {
+						$checkUsernameDuplicates = 0;
+					}
+
+				# If there is a login name prefix
+				} else {
+					$userName = $loginNamePrefix."_".$randomString;
+
+					$lookForUser = $db->query("SELECT ID FROM ${DB_TABLE_PREFIX}users WHERE Username LIKE '%$userName%'");
+					$lookForUserRow = $lookForUser->fetchObject();
+
+					# If the user was found
+					if ($lookForUserRow) {
+						$checkUsernameDuplicates = 1;
+					} else {
+						$checkUsernameDuplicates = 0;
+					}
+
+				}
+			} while ($checkUsernameDuplicates > 0);
+
+			#Insert user into users table
+			$userInsert = $db->prepare("INSERT INTO
+													${DB_TABLE_PREFIX}users (Username)
+										VALUES
+													(?)
+										");
+			$userInsertExec = $userInsert->execute(array($userName));
+
+			$failed = 0;
+			# After a user add is successful, continue with inserting the other data
+			if ($userInsertExec) {
+
+				# Get user ID to insert into other tables
+				$getUserID = $db->query("SELECT ID FROM ${DB_TABLE_PREFIX}users WHERE Username = '$userName'");
+				$resultRow = $getUserID->fetchObject();
+				$userID = $resultRow->id;
+
+				# Inset UserID into userdata table
+				$userDataStatement = $db->prepare("	INSERT INTO
+																${DB_TABLE_PREFIX}userdata (UserID)
+													VALUES
+																(?)
+													");
+
+				$userDataResult = $userDataStatement->execute(array($userID));
+
+				# Generate a password
+				$userPassword = chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122)).
+								chr(rand(97,122));
+
+				# Insert password into user_attributes table
+				$userPasswordStatement = $db->prepare("	INSERT INTO
+																	${DB_TABLE_PREFIX}user_attributes (UserID,Name,Operator,Value)
+														VALUES
+																	($userID,'User-Password','==',?)
+														");
+
+				$userPasswordResult = $userPasswordStatement->execute(array($userPassword));
+				
+				# Insert data limit into user_attributes table
+				$userDataStatement = $db->prepare("	INSERT INTO 
+																${DB_TABLE_PREFIX}user_attributes (UserID,Name,Operator,Value) 
+													VALUES 
+																($userID,'SMRadius-Capping-Traffic-Limit',':=',?)
+													");
+
+				$userDataResult = $userDataStatement->execute(array($dataLimit,));
+				
+				# Insert time limit into user_attributes table
+				$userTimeStatement = $db->prepare("	INSERT INTO 
+																${DB_TABLE_PREFIX}user_attributes (UserID,Name,Operator,Value) 
+													VALUES 
+																($userID,'SMRadius-Capping-Time-Limit',':=',?)
+													");
+
+				$userTimeResult = $userTimeStatement->execute(array($timeLimit,));
+
+				# Insert timeout into user_attributes table
+				$userTimeOutStatement = $db->prepare("	INSERT INTO 
+																	${DB_TABLE_PREFIX}user_attributes (UserID,Name,Operator,Value) 
+														VALUES 
+																	($userID,'Session-Timeout','+=',?)
+													");
+
+				$userTimeOutResult = $userTimeOutStatement->execute(array($sessionTimeout,));
+
+			# If one was not successful, rollback
+			} else {
+				$db->rollback;
+				print_r($db->errorInfo());
+				$failed = 1;
+				break;
+			}
+		}
+		if ($failed == 0) {
+			$db->commit();
+
+?>
+
+				<div class="notice">Users added</div>
+
+<?php
+
+		}
+	} else {
+
+?>
+
+		<div class="warning">One or more fields have been left empty</div>
+
+<?php
+
+	}
+}
+
+printFooter();
+
+# vim: ts=4
+?>