diff --git a/src/libs/core/music/tkeysignature.h b/src/libs/core/music/tkeysignature.h
index f699cdad85781bb74e1992bf3a13a094155f5ac5..2f6f01a877a3d56ceae6487dbfde06da596a5ecb 100644
--- a/src/libs/core/music/tkeysignature.h
+++ b/src/libs/core/music/tkeysignature.h
@@ -105,7 +105,7 @@ public:
     bool isMinor() { return m_isMinor; }
     void setMinor(bool isMinor) { m_isMinor = isMinor; }
 
-    char value() { return m_key; }
+    char value() const { return m_key; }
 
         /**
          * Returns base (tonic) note of this key signature, i.e. for a-minor key it is note 'a'.
diff --git a/src/libs/core/score/tscoreobject.cpp b/src/libs/core/score/tscoreobject.cpp
index 59a64a838326cac9dee62147631047d3a420c445..c9e63cf7c99136e0a91e87a727ce988ea22dde3e 100644
--- a/src/libs/core/score/tscoreobject.cpp
+++ b/src/libs/core/score/tscoreobject.cpp
@@ -417,26 +417,8 @@ void TscoreObject::noteClicked(qreal yPos) {
 void TscoreObject::openMusicXml(const QString& musicFile) {
   if (!musicFile.isEmpty()) {
     auto melody = new Tmelody();
-    if (melody->grabFromMusicXml(musicFile)) {
-      clearScorePrivate();
-      m_notes.clear();
-      setMeter(melody->meter()->meter());
-      if (melody->clef() != m_clefType) {
-        setClefType(melody->clef());
-        emit clefTypeChanged();
-      }
-      int newKey = static_cast<int>(melody->key().value());
-      if (newKey != keySignature()) {
-        if (!m_keySignEnabled && qAbs(newKey) != 0)
-          setKeySignatureEnabled(true);
-        setKeySignature(newKey);
-      }
-      for (int n = 0; n < melody->length(); ++n) {
-        addNote(melody->note(n)->p());
-      }
-      adjustScoreWidth();
-      emitLastNote();
-    }
+    if (melody->grabFromMusicXml(musicFile))
+      setMelody(melody);
     delete melody;
   }
 }
@@ -452,14 +434,34 @@ void TscoreObject::saveMusicXml(const QString& musicFile) {
     melody->setMeter(m_meter->meter());
     if (m_keySignEnabled)
       melody->setKey(TkeySignature(static_cast<char>(m_keySignature)));
-    for (int n = 0; n < notesCount(); ++n) {
+    for (int n = 0; n < notesCount(); ++n)
       melody->addNote(Tchunk(m_notes[n]));
-    }
     melody->saveToMusicXml(fileName);
     delete melody;
   }
 }
 
+
+void TscoreObject::setMelody(Tmelody* melody) {
+CHECKTIME (
+  clearScorePrivate();
+  m_notes.clear();
+  setMeter(melody->meter()->meter());
+  setClefType(melody->clef());
+  int newKey = static_cast<int>(melody->key().value());
+  if (newKey != keySignature()) {
+    if (!m_keySignEnabled && qAbs(newKey) != 0)
+      setKeySignatureEnabled(true);
+    setKeySignature(newKey);
+  }
+  for (int n = 0; n < melody->length(); ++n)
+    addNote(melody->note(n)->p());
+  adjustScoreWidth();
+  emitLastNote();
+)
+}
+
+
 //#################################################################################################
 //###################         Score switches           ############################################
 //#################################################################################################
@@ -827,6 +829,14 @@ void TscoreObject::setSelectedItem(TnoteObject* item) {
 }
 
 
+void TscoreObject::setBgColor(const QColor& bg) {
+  if (bg != m_bgColor) {
+    m_bgColor = bg;
+    emit bgColorChanged();
+  }
+}
+
+
 //#################################################################################################
 //###################              PROTECTED           ############################################
 //#################################################################################################
diff --git a/src/libs/core/score/tscoreobject.h b/src/libs/core/score/tscoreobject.h
index cb3839a414a47afc6a15b8e8639a1be2d2f15e0c..ccf9cadd0f7dd0cdebdaa2eabcf346a6f123c382 100644
--- a/src/libs/core/score/tscoreobject.h
+++ b/src/libs/core/score/tscoreobject.h
@@ -51,6 +51,7 @@ class TstaffObject;
 class TmeasureObject;
 class TnoteObject;
 class Tmeter;
+class Tmelody;
 
 
 /**
@@ -83,6 +84,7 @@ class NOOTKACORE_EXPORT  TscoreObject : public QObject
   Q_PROPERTY(qreal width READ width WRITE setWidth)
   Q_PROPERTY(TnoteObject* selectedItem READ selectedItem WRITE setSelectedItem NOTIFY selectedItemChanged)
   Q_PROPERTY(Tnote selectedNote READ selectedNote NOTIFY selectedNoteChanged)
+  Q_PROPERTY(QColor bgColor READ bgColor WRITE setBgColor NOTIFY bgColorChanged)
                         /* Note cursor */
   Q_PROPERTY(TnoteObject* activeNote READ activeNote NOTIFY activeNoteChanged)
   Q_PROPERTY(TnoteObject* lastNote READ lastNote NOTIFY lastNoteChanged)
