diff --git a/src/libs/core/score/taddobject.cpp b/src/libs/core/score/taddobject.cpp
index 0c07d99a77dc5c6051b79dc1390bb84d4289dd84..d9bb00d66cc531ffdd43a01bfa4a1202211faea2 100644
--- a/src/libs/core/score/taddobject.cpp
+++ b/src/libs/core/score/taddobject.cpp
@@ -105,11 +105,11 @@ void TaddObject::mouseReleaseEvent(QMouseEvent*) {
     setKeepMouseGrab(false);
   if (m_active) {
     if (m_hovered) { // mouse
-        emit addNote();
+        addNote();
     } else { // touch
         if (m_touchElapsed.elapsed() < 190) {
           if (m_yPos > 0.0)
-            emit addNote();
+            addNote();
         }
         m_hideTimer->stop();
         m_hideTimer->start(2500);
@@ -129,3 +129,10 @@ void TaddObject::mouseMoveEvent(QMouseEvent* event) {
     emit yPosChanged();
   }
 }
+
+
+void TaddObject::addNote() {
+  m_scoreObject->addNote(m_scoreObject->posToNote(m_yPos));
+  if (m_scoreObject->recordMode())
+    m_scoreObject->setSelectedItem(nullptr);
+}
diff --git a/src/libs/core/score/taddobject.h b/src/libs/core/score/taddobject.h
index 575c6e7a9a96298ff1f3877483e7ed38a9628cd3..136cdf177d3561006ef124a686168c40e63756e7 100644
--- a/src/libs/core/score/taddobject.h
+++ b/src/libs/core/score/taddobject.h
@@ -56,7 +56,6 @@ public:
 signals:
   void activeChanged();
   void yPosChanged();
-  void addNote();
 
 protected:
   void hoverEnterEvent(QHoverEvent* event) override;
@@ -67,6 +66,8 @@ protected:
   void mouseReleaseEvent(QMouseEvent*) override;
   void mouseMoveEvent(QMouseEvent* event) override;
 
+  void addNote();
+
 private:
   TscoreObject                        *m_scoreObject = nullptr;
   bool                                 m_active = false;
diff --git a/src/libs/core/score/tscoreobject.cpp b/src/libs/core/score/tscoreobject.cpp
index bc764be371ace1c39252cb6f9cce28694cf31ee7..181587f4d033f7337353da586da637e2cd864a55 100644
--- a/src/libs/core/score/tscoreobject.cpp
+++ b/src/libs/core/score/tscoreobject.cpp
@@ -75,6 +75,7 @@ TscoreObject::TscoreObject(QObject* parent) :
   m_leaveTimer = new QTimer(this);
   m_leaveTimer->setSingleShot(true);
   connect(m_leaveTimer, &QTimer::timeout, this, &TscoreObject::leaveTimeElapsed);
+  m_bgColor = qApp->palette().base().color();
 }
 
 
diff --git a/src/qml/MainScore.qml b/src/qml/MainScore.qml
index f7cbcc093b10d71123c8aac01fb8d2cccf4dcce6..6bd8dcab88f98e3549b7827d1f4dc058a32bb7d6 100644
--- a/src/qml/MainScore.qml
+++ b/src/qml/MainScore.qml
@@ -47,7 +47,6 @@ Score {
 
   TmainScoreObject {
     id: mainObj
-    scoreObject: scoreObj
     deleteLastAct.shortcut: Shortcut { sequence: "Del"; onActivated: deleteLastAct.triggered(); enabled: !GLOB.singleNoteMode && !readOnly }
     clearScoreAct.shortcut: Shortcut { sequence: "Shift+Del"; onActivated: clearScoreAct.triggered(); enabled: !GLOB.singleNoteMode && !readOnly }
     openXmlAct.shortcut: Shortcut { sequence: StandardKey.Open; onActivated: openXmlAct.triggered(); enabled: !GLOB.singleNoteMode && !GLOB.isExam }
@@ -97,6 +96,7 @@ Score {
   Connections {
     target: SOUND
     onInitialized: {
+      mainObj.scoreObject = scoreObj
       singleNote = Qt.binding(function() { return GLOB.singleNoteMode })
       scoreObj.allowAdding = Qt.binding(function() { return !GLOB.singleNoteMode })
       enableKeySign = Qt.binding(function() { return GLOB.keySignatureEnabled })
diff --git a/src/qml/level/MelodyPage.qml b/src/qml/level/MelodyPage.qml
index 15c51f44de1e6f4ca03c732899fcae1ac0fa7c27..384cbc81de5080788f7667eb170c579f6f113e23 100644
--- a/src/qml/level/MelodyPage.qml
+++ b/src/qml/level/MelodyPage.qml
@@ -91,6 +91,7 @@ Tflickable {
       width: parent.width; height: melPage.height - topTile.height - melGrid.height
       meter: Tmeter.NoMeter
       enableKeySign: creator.useKeySign
+      scoreObj.allowAdding: visible
       Connections {
         target: creator
         onUpdateNotesList: updateNotesList()
@@ -106,7 +107,7 @@ Tflickable {
   function updateNotesList() {
     listScore.clearScore()
     listScore.clef = creator.clef
-    listScore.setKeySignature(creator.keyOfRandList)
+    listScore.keySignature = creator.keyOfRandList
     for (var i = 0; i < creator.notesInList(); ++i)
       listScore.addNote(creator.noteFromList(i))
   }
diff --git a/src/qml/score/NoteAdd.qml b/src/qml/score/NoteAdd.qml
index 4234108ecab651cbcf2aca195550c588e64b353d..480ce12f9cc1ab6cf55202a55b2246a780b95925 100644
--- a/src/qml/score/NoteAdd.qml
+++ b/src/qml/score/NoteAdd.qml
@@ -12,9 +12,7 @@ import Score 1.0
 TaddObject {
   id: noteAdd
 
-  property TnoteItem lastNote: null
-  property alias noteText: note.text
-  property alias alterText: cursor.alterText
+  property TnoteItem lastNote: scoreObj.lastNote
 
   readonly property real alterWidth: 0 // dummy, NoteCursor looks for it
 
@@ -34,6 +32,7 @@ TaddObject {
     color: Noo.alpha(activPal.highlight, 200)
     x: (4 - width) / 2
     y: 15
+    text: Noo.rhythmText(scoreObj.workRhythm)
   }
 
   NoteCursor { id: cursor; yPos: noteAdd.yPos; headText: scoreObj.workRtmText }
diff --git a/src/qml/score/NoteCursor.qml b/src/qml/score/NoteCursor.qml
index 4fbc6332461a822b87c4cfb7957fcab7ea61974e..39b21e560e28ef651b079ca50fff26500cd108da 100644
--- a/src/qml/score/NoteCursor.qml
+++ b/src/qml/score/NoteCursor.qml
@@ -13,10 +13,10 @@ Item {
   height: parent ? parent.height : 0
   width: parent ? parent.width - (score.singleNote ? 0 : parent.alterWidth) : 0
 
-  property alias headText: head.text
+  property string headText: parent ? scoreObj.activeRtmText() : ""
   property color color: GLOB.noteCursorColor
-  property real yPos: 0
-  property alias alterText: alter.text
+  property real yPos: scoreObj.activeYpos
+//   property alias alterText: alter.text
 
   visible: yPos > 0
 
@@ -32,7 +32,7 @@ Item {
       id: head
       scale: 1.2
       font { family: "Scorek"; pixelSize: 7 }
-      text: "\uf4be"
+      text: headText //"\uf4be"
       y: yPos - 15
       color: noteCursor.color
       x: score.singleNote ? 1.5 : 0
@@ -42,6 +42,7 @@ Item {
         font { family: "Scorek"; pixelSize: 7 }
         color: noteCursor.color
         x: -width - 0.1
+        text: score.alterText
         Text {
           font { family: "Scorek"; pixelSize: 7 }
           color: activPal.shadow
diff --git a/src/qml/score/Score.qml b/src/qml/score/Score.qml
index d28696baeecd3b0c733a0a75b49a0e8f046fe2ae..8ce34e3074a7318736c75b926534c5817512b1ae 100644
--- a/src/qml/score/Score.qml
+++ b/src/qml/score/Score.qml
@@ -30,10 +30,13 @@ Flickable {
   property alias singleNote: scoreObj.singleNote
   property alias recordMode: scoreObj.recordMode
   property alias bgRect: bgRect
+  property alias alterText: accidControl.text
 
   // private
   property var staves: [ staff0 ]
-  property alias noteAdd: addLoad.item
+  property var noteAdd: null
+  property var delControl: null
+  property var cursor: null
 
   clip: true
   boundsBehavior: Flickable.StopAtBounds
@@ -75,6 +78,26 @@ Flickable {
       accidControl.show = false
       rtmControl.show = false
     }
+    onAllowAddingChanged: {
+      if (allowAdding) {
+        if (!delControl) {
+          var c = Qt.createComponent("qrc:/DelControl.qml")
+          delControl = c.createObject(contentItem)
+          delControl.active = Qt.binding(function() { return !readOnly && scoreObj.activeNote !== null && scoreObj.activeNote === scoreObj.lastNote })
+        }
+        if (!noteAdd) {
+          var c = Qt.createComponent("qrc:/NoteAdd.qml")
+          noteAdd = c.createObject(contentItem)
+        }
+      }
+    }
+    onActiveNoteChanged: {
+      if (!cursor) {
+        var c = Qt.createComponent("qrc:/NoteCursor.qml")
+        cursor = c.createObject(contentItem)
+        cursor.parent = Qt.binding(function() { return scoreObj.activeNote })
+      }
+    }
   }
 
   onCurrentNoteChanged: {
@@ -96,14 +119,6 @@ Flickable {
     meter: Meter { parent: staff0 }
   }
 
-  NoteCursor {
-    id: cursor
-    parent: scoreObj.activeNote
-    yPos: scoreObj.activeYpos
-    alterText: accidControl.text
-    headText: parent ? scoreObj.activeRtmText() : ""
-  }
-
   AccidControl {
     id: accidControl
     active: !readOnly && score.clef !== Tclef.NoClef && (scoreObj.activeNote !== null || (noteAdd && noteAdd.active))
@@ -117,23 +132,6 @@ Flickable {
     visible: !scoreObj.touched
   }
 
-  Loader { sourceComponent: scoreObj.allowAdding ? delControl : null }
-  Component {
-    id: delControl
-    DelControl { active: !readOnly && scoreObj.activeNote !== null && scoreObj.activeNote === scoreObj.lastNote }
-  }
-
-  Loader { id: addLoad; sourceComponent: scoreObj.allowAdding ? addComp : null }
-  Component {
-    id: addComp
-    NoteAdd {
-      noteText: Noo.rhythmText(scoreObj.workRhythm)
-      onAddNote: { score.addNote(scoreObj.posToNote(yPos)); if (recordMode) currentNote = null }
-      alterText: accidControl.text
-      lastNote: scoreObj.lastNote
-    }
-  }
-
   function ensureVisible(yy, hh) {
     if (contentY >= yy)
       contentY = yy