diff --git a/bash_completion/msm b/bash_completion/msm
index d71d064..4f22451 100644
--- a/bash_completion/msm
+++ b/bash_completion/msm
@@ -243,9 +243,9 @@ _msm() {
 								else
 									case "${COMP_WORDS[3]}" in
 										remove)
-											if [[ $COMP_CWORD == 4 ]]; then
+											if [[ $COMP_CWORD -ge 4 ]]; then
 												server_property "$sid" OPS_PATH
-												if [ -f "$OPS_PATH" ]; then
+												if [ -f "${SERVER_OPS_PATH[$sid]}" ]; then
 													options="$(cat "${SERVER_OPS_PATH[$sid]}")"
 												fi
 											fi
diff --git a/init/msm b/init/msm
index 5cf7ac5..934fae8 100755
--- a/init/msm
+++ b/init/msm
@@ -2338,14 +2338,31 @@ command_server_blacklist_list() {
 
 # Adds a player name to a server's list of operators
 # $1: The server ID
-# $2: The player name
+# $2->: The player name
 command_server_operator_add() {
-	# TODO: Support multiple player names
 	if server_is_running "$1"; then
-		server_eval "$1" "op $2"
-		echo "The player \"$2\" is now an operator for the server."
+		for player in "${@:2}"; do
+			server_eval "$1" "op $player"
+		done
 	else
-		error_exit SERVER_STOPPED "Server \"${SERVER_NAME[$1]}\" is not running."
+		server_property "$1" OPS_PATH
+
+		for player in "${@:2}"; do
+			if ! grep "^$player\$" "${SERVER_OPS_PATH[$1]}" >/dev/null; then
+				echo "$player" >> "${SERVER_OPS_PATH[$1]}"
+			fi
+		done
+	fi
+
+	if [[ $# -gt 2 ]]; then
+		echo -n "The following players are now operators: "
+		echo -n "$2"
+		for player in "${@:3}"; do
+		 	echo -n ", $player"
+		done
+		echo "."
+	else
+		echo "\"$2\" is now an operator."
 	fi
 }
 
@@ -2355,24 +2372,46 @@ command_server_operator_add() {
 command_server_operator_remove() {
 	# TODO: Support multiple player names
 	if server_is_running "$1"; then
-		server_eval "$1" "deop $2"
-		echo "The player \"$2\" is no longer an operator for the server."
+		for player in "${@:2}"; do
+			server_eval "$1" "deop $player"
+		done
 	else
-		error_exit SERVER_STOPPED "Server \"${SERVER_NAME[$1]}\" is not running."
+		server_property "$1" OPS_PATH
+
+		for player in "${@:2}"; do
+			for player in "${@:2}"; do
+				sed -ri "/^$player\$/d" "${SERVER_OPS_PATH[$1]}"
+			done
+		done
+	fi
+
+	if [[ $# -gt 2 ]]; then
+		echo -n "The following players are no longer operators: "
+		echo -n "$2"
+		for player in "${@:3}"; do
+		 	echo -n ", $player"
+		done
+		echo "."
+	else
+		echo "\"$2\" is no longer an operator."
 	fi
 }
 
 # Displays a list of operators for an individual server
 # $1: The server ID
 command_server_operator_list() {
-	# TODO: Protect against non-existent files
-	local players="$(cat "${SERVER_OPS_PATH[$1]}")"
+	server_property "$1" OPS_PATH
 
-	if [ -z "$players" ]; then
-		echo "No players are operators."
-	else
-		echo "$players"
+	if [ -f "${SERVER_OPS_PATH[$1]}" ]; then
+		local players="$(cat "${SERVER_OPS_PATH[$1]}")"
+
+		if [ ! -z "$players" ]; then
+			echo "$players"
+			return 0
+		fi
 	fi
+
+	echo "No players are operators."
 }
 
 # Sets the game mode for