diff --git a/src/libs/core/tnootkaqml.cpp b/src/libs/core/tnootkaqml.cpp
index 7819bbfde54571c171bb66767573f4703febf87c..d366e97cb13c30ee55604d455543ece82672e933 100755
--- a/src/libs/core/tnootkaqml.cpp
+++ b/src/libs/core/tnootkaqml.cpp
@@ -199,7 +199,7 @@ QString TnootkaQML::minorKeyName(int key) {
 
 
 QString TnootkaQML::majAndMinKeyName(int key) {
-  return TkeySignature(static_cast<char>(key)).getMajorName() + QLatin1String("<br>") + TkeySignature(static_cast<char>(key)).getMinorName();
+  return majorKeyName(key) + QLatin1String("<br>") + minorKeyName(key);
 }
 
 
diff --git a/src/main/tmainscoreobject.cpp b/src/main/tmainscoreobject.cpp
index f176e0442b55ed4256abff4e915dfdb9640b0827..33f4392f65501d76a5c4cc9f48637e1587dbcd1f 100644
--- a/src/main/tmainscoreobject.cpp
+++ b/src/main/tmainscoreobject.cpp
@@ -101,6 +101,15 @@ void TmainScoreObject::setScoreObject(TscoreObject* scoreObj) {
   connect(m_scoreObj, &TscoreObject::singleNoteChanged, this, &TmainScoreObject::singleModeSlot);
   connect(GLOB, &Tglobals::showEnharmNotesChanged, this, &TmainScoreObject::checkSingleNoteVisibility);
   connect(GLOB, &Tglobals::enableDoubleAccidsChanged, this, &TmainScoreObject::checkSingleNoteVisibility);
+  connect(m_scoreObj, &TscoreObject::keySignatureChanged, [=]{
+    if (GLOB->keySignatureEnabled() && GLOB->showKeyName() && !GLOB->isExam())
+      emit keyNameTextChanged();
+  });
+}
+
+
+QString TmainScoreObject::keyNameText() const {
+  return m_scoreObj ? NOO->majAndMinKeyName(m_scoreObj->keySignature()) : QString();
 }
 
 
diff --git a/src/main/tmainscoreobject.h b/src/main/tmainscoreobject.h
index 167e10a7234febfde7fa9e8f64132394462f70b1..f8a05d394fc64882ac588c43d13018ddbebfbcaf 100644
--- a/src/main/tmainscoreobject.h
+++ b/src/main/tmainscoreobject.h
@@ -59,6 +59,7 @@ class TmainScoreObject : public QObject
   Q_PROPERTY(Taction* zoomOutAct READ zoomOutAct)
   Q_PROPERTY(Taction* zoomInAct READ zoomInAct)
   Q_PROPERTY(QList<QObject*> scoreActions READ scoreActions NOTIFY scoreActionsChanged)
+  Q_PROPERTY(QString keyNameText READ keyNameText NOTIFY keyNameTextChanged)
 
 public:
   explicit TmainScoreObject(QObject* parent = nullptr);
@@ -82,6 +83,8 @@ public:
 
   QList<QObject*> scoreActions() { return m_scoreActions; }
 
+  QString keyNameText() const;
+
 // redirected from TscoreObject
   void setReadOnly(bool ro);
   void clearScore();
@@ -102,6 +105,7 @@ public:
 
 signals:
   void scoreActionsChanged();
+  void keyNameTextChanged();
   // redirected from TscoreObject
   void clicked();
 
diff --git a/src/qml/MainScore.qml b/src/qml/MainScore.qml
index 3218a2b13b2a6c95d8f4db0b924fcd499546be7c..f7cbcc093b10d71123c8aac01fb8d2cccf4dcce6 100644
--- a/src/qml/MainScore.qml
+++ b/src/qml/MainScore.qml
@@ -88,10 +88,7 @@ Score {
     y: clef === Tclef.PianoStaffClefs ? 3.7 : 6.2
     color: activPal.text
     font { family: "Sans"; pixelSize: 2 }
-    text: getKeyNameText()
-    function getKeyNameText() {
-      return enableKeySign && firstStaff.keySignature ? Noo.majAndMinKeyName(firstStaff.keySignature.key) : ""
-    }
+    text: GLOB.showKeyName && enableKeySign ? mainObj.keyNameText : ""
   }
 
   // private
@@ -108,7 +105,6 @@ Score {
   }
   Connections {
     target: GLOB
-    onKeyNameChanged: keyName.text = Qt.binding(keyName.getKeyNameText)
     onClefTypeChanged: score.clef = GLOB.clefType
   }
   Connections {