@@ -152,6 +154,8 @@ public:
   Q_INVOKABLE void openMusicXml(const QString& musicFile);
   Q_INVOKABLE void saveMusicXml(const QString& musicFile);
 
+  void setMelody(Tmelody* melody);
+
   /* ------------------ Score switches ------------------ */
 
   bool keySignatureEnabled() const { return m_keySignEnabled; }
@@ -269,6 +273,9 @@ public:
 
   Tnote selectedNote() const { return noteOfItem(m_selectedItem); }
 
+  QColor bgColor() const { return m_bgColor; }
+  void setBgColor(const QColor& bg);
+
 /* ------------------ Note cursor ------------------ */
   TnoteObject* activeNote() { return m_activeNote; }
   qreal xFirstInActivBar();
@@ -375,6 +382,7 @@ signals:
   void singleNoteChanged();
   void recordModeChanged();
   void scaleFactorChanged();
+  void bgColorChanged();
 
 protected:
       /**
@@ -515,6 +523,7 @@ private:
   QColor                            m_nameColor;
   int                               m_nameStyle;
   TnoteObject                      *m_selectedItem = nullptr;
+  QColor                            m_bgColor;
                               /* Note cursor */
   TnoteObject                      *m_activeNote = nullptr;
   qreal                             m_activeYpos = 0.0;
diff --git a/src/main/texamexecutor.cpp b/src/main/texamexecutor.cpp
index a4f1f424ecf4f978957154874790c57a5cf74a72..86c3e963198d6984025fa13a8aad2c6642e3c958 100755
--- a/src/main/texamexecutor.cpp
+++ b/src/main/texamexecutor.cpp
@@ -43,8 +43,9 @@
 #include <taction.h>
 #include <tnootkaqml.h>
 #include <instruments/tcommoninstrument.h>
-#include <score/tscoreobject.h>
+// #include <score/tscoreobject.h>
 #include "tnameitem.h"
+#include "tmainscoreobject.h"
 
 #include <QtCore/qdatetime.h>
 #include <QtCore/qtimer.h>
@@ -66,8 +67,6 @@
 #endif
 #define SOUND_DURATION (1500) //[ms]
 
-#define SCORE NOO->scoreObj()
-#define SCORE_ITEM NOO->mainScore()
 #define INSTRUMENT NOO->instrument()
 
 
