diff --git a/src/droplets/droplet_manager.cpp b/src/droplets/droplet_manager.cpp
index 2b35be9..b122443 100644
--- a/src/droplets/droplet_manager.cpp
+++ b/src/droplets/droplet_manager.cpp
@@ -15,3 +15,15 @@ void DropletManager::SetSelected(DropletState state) {
 DropletState DropletManager::GetSelected() {
   return selected_drop;
 }
+
+std::string DropletManager::OtherStateName(DropletState state) {
+  switch (state) {
+  case DropletState::kLeft:
+    return "Right";
+  case DropletState::kRight:
+    return "Left";
+  case DropletState::kFull:
+  default:
+    return "";
+  }
+}
diff --git a/src/droplets/droplet_manager.h b/src/droplets/droplet_manager.h
index ff66b9c..6a7d9ff 100644
--- a/src/droplets/droplet_manager.h
+++ b/src/droplets/droplet_manager.h
@@ -35,6 +35,14 @@ public:
    * @return selected droplet
    */
   DropletState GetSelected();
+
+  /*
+   * Returns the name of the other droplet
+   *
+   * @param state droplat state of the current
+   * @return other droplet name
+   */
+  std::string OtherStateName(DropletState state);
 };
 
 #endif // CASCADE_DROPLETS_DROPLET_MANAGER_H_
diff --git a/src/main.cpp b/src/main.cpp
index b70f726..4be77a0 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -24,8 +24,8 @@ void ProcessControls() {
     if (patch.encoder.RisingEdge()) {
       left_menu.SetInMenu(false);
       if(left_menu.GetState() == MenuState::kSplit) {
-	state->ToggleSplit();
-	if (state->GetSplitMode()) {
+	manager->ToggleSplit();
+	if (manager->GetSplitMode()) {
 	  droplet_left->UpdateState(DropletState::kLeft);
 	  droplet_right = GetDroplet(DropletState::kRight);
 	} else {
@@ -34,7 +34,7 @@ void ProcessControls() {
 	}
       } else {
 	delete droplet_left;
-	if(state->GetSplitMode()) {
+	if(manager->GetSplitMode()) {
 	  droplet_left = GetDroplet(DropletState::kLeft);
 	} else {
 	  droplet_left = GetDroplet(DropletState::kFull);
@@ -54,7 +54,7 @@ void ProcessControls() {
 void ProcessOutputs() {
   if(!left_menu.InMenu()) {
     droplet_left->Control();
-    if (state->GetSplitMode()) {
+    if (manager->GetSplitMode()) {
       droplet_right->Control();
     }
   }
@@ -66,7 +66,7 @@ void ProcessOled() {
     left_menu.ProcessMenuOled();
   } else {
     droplet_left->Draw();
-    if (state->GetSplitMode()) {
+    if (manager->GetSplitMode()) {
       droplet_right->Draw();
     }
   }
@@ -77,7 +77,7 @@ static void AudioThrough(float **in,
 			 float **out,
 			 size_t size) {
   droplet_left->Process(in, out, size);
-  if (state->GetSplitMode()) {
+  if (manager->GetSplitMode()) {
     droplet_right->Process(in, out, size);
   }
 }
diff --git a/src/main.h b/src/main.h
index 8e58a21..7b3143b 100644
--- a/src/main.h
+++ b/src/main.h
@@ -16,9 +16,9 @@
 #include "droplets/vco_droplet.h"
 
 DaisyPatch patch;
-DropletManager* state = new DropletManager();
-Menu left_menu(&patch, "Right", state);
-Menu right_menu(&patch, "Left", state);
+DropletManager* manager = new DropletManager();
+Menu left_menu(&patch, DropletState::kLeft, manager);
+Menu right_menu(&patch, DropletState::kRight, manager);
 Droplet* droplet_left;
 Droplet* droplet_right;
 float sample_rate;
diff --git a/src/menu.cpp b/src/menu.cpp
index 642ad91..2384a45 100644
--- a/src/menu.cpp
+++ b/src/menu.cpp
@@ -1,10 +1,10 @@
 #include "menu.h"
 
 Menu::Menu(DaisyPatch* m_patch,
-	   std::string m_name,
-	   DropletManager* m_state) {
+	   DropletState m_state,
+	   DropletManager* m_manager) {
   patch = m_patch;
-  name = m_name;
+  state = m_state;
   state = m_state;
 }
 const std::string MENU_ITEMS[] = {"Split",
@@ -38,10 +38,14 @@ std::string Menu::FilterMenuText(int position) {
   if (position >= MENU_SIZE || position < 0) {
     return "";
   } else {
-    if (ConvertState(position) == MenuState::kSplit && (*state).GetSplitMode()) {
-      return "Merge";
+    if (ConvertState(position) == MenuState::kSplit) {
+      if (!manager->GetSplitMode()) {
+	return "Merge";
+      } else {
+	return "Split";
+      }
     } else if (ConvertState(position) == MenuState::kChange) {
-      return name;
+      return manager->OtherStateName(state);
     }
     return MENU_ITEMS[position];
   }
diff --git a/src/menu.h b/src/menu.h
index b228dd1..7404889 100644
--- a/src/menu.h
+++ b/src/menu.h
@@ -16,9 +16,8 @@ enum class MenuState {kSplit, kChange, kVCO, kNoise};
 class Menu {
  private:
   DaisyPatch* patch;
-  DropletManager* state;
-  DropletState menu_droplet;
-  std::string name;
+  DropletManager* manager;
+  DropletState state;
 
   /*
    * Converts a number to the related menu state.
@@ -35,7 +34,7 @@ class Menu {
    * @param m_name name of the menu
    * @param m_split one or two droplets
    */
-  Menu(DaisyPatch* m_patch, std::string m_name, DropletManager* m_state);
+  Menu(DaisyPatch* m_patch, DropletState m_state, DropletManager* m_manager);
 
   /*
    * Gives if the user is currently in the menu.