diff --git a/src/audio/AudioManager.cpp b/src/audio/AudioManager.cpp
index c339ea43..c4320b5d 100644
--- a/src/audio/AudioManager.cpp
+++ b/src/audio/AudioManager.cpp
@@ -1402,6 +1402,28 @@ cAudioManager::GenerateIntegerRandomNumberTable()
 		m_anRandomTable[i] = myrand();
 }
 
+void
+cAudioManager::DirectlyEnqueueSample(uint32 sample, uint8 bank, uint32 counter, uint32 priority, uint32 freq, uint8 volume, uint8 framesToPlay, uint32 notStereo)
+{
+	m_sQueueSample.m_nSampleIndex = sample;
+	m_sQueueSample.m_bReflections = FALSE;
+	m_sQueueSample.m_nLoopCount = 0;
+	m_sQueueSample.m_bIs2D = FALSE;
+	m_sQueueSample.m_bStatic = FALSE;
+	m_sQueueSample.m_nPan = 0;
+	m_sQueueSample.m_nBankIndex = bank;
+	m_sQueueSample.m_nCounter = counter;
+	m_sQueueSample.m_nFrequency = freq;
+	m_sQueueSample.m_nVolume = volume;
+	m_sQueueSample.m_nPriority = priority;
+	m_sQueueSample.m_nFramesToPlay = framesToPlay;
+	AudioManager.AddSampleToRequestedQueue();
+	if (!notStereo) {
+		m_sQueueSample.m_nPan = 127;
+		AudioManager.AddSampleToRequestedQueue();
+	}
+}
+
 #ifdef EXTERNAL_3D_SOUND
 void
 cAudioManager::AdjustSamplesVolume()
diff --git a/src/audio/AudioManager.h b/src/audio/AudioManager.h
index d8511bf0..f9472a52 100644
--- a/src/audio/AudioManager.h
+++ b/src/audio/AudioManager.h
@@ -359,6 +359,7 @@ public:
 	void ClearActiveSamples();
 	void GenerateIntegerRandomNumberTable();
 	void LoadBankIfNecessary(uint8 bank);
+	void DirectlyEnqueueSample(uint32 sample, uint8 bank, uint32 counter, uint32 priority, uint32 freq, uint8 volume, uint8 framesToPlay, uint32 notStereo = 0);
 
 #ifdef EXTERNAL_3D_SOUND // actually must have been && AUDIO_MSS as well
 	void AdjustSamplesVolume(); // inlined
diff --git a/src/modelinfo/ModelIndices.h b/src/modelinfo/ModelIndices.h
index 0d6a9b9c..bb256eea 100644
--- a/src/modelinfo/ModelIndices.h
+++ b/src/modelinfo/ModelIndices.h
@@ -1108,8 +1108,8 @@ enum
 	MI_COMET = -972,
 	MI_KAUFMAN = -967,
 	MI_BAGGAGE = -963,
-	MI_VICECHEE = -954,
 	MI_RCBARON = -955,
+	MI_VICECHEE = -954,
 
 	// HACK HACK, hopefully temporary
 	MI_JETMAX = -2000,
diff --git a/src/vehicles/Ferry.cpp b/src/vehicles/Ferry.cpp
index 89a0de9f..339c2819 100644
--- a/src/vehicles/Ferry.cpp
+++ b/src/vehicles/Ferry.cpp
@@ -14,6 +14,7 @@
 #include "TempColModels.h"
 #include "WaterLevel.h"
 #include "World.h"
+#include "sampman.h"
 
 CFerryInst* CFerry::mspInst;
 
@@ -706,7 +707,7 @@ void CFerry::OpenDoor(void)
 	m_bUseFrontDoor = true;
 	if (fDistToCar4 < fDistToCar1)
 		m_bUseFrontDoor = false;
-	// AudioManager.DirectlyEnqueueSample(0xb8,0,0,1,0x5622,0x7f,0x14,0); // TODO
+	AudioManager.DirectlyEnqueueSample(SFX_GATE_START_CLU, SFX_BANK_0, 0, 1, 22050, 127, 20);
 }
 
 void CFerry::CloseDoor(void)
@@ -714,7 +715,7 @@ void CFerry::CloseDoor(void)
 	printf("closing the ferry door\n");
 	m_nDoorState = FERRY_DOOR_CLOSING;
 	m_nDoorTimer = CTimer::GetTimeInMilliseconds() + 10000;
-	// AudioManager.DirectlyEnqueueSample(0xb8, 0, 0, 1, 0x5622, 0x7f, 0x14, 0); // TODO
+	AudioManager.DirectlyEnqueueSample(SFX_GATE_START_CLU, SFX_BANK_0, 0, 1, 22050, 127, 20); // shouldn't this be SFX_GATE_STOP_CLU?
 }
 
 bool CFerry::IsDoorOpen(void)
@@ -798,7 +799,7 @@ void CFerry::PlayArrivedHorn(void)
 	float fDistToCamera = (GetPosition() - TheCamera.GetPosition()).Magnitude();
 	if (fDistToCamera < 200.0f) {
 		uint8 volume = (200.0f - fDistToCamera) / 200.0f * 127;
-		// AudioManager.DirectlyEnqueueSample(0x32, 0, 0, 1, 18000, volume, 0x32, 0); // TODO
+		AudioManager.DirectlyEnqueueSample(SFX_CAR_HORN_TRUCK, SFX_BANK_0, 0, 1, 18000, volume, 50);
 	}
 }