diff --git a/videooverlay.cpp b/videooverlay.cpp
index bf6f068bdd1013a336bc8d0d4ab19221649ed93e..545ab2810be72cf635c82a68d731c98be3ad1a88 100644
--- a/videooverlay.cpp
+++ b/videooverlay.cpp
@@ -31,7 +31,8 @@
 
 VideoOverlay::VideoOverlay(QWidget* parent) :
     QWidget(parent),
-    ui(new Ui::VideoOverlay)
+    ui(new Ui::VideoOverlay),
+    oneSecondTimer_(new QTimer(this))
 {
     ui->setupUi(this);
 
@@ -44,6 +45,12 @@ VideoOverlay::VideoOverlay(QWidget* parent) :
     ui->noMicButton->setCheckable(true);
 
     ui->onHoldLabel->setVisible(false);
+
+    connect(LRCInstance::getCurrentCallModel(), &lrc::api::NewCallModel::callStarted,
+        [this](const std::string& tempCallId) { callId = tempCallId; });
+
+    connect(oneSecondTimer_, &QTimer::timeout, this, &VideoOverlay::setTime);
+    oneSecondTimer_->start(1000);
 }
 
 VideoOverlay::~VideoOverlay()
@@ -58,9 +65,35 @@ VideoOverlay::setName(const QString& name)
 }
 
 void
-VideoOverlay::setTime(const QString& time)
+VideoOverlay::setTime()
 {
-    ui->timerLabel->setText(time);
+    if (callId.empty()) { return; }
+
+    auto callInfo = LRCInstance::getCurrentCallModel()->getCall(callId);
+    if(callInfo.status == lrc::api::call::Status::IN_PROGRESS) {
+
+        int numSeconds = std::chrono::duration_cast<std::chrono::seconds>(
+            std::chrono::steady_clock::now() - callInfo.startTime).count();
+
+        QString labelSec;
+        QString labelMin;
+
+        int numMinutes = numSeconds / 60;
+        int remainder = numSeconds - numMinutes * 60;
+        if (remainder < 10) {
+            labelSec = ":0" + QString::number(remainder);
+        } else {
+            labelSec = ":" + QString::number(remainder);
+        }
+
+        if (numMinutes < 10) {
+            labelMin = "0" + QString::number(numMinutes);
+        } else {
+            labelMin = QString::number(numMinutes);
+        }
+
+        ui->timerLabel->setText(labelMin + labelSec);
+    }
 }
 
 void VideoOverlay::toggleContextButtons(bool visible)
diff --git a/videooverlay.h b/videooverlay.h
index 18456ec5dc1051870aeb597ac888aa73b778da99..6eb7825fd64d0638a5448b6b270945129cebf979 100644
--- a/videooverlay.h
+++ b/videooverlay.h
@@ -20,6 +20,7 @@
 
 #include <QWidget>
 #include <QMenu>
+#include <QTimer>
 
 namespace Ui {
 class VideoOverlay;
@@ -35,7 +36,6 @@ public:
 
 public:
     void setName(const QString& name);
-    void setTime(const QString& time);
     inline bool isDialogVisible(){ return dialogVisible_; };
     void toggleContextButtons(bool visible);
     void setVideoMuteVisibility(bool visible);
@@ -43,6 +43,9 @@ public:
     void simulateShowChatview(bool checked);
     bool getShowChatView();
 
+public slots:
+    void setTime();
+
 //UI SLOTS
 private slots:
     void on_hangupButton_clicked();
@@ -56,6 +59,8 @@ private slots:
 private:
     Ui::VideoOverlay* ui;
     bool dialogVisible_ = false;
+    QTimer* oneSecondTimer_;
+    std::string callId;
 
 signals:
     void setChatVisibility(bool visible);
diff --git a/videoview.cpp b/videoview.cpp
index 834f6b39946ecea5af896f1328675af7dcb414e9..dc225d45d9b88a81402682b7668144da53f33c50 100644
--- a/videoview.cpp
+++ b/videoview.cpp
@@ -70,6 +70,7 @@ VideoView::VideoView(QWidget* parent) :
         emit this->setChatVisibility(visible);
     });
     connect(overlay_, &VideoOverlay::videoCfgBtnClicked, [=](){emit videoSettingsClicked();});
+
 }
 
 VideoView::~VideoView()
@@ -187,7 +188,6 @@ VideoView::updateCall()
 {
     if (auto call = CallModel::instance().selectedCall()) {
         overlay_->setName(call->formattedName());
-        overlay_->setTime(call->length());
     }
 }