diff --git a/src/minidexed.h b/src/minidexed.h
index b1622d0..1658482 100644
--- a/src/minidexed.h
+++ b/src/minidexed.h
@@ -239,6 +239,7 @@ public:
 	bool DoSavePerformance (void);
 
 	void setMasterVolume (float32_t vol);
+	int GetMasterVolume127() const { return (int)(nMasterVolume >= 1.0f ? 127 : (nMasterVolume <= 0.0f ? 0 : sqrtf(nMasterVolume) * 127.0f)); }
 
 	bool InitNetwork();
 	void UpdateNetwork();
diff --git a/src/uimenu.cpp b/src/uimenu.cpp
index 5bf7285..dabea87 100644
--- a/src/uimenu.cpp
+++ b/src/uimenu.cpp
@@ -29,6 +29,7 @@
 #include <cmath>
 #include <circle/sysconfig.h>
 #include <assert.h>
+#include <cstddef>
 
 using namespace std;
 LOGMODULE ("uimenu");
@@ -63,6 +64,7 @@ const CUIMenu::TMenuItem CUIMenu::s_MainMenu[] =
 #endif
 #endif
 	{"Effects",	MenuHandler,	s_EffectsMenu},
+	{"Master Volume", EditMasterVolume, 0, 0},
 	{"Performance",	MenuHandler, s_PerformanceMenu}, 
 	{0}
 };
@@ -2016,3 +2018,29 @@ void CUIMenu::EditTGParameterModulation (CUIMenu *pUIMenu, TMenuEvent Event)
 				      nValue > rParam.Minimum, nValue < rParam.Maximum);
 				   
 }
+
+void CUIMenu::EditMasterVolume(CUIMenu *pUIMenu, TMenuEvent Event)
+{
+    TParameter rParam = {0, 127, 8, ToVolume};
+    int nValue = pUIMenu->m_pMiniDexed->GetMasterVolume127();
+    switch (Event)
+    {
+    case MenuEventUpdate:
+    case MenuEventUpdateParameter:
+        break;
+    case MenuEventStepDown:
+        nValue -= rParam.Increment;
+        if (nValue < rParam.Minimum) nValue = rParam.Minimum;
+        pUIMenu->m_pMiniDexed->setMasterVolume(nValue / 127.0f);
+        break;
+    case MenuEventStepUp:
+        nValue += rParam.Increment;
+        if (nValue > rParam.Maximum) nValue = rParam.Maximum;
+        pUIMenu->m_pMiniDexed->setMasterVolume(nValue / 127.0f);
+        break;
+    default:
+        return;
+    }
+    std::string valueStr = ToVolume(pUIMenu->m_pMiniDexed->GetMasterVolume127());
+    pUIMenu->m_pUI->DisplayWrite("Master Volume", "", valueStr.c_str(), nValue > rParam.Minimum, nValue < rParam.Maximum);
+}
diff --git a/src/uimenu.h b/src/uimenu.h
index 6ff6571..6c72f36 100644
--- a/src/uimenu.h
+++ b/src/uimenu.h
@@ -96,6 +96,7 @@ private:
 	static void PerformanceMenu (CUIMenu *pUIMenu, TMenuEvent Event);
 	static void SavePerformanceNewFile (CUIMenu *pUIMenu, TMenuEvent Event);
 	static void EditPerformanceBankNumber (CUIMenu *pUIMenu, TMenuEvent Event);
+	static void EditMasterVolume (CUIMenu *pUIMenu, TMenuEvent Event);
 	
 	static std::string GetGlobalValueString (unsigned nParameter, int nValue);
 	static std::string GetTGValueString (unsigned nTGParameter, int nValue);