diff --git a/client/mpd/djmpd/djmpd.go b/client/mpd/djmpd/djmpd.go
index c0202e566f2b030a350d46d7aa690af3b8aac9d4..a4512ffc067f9a7b5139370f8f0aef28c05f5385 100644
--- a/client/mpd/djmpd/djmpd.go
+++ b/client/mpd/djmpd/djmpd.go
@@ -17,9 +17,7 @@ func main() {
 	flag.Parse()
 
 	db := djmpd.NewDJRandomDatabase()
-	player := mpd.NewPortAudioPlayer()
-	db.SetupPlayRecorder(player)
-	m := mpd.NewMPD(player, db)
+	m := mpd.NewMPD(db, db.GetPlayRecorder())
 	m.HandleURL("djrandom", db)
 	log.Fatal(m.ListenAndServe(fmt.Sprintf(":%d", *port)))
 }
diff --git a/client/mpd/djrandom.go b/client/mpd/djrandom.go
index e43cded11264346b239374e8f7cb9f10d90589c6..3ba35357752d91ad4945edd5a297564c611207f7 100644
--- a/client/mpd/djrandom.go
+++ b/client/mpd/djrandom.go
@@ -120,11 +120,12 @@ type songReader struct {
 	url       string
 	pos, size int64
 	resp      *http.Response
+	closed    bool
 }
 
 func (r *songReader) Read(buf []byte) (int, error) {
 	var err error
-	for i := 0; i < 2; i++ {
+	for i := 0; !r.closed && i < 3; i++ {
 		if r.pos >= r.size {
 			return 0, io.EOF
 		}
@@ -144,7 +145,6 @@ func (r *songReader) Read(buf []byte) (int, error) {
 			r.pos += int64(n)
 			return n, err
 		}
-		log.Printf("HTTP read error: %v", err)
 		r.resp.Body.Close()
 		r.resp = nil
 	}
@@ -152,6 +152,7 @@ func (r *songReader) Read(buf []byte) (int, error) {
 }
 
 func (r *songReader) Close() error {
+	r.closed = true
 	if r.resp != nil {
 		r.resp.Body.Close()
 	}
@@ -256,9 +257,8 @@ func (d *DJRandomDatabase) GetSong(songURL *url.URL) (mpd.Song, error) {
 	return newDJRandomSong(&resp, d.client), nil
 }
 
-func (d *DJRandomDatabase) SetupPlayRecorder(player mpd.Player) {
-	rec := newPlayRecorder(d.client)
-	player.SetSongPlayedCallback(rec.SongPlayed)
+func (d *DJRandomDatabase) GetPlayRecorder() *PlayRecorder {
+	return newPlayRecorder(d.client)
 }
 
 type PlayRecorder struct {
@@ -277,7 +277,7 @@ func newPlayRecorder(client *util.HttpClient) *PlayRecorder {
 	}
 }
 
-func (r *PlayRecorder) SongPlayed(song mpd.Song) {
+func (r *PlayRecorder) Notify(song mpd.Song) {
 	s, ok := song.(*DJRandomSong)
 	if !ok {
 		return