diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index e58142f26..ab7f2e13e 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -327,24 +327,6 @@ void GUI_App::CallAfter(std::function<void()> cb)
     callback_register.unlock();
 }
 
-wxMenuItem* GUI_App::append_submenu(wxMenu* menu,
-    wxMenu* sub_menu,
-    int id,
-    const wxString& string,
-    const wxString& description,
-    const std::string& icon)
-{
-    if (id == wxID_ANY)
-        id = wxNewId();
-    auto item = new wxMenuItem(menu, id, string, description);
-    if (!icon.empty())
-        item->SetBitmap(wxBitmap(Slic3r::var(icon), wxBITMAP_TYPE_PNG));
-    item->SetSubMenu(sub_menu);
-    menu->Append(item);
-
-    return item;
-}
-
 void GUI_App::window_pos_save(wxTopLevelWindow* window, const std::string &name)
 {
     if (name.empty()) { return; }
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index e1e48e9b9..502ce0ee1 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -107,12 +107,6 @@ public:
 //     void            notify(/*message*/);
     void            update_ui_from_settings();
     void            CallAfter(std::function<void()> cb);
-    wxMenuItem*     append_submenu(wxMenu* menu,
-                                    wxMenu* sub_menu,
-                                    int id,
-                                    const wxString& string,
-                                    const wxString& description,
-                                    const std::string& icon);
 
     void            window_pos_save(wxTopLevelWindow* window, const std::string &name);
     void            window_pos_restore(wxTopLevelWindow* window, const std::string &name);
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 051b05598..5db983623 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1829,6 +1829,21 @@ bool Plater::priv::init_object_menu()
     wxMenuItem* item_decrease = append_menu_item(&object_menu, wxID_ANY, _(L("Decrease copies\t-")), _(L("Remove one copy of the selected object")),
         [this](wxCommandEvent&){ q->decrease(); }, "delete.png");
 
+    object_menu.AppendSeparator();
+    
+    wxMenu* mirror_menu = new wxMenu();
+    if (mirror_menu == nullptr)
+        return false;
+
+    append_menu_item(mirror_menu, wxID_ANY, _(L("Along X axis")), _(L("Mirror the selected object along the X axis")),
+        [this](wxCommandEvent&){ mirror(X); }, "bullet_red.png", &object_menu);
+    append_menu_item(mirror_menu, wxID_ANY, _(L("Along Y axis")), _(L("Mirror the selected object along the Y axis")),
+        [this](wxCommandEvent&){ mirror(Y); }, "bullet_green.png", &object_menu);
+    append_menu_item(mirror_menu, wxID_ANY, _(L("Along Z axis")), _(L("Mirror the selected object along the Z axis")),
+        [this](wxCommandEvent&){ mirror(Z); }, "bullet_blue.png", &object_menu);
+
+    wxMenuItem* item_mirror = append_submenu(&object_menu, mirror_menu, wxID_ANY, _(L("Mirror")), _(L("Mirror the selected object")));
+
 #if ENABLE_EXTENDED_SELECTION
     // ui updates needs to be binded to the parent panel
     if (q != nullptr)
diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp
index 4f7f88602..33e34137d 100644
--- a/src/slic3r/GUI/wxExtensions.cpp
+++ b/src/slic3r/GUI/wxExtensions.cpp
@@ -11,7 +11,7 @@
 #include "GUI_ObjectList.hpp"
 
 wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
-    std::function<void(wxCommandEvent& event)> cb, const std::string& icon)
+    std::function<void(wxCommandEvent& event)> cb, const std::string& icon, wxEvtHandler* event_handler)
 {
     if (id == wxID_ANY)
         id = wxNewId();
@@ -20,7 +20,26 @@ wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const
     if (!icon.empty())
         item->SetBitmap(wxBitmap(Slic3r::var(icon), wxBITMAP_TYPE_PNG));
 
-    menu->Bind(wxEVT_MENU, cb, id);
+    if (event_handler != nullptr)
+        event_handler->Bind(wxEVT_MENU, cb, id);
+    else
+        menu->Bind(wxEVT_MENU, cb, id);
+
+    return item;
+}
+
+wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxString& string, const wxString& description, const std::string& icon)
+{
+    if (id == wxID_ANY)
+        id = wxNewId();
+
+    wxMenuItem* item = new wxMenuItem(menu, id, string, description);
+    if (!icon.empty())
+        item->SetBitmap(wxBitmap(Slic3r::var(icon), wxBITMAP_TYPE_PNG));
+
+    item->SetSubMenu(sub_menu);
+    menu->Append(item);
+
     return item;
 }
 
diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp
index f39c38ab5..6f61ebee1 100644
--- a/src/slic3r/GUI/wxExtensions.hpp
+++ b/src/slic3r/GUI/wxExtensions.hpp
@@ -14,7 +14,9 @@
 #include <set>
 
 wxMenuItem* append_menu_item(wxMenu* menu, int id, const wxString& string, const wxString& description,
-    std::function<void(wxCommandEvent& event)> cb, const std::string& icon = "");
+    std::function<void(wxCommandEvent& event)> cb, const std::string& icon = "", wxEvtHandler* event_handler = nullptr);
+
+wxMenuItem* append_submenu(wxMenu* menu, wxMenu* sub_menu, int id, const wxString& string, const wxString& description, const std::string& icon = "");
 
 class wxCheckListBoxComboPopup : public wxCheckListBox, public wxComboPopup
 {