diff --git a/tests/auto/integration/qmediaplayerbackend/testdata/nokia-tune.mkv b/tests/auto/integration/qmediaplayerbackend/testdata/nokia-tune.mkv
new file mode 100644
index 0000000000000000000000000000000000000000..c6a13fcfdb1b82a4dd4876aecf94ed2deb27d316
Binary files /dev/null and b/tests/auto/integration/qmediaplayerbackend/testdata/nokia-tune.mkv differ
diff --git a/tests/auto/integration/qmediaplayerbackend/testdata/nokia-tune.mp3 b/tests/auto/integration/qmediaplayerbackend/testdata/nokia-tune.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..674c834057401870ad4412ea28429d106418ad63
Binary files /dev/null and b/tests/auto/integration/qmediaplayerbackend/testdata/nokia-tune.mp3 differ
diff --git a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
index 3dcbed335678c033ba199c87043d49f7bf6e0138..b133900d368c5c1e48f22c60550c5b2d73702ef2 100644
--- a/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
+++ b/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend.cpp
@@ -79,13 +79,18 @@ private slots:
     void volumeAcrossFiles();
     void initialVolume();
     void seekPauseSeek();
+    void subsequentPlayback();
     void probes();
     void playlist();
 
 private:
+    QMediaContent selectVideoFile(const QStringList& mediaCandidates);
+    QMediaContent selectSoundFile(const QStringList& mediaCandidates);
+
     //one second local wav file
     QMediaContent localWavFile;
     QMediaContent localVideoFile;
+    QMediaContent localCompressedSoundFile;
 };
 
 /*
@@ -131,17 +136,8 @@ void tst_QMediaPlayerBackend::init()
 {
 }
 
-void tst_QMediaPlayerBackend::initTestCase()
+QMediaContent tst_QMediaPlayerBackend::selectVideoFile(const QStringList& mediaCandidates)
 {
-    const QString testFileName = QFINDTESTDATA("testdata/test.wav");
-    QFileInfo wavFile(testFileName);
-
-    QVERIFY(wavFile.exists());
-
-    localWavFile = QMediaContent(QUrl::fromLocalFile(wavFile.absoluteFilePath()));
-
-    qRegisterMetaType<QMediaContent>();
-
     // select supported video format
     QMediaPlayer player;
     TestVideoSurface *surface = new TestVideoSurface;
@@ -149,13 +145,10 @@ void tst_QMediaPlayerBackend::initTestCase()
 
     QSignalSpy errorSpy(&player, SIGNAL(error(QMediaPlayer::Error)));
 
-    QStringList mediaCandidates;
-    mediaCandidates << QFINDTESTDATA("testdata/colors.ogv");
-    mediaCandidates << QFINDTESTDATA("testdata/colors.mp4");
-
     foreach (QString s, mediaCandidates) {
         QFileInfo videoFile(s);
-        QVERIFY(videoFile.exists());
+        if (!videoFile.exists())
+            continue;
         QMediaContent media = QMediaContent(QUrl::fromLocalFile(videoFile.absoluteFilePath()));
         player.setMedia(media);
         player.pause();
@@ -165,11 +158,61 @@ void tst_QMediaPlayerBackend::initTestCase()
         }
 
         if (!surface->m_frameList.isEmpty() && errorSpy.isEmpty()) {
-            localVideoFile = media;
-            break;
+            return media;
         }
         errorSpy.clear();
     }
+
+    return QMediaContent();
+}
+
+QMediaContent tst_QMediaPlayerBackend::selectSoundFile(const QStringList& mediaCandidates)
+{
+    QMediaPlayer player;
+
+    QSignalSpy errorSpy(&player, SIGNAL(error(QMediaPlayer::Error)));
+
+    foreach (QString s, mediaCandidates) {
+        QFileInfo soundFile(s);
+        if (!soundFile.exists())
+            continue;
+        QMediaContent media = QMediaContent(QUrl::fromLocalFile(soundFile.absoluteFilePath()));
+        player.setMedia(media);
+        player.play();
+
+        for (int i = 0; i < 2000 && player.mediaStatus() != QMediaPlayer::BufferedMedia && errorSpy.isEmpty(); i+=50) {
+            QTest::qWait(50);
+        }
+
+        if (player.mediaStatus() == QMediaPlayer::BufferedMedia && errorSpy.isEmpty()) {
+            return media;
+        }
+        errorSpy.clear();
+    }
+
+    return QMediaContent();
+}
+
+void tst_QMediaPlayerBackend::initTestCase()
+{
+    const QString testFileName = QFINDTESTDATA("testdata/test.wav");
+    QFileInfo wavFile(testFileName);
+
+    QVERIFY(wavFile.exists());
+
+    localWavFile = QMediaContent(QUrl::fromLocalFile(wavFile.absoluteFilePath()));
+
+    qRegisterMetaType<QMediaContent>();
+
+    QStringList mediaCandidates;
+    mediaCandidates << QFINDTESTDATA("testdata/colors.ogv");
+    mediaCandidates << QFINDTESTDATA("testdata/colors.mp4");
+    localVideoFile = selectVideoFile(mediaCandidates);
+
+    mediaCandidates.clear();
+    mediaCandidates << QFINDTESTDATA("testdata/nokia-tune.mkv");
+    mediaCandidates << QFINDTESTDATA("testdata/nokia-tune.mp3");
+    localCompressedSoundFile = selectSoundFile(mediaCandidates);
 }
 
 void tst_QMediaPlayerBackend::cleanup()
@@ -350,7 +393,7 @@ void tst_QMediaPlayerBackend::processEOS()
     QTRY_VERIFY(player.position() < 100);
 
     QCOMPARE(player.state(), QMediaPlayer::PlayingState);
-    QCOMPARE(player.mediaStatus(), QMediaPlayer::BufferedMedia);
+    QTRY_COMPARE(player.mediaStatus(), QMediaPlayer::BufferedMedia);
 
     QCOMPARE(stateSpy.count(), 1);
     QCOMPARE(stateSpy.last()[0].value<QMediaPlayer::State>(), QMediaPlayer::PlayingState);
@@ -623,6 +666,41 @@ void tst_QMediaPlayerBackend::seekPauseSeek()
     }
 }
 
+void tst_QMediaPlayerBackend::subsequentPlayback()
+{
+    if (localCompressedSoundFile.isNull())
+        QSKIP("Sound format is not supported");
+
+    QMediaPlayer player;
+    player.setMedia(localCompressedSoundFile);
+    player.play();
+
+    QCOMPARE(player.error(), QMediaPlayer::NoError);
+    QTRY_COMPARE(player.state(), QMediaPlayer::PlayingState);
+    QTRY_COMPARE_WITH_TIMEOUT(player.mediaStatus(), QMediaPlayer::EndOfMedia, 15000);
+    QCOMPARE(player.state(), QMediaPlayer::StoppedState);
+    // Could differ by up to 1 compressed frame length
+    QVERIFY(qAbs(player.position() - player.duration()) < 100);
+    QVERIFY(player.position() > 0);
+
+    player.play();
+    QTRY_COMPARE(player.state(), QMediaPlayer::PlayingState);
+    QTRY_VERIFY_WITH_TIMEOUT(player.position() > 2000 && player.position() < 5000, 10000);
+    player.pause();
+    QCOMPARE(player.state(), QMediaPlayer::PausedState);
+    // make sure position does not "jump" closer to the end of the file
+    QVERIFY(player.position() > 2000 && player.position() < 5000);
+    // try to seek back to zero
+    player.setPosition(0);
+    QTRY_COMPARE(player.position(), qint64(0));
+    player.play();
+    QCOMPARE(player.state(), QMediaPlayer::PlayingState);
+    QTRY_VERIFY_WITH_TIMEOUT(player.position() > 2000 && player.position() < 5000, 10000);
+    player.pause();
+    QCOMPARE(player.state(), QMediaPlayer::PausedState);
+    QVERIFY(player.position() > 2000 && player.position() < 5000);
+}
+
 void tst_QMediaPlayerBackend::probes()
 {
     if (localVideoFile.isNull())