diff --git a/src/mpgame/Game_local.cpp b/src/mpgame/Game_local.cpp
index c370dfc..0042d59 100644
--- a/src/mpgame/Game_local.cpp
+++ b/src/mpgame/Game_local.cpp
@@ -1412,9 +1412,7 @@ void idGameLocal::UpdateRepeaterInfo( bool transmit ) {
 		outMsg.Init( msgBuf, sizeof( msgBuf ) );
 		outMsg.WriteByte( GAME_RELIABLE_MESSAGE_SERVERINFO );
 		outMsg.WriteDeltaDict( gameLocal.repeaterInfo, NULL );
-// jmarshall - engine has no repeater reliable channel
-		//networkSystem->RepeaterSendReliableMessage( -1, outMsg );
-// jmarshall end
+		networkSystem->RepeaterSendReliableMessage( -1, outMsg );
 	}
 }
 
@@ -1832,9 +1830,7 @@ void idGameLocal::MapRestart( int instance ) {
 				outMsg.WriteByte( GAME_RELIABLE_MESSAGE_RESTART );
 				outMsg.WriteBits( 1, 1 );
 				outMsg.WriteDeltaDict( repeaterInfo, NULL );
-// jmarshall - engine has no repeater reliable channel
-				//networkSystem->RepeaterSendReliableMessage( -1, outMsg );
-// jmarshall end
+				networkSystem->RepeaterSendReliableMessage( -1, outMsg );
 			}
 
 			LocalMapRestart( instance );
