diff --git a/src/audiomanager.cpp b/src/audiomanager.cpp
index e7b878d4..49977910 100644
--- a/src/audiomanager.cpp
+++ b/src/audiomanager.cpp
@@ -224,6 +224,12 @@ void AudioManager::setEntry(Entry* entry)
         Q_EMIT canGoNextChanged();
         d->m_isSeekable = true;
         Q_EMIT seekableChanged(true);
+        qDebug() << "Duration" << d->m_player.duration()/1000 << d->m_entry->enclosure()->duration();
+        // Finally, check if duration mentioned in enclosure corresponds to real duration
+        if ((d->m_player.duration()/1000) != d->m_entry->enclosure()->duration()) {
+            d->m_entry->enclosure()->setDuration(d->m_player.duration()/1000);
+            qDebug() << "Correcting duration of" << d->m_entry->id() << "to" << d->m_player.duration()/1000;
+        }
     } else {
         DataManager::instance().setLastPlayingEntry(QStringLiteral("none"));
         d->m_entry = nullptr;
diff --git a/src/enclosure.cpp b/src/enclosure.cpp
index 9a0b4595..d3869de5 100644
--- a/src/enclosure.cpp
+++ b/src/enclosure.cpp
@@ -176,10 +176,15 @@ Enclosure::Status Enclosure::status() const
 {
     return m_status;
 }
+
 qint64 Enclosure::playPosition() const{
     return m_playposition;
 }
 
+qint64 Enclosure::duration() const {
+    return m_duration;
+}
+
 void Enclosure::setPlayPosition(const qint64 &position)
 {
     m_playposition = position;
@@ -198,3 +203,18 @@ void Enclosure::setPlayPosition(const qint64 &position)
         m_playposition_dbsave = m_playposition;
     }
 }
+
+void Enclosure::setDuration(const qint64 &duration)
+{
+    m_duration = duration;
+    Q_EMIT durationChanged();
+
+    // also save to database
+    qDebug() << "updating entry duration" << duration << m_entry->title();
+    QSqlQuery query;
+    query.prepare(QStringLiteral("UPDATE Enclosures SET duration=:duration WHERE id=:id AND feed=:feed"));
+    query.bindValue(QStringLiteral(":id"), m_entry->id());
+    query.bindValue(QStringLiteral(":feed"), m_entry->feed()->url());
+    query.bindValue(QStringLiteral(":duration"), m_duration);
+    Database::instance().execute(query);
+}
diff --git a/src/enclosure.h b/src/enclosure.h
index 1a78002d..a8c68c3a 100644
--- a/src/enclosure.h
+++ b/src/enclosure.h
@@ -27,7 +27,7 @@ class Enclosure : public QObject
     Q_PROPERTY(double downloadProgress MEMBER m_downloadProgress NOTIFY downloadProgressChanged)
     Q_PROPERTY(QString path READ path CONSTANT)
     Q_PROPERTY(qint64 playPosition READ playPosition WRITE setPlayPosition NOTIFY playPositionChanged)
-    Q_PROPERTY(qint64 duration MEMBER m_duration CONSTANT)
+    Q_PROPERTY(qint64 duration READ duration WRITE setDuration NOTIFY durationChanged)
 
 public:
     Enclosure(Entry *entry);
@@ -46,13 +46,17 @@ public:
     QString path() const;
     Status status() const;
     qint64 playPosition() const;
+    qint64 duration() const;
+
     void setPlayPosition(const qint64 &position);
+    void setDuration(const qint64 &duration);
 
 Q_SIGNALS:
     void statusChanged();
     void downloadProgressChanged();
     void cancelDownload();
     void playPositionChanged();
+    void durationChanged();
 
 private: