diff --git a/src/al-util.h b/src/al-util.h
index 9735277..08c126e 100644
--- a/src/al-util.h
+++ b/src/al-util.h
@@ -133,6 +133,11 @@ namespace Source
 		return buffer;
 	}
 
+	inline void clearQueue(Source::ID id)
+	{
+		attachBuffer(id, Buffer::ID(0));
+	}
+
 	inline ALint getInteger(Source::ID id, ALenum prop)
 	{
 		ALint value;
diff --git a/src/alstream.cpp b/src/alstream.cpp
index 8819579..2b68c0b 100644
--- a/src/alstream.cpp
+++ b/src/alstream.cpp
@@ -57,8 +57,7 @@ ALStream::~ALStream()
 {
 	close();
 
-	clearALQueue();
-
+	AL::Source::clearQueue(alSrc);
 	AL::Source::del(alSrc);
 
 	for (int i = 0; i < STREAM_BUFS; ++i)
@@ -228,7 +227,7 @@ void ALStream::stopStream()
 
 void ALStream::startStream(float offset)
 {
-	clearALQueue();
+	AL::Source::clearQueue(alSrc);
 
 	preemptPause = false;
 	streamInited = false;
@@ -292,15 +291,6 @@ void ALStream::checkStopped()
 	state = Stopped;
 }
 
-void ALStream::clearALQueue()
-{
-	/* Unqueue all buffers */
-	ALint queuedBufs = AL::Source::getProcBufferCount(alSrc);
-
-	while (queuedBufs--)
-		AL::Source::unqueueBuffer(alSrc);
-}
-
 /* thread func */
 void ALStream::streamData()
 {
diff --git a/src/alstream.h b/src/alstream.h
index 537733b..a20e350 100644
--- a/src/alstream.h
+++ b/src/alstream.h
@@ -112,7 +112,6 @@ private:
 	void resumeStream();
 
 	void checkStopped();
-	void clearALQueue();
 
 	/* thread func */
 	void streamData();