diff --git a/src/mpgame/Game_local.h b/src/mpgame/Game_local.h
index 8f0aef9..900cb14 100644
--- a/src/mpgame/Game_local.h
+++ b/src/mpgame/Game_local.h
@@ -194,13 +194,11 @@ class idRepeaterReliableMessageSender : public idMessageSender {
 public:
 	virtual channelDestType_t GetChannelType( void ) const { return CHANNEL_DEST_RELIABLE_REPEATER; }
 	virtual void Send( const idBitMsg &msg ) const {
-// jmarshall - engine has no repeater reliable channel
-		//if ( excludeClient != -1 ) {
-		//	networkSystem->RepeaterSendReliableMessageExcluding( excludeClient, msg, inhibitHeader, repeaterClient );
-		//} else {
-		//	networkSystem->RepeaterSendReliableMessage( repeaterClient, msg, inhibitHeader, clientNum );
-		//}
-// jmarshall end
+		if ( excludeClient != -1 ) {
+			networkSystem->RepeaterSendReliableMessageExcluding( excludeClient, msg, inhibitHeader );
+		} else {
+			networkSystem->RepeaterSendReliableMessage( repeaterClient, msg, inhibitHeader, clientNum );
+		}
 	};
 	const idMessageSender &To( int _clientNum, int asClient = -1, bool _inhibitHeader = false ) {
 		repeaterClient = _clientNum;
diff --git a/src/mpgame/Game_network.cpp b/src/mpgame/Game_network.cpp
index b4a4aa8..2e9998f 100644
--- a/src/mpgame/Game_network.cpp
+++ b/src/mpgame/Game_network.cpp
@@ -686,9 +686,7 @@ void idGameLocal::RepeaterWriteInitialReliableMessages( int clientNum ) {
 		outMsg.WriteByte( GAME_RELIABLE_MESSAGE_SPAWN_PLAYER );
 		outMsg.WriteByte( i );
 		outMsg.WriteLong( spawnIds[ i ] );
-// jmarshall - engine has no repeater reliable channel
-		//networkSystem->RepeaterSendReliableMessage( clientNum, outMsg );
-// jmarshall end
+		networkSystem->RepeaterSendReliableMessage( clientNum, outMsg );
 	}
 
 	// update portals for opened doors
@@ -700,9 +698,7 @@ void idGameLocal::RepeaterWriteInitialReliableMessages( int clientNum ) {
 	for ( i = 0; i < numPortals; i++ ) {
 		outMsg.WriteBits( gameRenderWorld->GetPortalState( (qhandle_t) (i+1) ) , NUM_RENDER_PORTAL_BITS );
 	}
-// jmarshall - engine has no repeater reliable channel
-	//networkSystem->RepeaterSendReliableMessage( clientNum, outMsg );
-// jmarshall end
+	networkSystem->RepeaterSendReliableMessage( clientNum, outMsg );
 
 	mpGame.ServerWriteInitialReliableMessages( repeaterReliableSender.To( clientNum ), ENTITYNUM_NONE );
 }
@@ -1393,9 +1389,7 @@ void idGameLocal::RepeaterProcessReliableMessage( int clientNum, const idBitMsg
 				outMsg.WriteString( suffixed_name.c_str() );
 				outMsg.WriteString( mangled_text.c_str() );
 				outMsg.WriteString( "" );
-// jmarshall - engine has no repeater reliable channel
-				//networkSystem->RepeaterSendReliableMessage( -1, outMsg );
-// jmarshall end
+				networkSystem->RepeaterSendReliableMessage( -1, outMsg );
 			}
 			break;
 		}
@@ -2112,16 +2106,14 @@ void idGameLocal::ClientProcessReliableMessage( int clientNum, const idBitMsg &m
 				break;
 		}
 
-// jmarshall - engine has no repeater reliable channel
-		//if ( !inhibitRepeater ) {
-		//	// pass it along to the connected viewers
-		//	if ( excludeClient == -1 ) {
-		//		networkSystem->RepeaterSendReliableMessage( -1, msg, IsServerDemoPlaying(), toClient );
-		//	} else {
-		//		networkSystem->RepeaterSendReliableMessageExcluding( excludeClient, msg, IsServerDemoPlaying() );
-		//	}
-		//}
-// jmarshall end
+		if ( !inhibitRepeater ) {
+			// pass it along to the connected viewers
+			if ( excludeClient == -1 ) {
+				networkSystem->RepeaterSendReliableMessage( -1, msg, IsServerDemoPlaying(), toClient );
+			} else {
+				networkSystem->RepeaterSendReliableMessageExcluding( excludeClient, msg, IsServerDemoPlaying() );
+			}
+		}
 
 		if ( noEffect ) {
 			return;
@@ -3190,9 +3182,7 @@ void idGameLocal::ServerSendInstanceReliableMessageExcluding( const idEntity* ow
 		// but will be ignored on replay unless you are following that particular client
 		networkSystem->ServerSendReliableMessage( MAX_CLIENTS, msg );
 
-// jmarshall - engine has no repeater reliable channel
-		//networkSystem->RepeaterSendReliableMessageExcluding( excludeClient, msg );
-// jmarshall end
+		networkSystem->RepeaterSendReliableMessageExcluding( excludeClient, msg );
 	}
 }
 
@@ -3227,9 +3217,7 @@ void idGameLocal::ServerSendInstanceReliableMessage( const idEntity* owner, int
 		if ( owner->GetInstance() == 0 ) {
 			// see ServerSendInstanceReliableMessageExcluding
 			networkSystem->ServerSendReliableMessage( MAX_CLIENTS, msg );
-// jmarshall - engine has no repeater reliable channel
-			//networkSystem->RepeaterSendReliableMessage( -1, msg );
-// jmarshall end
+			networkSystem->RepeaterSendReliableMessage( -1, msg );
 		}
 	} else {
 		assert( false ); // not used in q4mp
@@ -3246,9 +3234,7 @@ void idGameLocal::ServerSendInstanceReliableMessage( const idEntity* owner, int
 						continue;
 					}
 
-// jmarshall - engine has no repeater reliable channel
-					//networkSystem->RepeaterSendReliableMessage( clientNum, msg, false, i );
-// jmarshall end
+					networkSystem->RepeaterSendReliableMessage( i, msg, false, clientNum );
 				}
 			}
 		}
@@ -3275,9 +3261,7 @@ void idGameLocal::RepeaterAppendUnreliableMessage( int icl, const idBitMsg &msg,
 		}
 		reliable.WriteData( msg.GetData(), msg.GetSize() );
 
-// jmarshall - engine has no repeater reliable channel
-		//networkSystem->RepeaterSendReliableMessage( icl, reliable );
-// jmarshall end
+		networkSystem->RepeaterSendReliableMessage( icl, reliable );
 		return;
 	}
 
@@ -3924,7 +3908,7 @@ void idGameLocal::ReadNetworkInfo( int gameTime, idFile* file, int clientNum ) {
 		}
 
 		// set self spectating state according to userinfo settings
-		if ( !IsRepeaterDemoPlaying() ) {
+		if ( !IsRepeaterDemoPlaying() && clientNum >= 0 && clientNum < MAX_CLIENTS ) {
 			GetLocalPlayer()->Spectate( idStr::Icmp( userInfo[ clientNum ].GetString( "ui_spectate" ), "Spectate" ) == 0 );
 		}
 