@@ -86,7 +85,7 @@ void debugStyle(TQAunit &qa) {
 QString getExamFileName(Texam* e) {
   QString fName = QDir::toNativeSeparators(GLOB->E->examsDir + QLatin1String("/") + e->userName() + QLatin1String("-") + e->level()->name);
   if (QFileInfo(fName  + QLatin1String(".noo")).exists())
-    fName += QLatin1String("-")+ QDateTime::currentDateTime().toString(QLatin1String("(dd-MMM-hhmmss)"));
+    fName += QLatin1String("-") + QDateTime::currentDateTime().toString(QLatin1String("(dd-MMM-hhmmss)"));
   return fName;
 }
 
@@ -367,7 +366,7 @@ void TexamExecutor::askQuestion(bool isAttempt) {
   if (curQ->questionAsNote()) {
     if (curQ->melody()) {
         if (!isAttempt) {
-  //         SCORE->askQuestion(curQ->melody());
+          MAIN_SCORE->askQuestion(curQ->melody());
           if (m_level.showStrNr) { // we may be sure that instrument is kind of a guitar
             for (int i = 0; i < curQ->melody()->length(); ++i) {
   //             if (curQ->melody()->note(i)->g().str() > 1)
@@ -386,18 +385,16 @@ void TexamExecutor::askQuestion(bool isAttempt) {
         }
     } else {
         char strNr = 0;
-        if ((curQ->answerAsFret() || curQ->answerAsSound())
-            && !m_level.onlyLowPos && m_level.showStrNr)
-                strNr = curQ->qa.pos.str(); // do show string number or not
-  //       if (m_level.useKeySign && !curQ->answerAsNote())
-            // when answer is also asNote we determine key in preparing answer part
-  //           SCORE->askQuestion(curQ->qa.note, curQ->key, strNr);
-  //       else 
-  //           SCORE->askQuestion(curQ->qa.note, strNr);
+        if ((curQ->answerAsFret() || curQ->answerAsSound()) && !m_level.onlyLowPos && m_level.showStrNr)
+          strNr = curQ->qa.pos.str(); // do show string number or not
+        if (m_level.useKeySign && !curQ->answerAsNote())
+          MAIN_SCORE->askQuestion(curQ->qa.note, curQ->key, strNr); // when answer is also asNote we determine key in preparing answer part
+        else
+          MAIN_SCORE->askQuestion(curQ->qa.note, strNr);
         if (curQ->answerAsName())
-            m_answRequire.accid = true;
+          m_answRequire.accid = true;
         else if (curQ->answerAsSound())
-            m_answRequire.accid = false;
+          m_answRequire.accid = false;
     }
   }
 
@@ -1029,7 +1026,7 @@ void TexamExecutor::prepareToExam() {
 
   disableWidgets();
 // connect all events to check an answer or display tip how to check
-  connect(SCORE, &TscoreObject::clicked, this, &TexamExecutor::expertAnswersSlot);
+  connect(MAIN_SCORE, &TmainScoreObject::clicked, this, &TexamExecutor::expertAnswersSlot);
 //   connect(NOTENAME, SIGNAL(noteButtonClicked()), this, SLOT(expertAnswersSlot())); // TODO
   connect(INSTRUMENT, &TcommonInstrument::noteChanged, this, &TexamExecutor::expertAnswersSlot);
   if (m_level.instrument != Tinstrument::NoInstrument)
@@ -1162,7 +1159,7 @@ void TexamExecutor::prepareToExam() {
 
 void TexamExecutor::disableWidgets() {
 //   NOTENAME->setNameDisabled(true);
-  SCORE->setReadOnly(true);
+  MAIN_SCORE->setReadOnly(true);
   INSTRUMENT->setEnabled(false);
   if (NOTENAME)
     NOTENAME->setEnabled(false);
@@ -1170,7 +1167,7 @@ void TexamExecutor::disableWidgets() {
 
 
 void TexamExecutor::clearWidgets() {
-  SCORE->clearScore();
+  MAIN_SCORE->clearScore();
   if (NOTENAME)
     NOTENAME->setNote(Tnote());
 //   INSTRUMENT->clearFingerBoard();
diff --git a/src/main/tmainscoreobject.cpp b/src/main/tmainscoreobject.cpp
index f14146985c1d72b9721962803e8a45c7192e5a15..bf9c4fc8e47e6cd367617e82483e76b3e862990a 100644
--- a/src/main/tmainscoreobject.cpp
+++ b/src/main/tmainscoreobject.cpp
@@ -23,7 +23,11 @@
 #include <qtr.h>
 #include <tnootkaqml.h>
 #include <tsound.h>
+#include <tcolor.h>
+#include <music/tkeysignature.h>
 
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qpalette.h>
 #include <QtCore/qdebug.h>
 
 
@@ -77,6 +81,7 @@ void TmainScoreObject::setScoreObject(TscoreObject* scoreObj) {
     return;
   }
   m_scoreObject = scoreObj;
+  connect(m_scoreObject, &TscoreObject::clicked, this, &TmainScoreObject::clicked);
   connect(m_showNamesAct, &Taction::triggered, [=]{ m_scoreObject->setShowNoteNames(m_showNamesAct->checked()); });
 //   connect(m_extraAccidsAct);
   connect(m_deleteLastAct, &Taction::triggered, [=]{ m_scoreObject->deleteLastNote(); });
@@ -88,6 +93,31 @@ void TmainScoreObject::setScoreObject(TscoreObject* scoreObj) {
   connect(GLOB, &Tglobals::isExamChanged, this, &TmainScoreObject::isExamChangedSlot);
 }
 
+
+void TmainScoreObject::setReadOnly(bool ro) { m_scoreObject->setReadOnly(ro); }
+
+void TmainScoreObject::clearScore() { m_scoreObject->clearScore(); }
+
+
+void TmainScoreObject::askQuestion(Tmelody* mel) {
+  m_scoreObject->setBgColor(Tcolor::merge(Tcolor::alpha(GLOB->EquestionColor, 20), qApp->palette().window().color()));
+  m_scoreObject->setMelody(mel);
+  m_scoreObject->setReadOnly(true);
+}
+
+
+void TmainScoreObject::askQuestion(const Tnote& note, char realStr) {
+  m_scoreObject->setBgColor(Tcolor::merge(Tcolor::alpha(GLOB->EquestionColor, 20), qApp->palette().window().color()));
+  m_scoreObject->setNote(m_scoreObject->note(0), note);
+}
+
+
+void TmainScoreObject::askQuestion(const Tnote& note, const TkeySignature& key, char realStr) {
+  m_scoreObject->setKeySignature(static_cast<int>(key.value()));
+  askQuestion(note, realStr);
+}
+
+
 //#################################################################################################
 //###################              PROTECTED           ############################################
 //#################################################################################################
diff --git a/src/main/tmainscoreobject.h b/src/main/tmainscoreobject.h
index 1e8d5c575ad1285635ffb1b064522de57e123361..a7af0f769dc9cb231c97f274e66d10f20dbe4b63 100644
--- a/src/main/tmainscoreobject.h
+++ b/src/main/tmainscoreobject.h
@@ -25,6 +25,9 @@
 
 class Taction;
 class TscoreObject;
+class Tnote;
+class TkeySignature;
+class Tmelody;
 
 
 #define MAIN_SCORE TmainScoreObject::instance()
@@ -77,8 +80,19 @@ public:
 
   QList<QObject*> scoreActions() { return m_scoreActions; }
 
+// redirected from TscoreObject
+  void setReadOnly(bool ro);
+  void clearScore();
+
+// exam/exercise related
+  void askQuestion(const Tnote& note, char realStr = 0);
+  void askQuestion(const Tnote& note, const TkeySignature& key, char realStr = 0);
+  void askQuestion(Tmelody* mel);
+
 signals:
   void scoreActionsChanged();
+  // redirected from TscoreObject
+  void clicked();
 
 protected:
   void openXmlActSlot();
diff --git a/src/qml/MainScore.qml b/src/qml/MainScore.qml
index 9ecc906626e261fdb004be4f5d6feaee238ceb5a..455850d5c7ac881b9e9fd3e28a916d24114e7e73 100644
--- a/src/qml/MainScore.qml
+++ b/src/qml/MainScore.qml
@@ -41,6 +41,7 @@ Score {
   scoreObj.nameColor: GLOB.nameColor
   scoreObj.nameStyle: GLOB.noteNameStyle
   scoreObj.enableDoubleAccidentals: GLOB.enableDoubleAccids
+  scoreObj.bgColor: Noo.alpha(activPal.base, 230)
 
   TmainScoreObject {
     id: mainObj
diff --git a/src/qml/score/Score.qml b/src/qml/score/Score.qml
index a8cec14a3b9b2cf711c9b7ff27a62fd47f69b518..ca9d705722968791044704c2a23904e03b1db3e5 100644
--- a/src/qml/score/Score.qml
+++ b/src/qml/score/Score.qml
@@ -87,7 +87,7 @@ Flickable {
     parent: score
     z: -1
     width: score.width; height: score.height
-    color: Noo.alpha(activPal.base, 230)
+    color: scoreObj.bgColor
     border { width: recordMode ? 2 : 0; color: "red" }
   }