diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp
index 7be74e717e..2fdd778339 100644
--- a/interface/src/Application.cpp
+++ b/interface/src/Application.cpp
@@ -5062,9 +5062,23 @@ const DisplayPlugin* Application::getActiveDisplayPlugin() const {
 static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool active = false) {
     auto menu = Menu::getInstance();
     QString name = displayPlugin->getName();
-    QString grouping = displayPlugin->getGrouping();
+    auto grouping = displayPlugin->getGrouping();
+    QString groupingMenu { "" };
     Q_ASSERT(!menu->menuItemExists(MenuOption::OutputMenu, name));
 
+    // assign the meny grouping based on plugin grouping
+    switch (grouping) {
+        case Plugin::ADVANCED:
+            groupingMenu = "Advanced";
+            break;
+        case Plugin::DEVELOPER:
+            groupingMenu = "Developer";
+            break;
+        default:
+            groupingMenu = "Standard"; 
+            break;
+    }
+
     static QActionGroup* displayPluginGroup = nullptr;
     if (!displayPluginGroup) {
         displayPluginGroup = new QActionGroup(menu);
@@ -5074,7 +5088,8 @@ static void addDisplayPluginToMenu(DisplayPluginPointer displayPlugin, bool acti
     auto action = menu->addActionToQMenuAndActionHash(parent,
         name, 0, qApp,
         SLOT(updateDisplayMode()),
-        QAction::NoRole, UNSPECIFIED_POSITION, grouping);
+        QAction::NoRole, UNSPECIFIED_POSITION, groupingMenu);
+
     action->setCheckable(true);
     action->setChecked(active);
     displayPluginGroup->addAction(action);
@@ -5094,13 +5109,17 @@ void Application::updateDisplayMode() {
         DisplayPluginList advanced;
         DisplayPluginList developer;
         foreach(auto displayPlugin, displayPlugins) {
-            QString grouping = displayPlugin->getGrouping();
-            if (grouping == "Advanced") {
-                advanced.push_back(displayPlugin);
-            } else if (grouping == "Developer") {
-                developer.push_back(displayPlugin);
-            } else {
-                standard.push_back(displayPlugin);
+            auto grouping = displayPlugin->getGrouping();
+            switch (grouping) {
+                case Plugin::ADVANCED:
+                    advanced.push_back(displayPlugin);
+                    break;
+                case Plugin::DEVELOPER:
+                    developer.push_back(displayPlugin);
+                    break;
+                default:
+                    standard.push_back(displayPlugin);
+                    break;
             }
         }
 
diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp
index 11bed0e0af..fb6e9c3b65 100644
--- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp
+++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp
@@ -16,7 +16,6 @@
 #include <plugins/PluginContainer.h>
 
 const QString Basic2DWindowOpenGLDisplayPlugin::NAME("Desktop");
-const QString Basic2DWindowOpenGLDisplayPlugin::GROUPING("Standard");
 
 static const QString FULLSCREEN = "Fullscreen";
 
diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h
index 29e26c1f28..6523b58914 100644
--- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h
+++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h
@@ -19,7 +19,6 @@ class Basic2DWindowOpenGLDisplayPlugin : public WindowOpenGLDisplayPlugin {
 
 public:
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
 
     virtual float getTargetFrameRate() override { return  _framerateTarget ? (float) _framerateTarget : TARGET_FRAMERATE_Basic2DWindowOpenGL; }
 
@@ -38,7 +37,6 @@ protected:
 private:
     void updateFramerate();
     static const QString NAME;
-    static const QString GROUPING;
     QScreen* getFullscreenTarget();
     std::vector<QAction*> _framerateActions;
     QAction* _vsyncAction { nullptr };
diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp
index 54cf13fccd..f780534bc9 100644
--- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp
+++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.cpp
@@ -13,7 +13,6 @@
 #include <plugins/PluginContainer.h>
 
 const QString NullDisplayPlugin::NAME("NullDisplayPlugin");
-const QString NullDisplayPlugin::GROUPING("Developer");
 
 const QString & NullDisplayPlugin::getName() const {
     return NAME;
diff --git a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h
index d574324472..d576dbad51 100644
--- a/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h
+++ b/libraries/display-plugins/src/display-plugins/NullDisplayPlugin.h
@@ -14,6 +14,7 @@ public:
 
     virtual ~NullDisplayPlugin() final {}
     virtual const QString & getName() const override;
+    virtual grouping getGrouping() const override { return DEVELOPER; }
 
     void stop() override;
 
diff --git a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp
index 7aacebbcea..40c6e6306b 100644
--- a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp
+++ b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.cpp
@@ -45,7 +45,6 @@ void main() {
 )FS";
 
 const QString InterleavedStereoDisplayPlugin::NAME("3D TV - Interleaved");
-const QString InterleavedStereoDisplayPlugin::GROUPING("Advanced");
 
 InterleavedStereoDisplayPlugin::InterleavedStereoDisplayPlugin() {
 }
diff --git a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h
index 33b6397788..df2a9f4800 100644
--- a/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h
+++ b/libraries/display-plugins/src/display-plugins/stereo/InterleavedStereoDisplayPlugin.h
@@ -15,7 +15,7 @@ public:
     InterleavedStereoDisplayPlugin();
 
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
+    virtual grouping getGrouping() const override { return ADVANCED; }
 
     // initialize OpenGL context settings needed by the plugin
     virtual void customizeContext() override;
@@ -25,5 +25,4 @@ public:
 
 private:
     static const QString NAME;
-    static const QString GROUPING;
 };
diff --git a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp
index d542838d2f..e8a83d2b08 100644
--- a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp
+++ b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.cpp
@@ -10,7 +10,6 @@
 #include <GLMHelpers.h>
 
 const QString SideBySideStereoDisplayPlugin::NAME("3D TV - Side by Side Stereo");
-const QString SideBySideStereoDisplayPlugin::GROUPING("Advanced");
 
 SideBySideStereoDisplayPlugin::SideBySideStereoDisplayPlugin() {
 }
diff --git a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h
index daca9cd474..70f69ba4cb 100644
--- a/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h
+++ b/libraries/display-plugins/src/display-plugins/stereo/SideBySideStereoDisplayPlugin.h
@@ -16,9 +16,8 @@ class SideBySideStereoDisplayPlugin : public StereoDisplayPlugin {
 public:
     SideBySideStereoDisplayPlugin();
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
+    virtual grouping getGrouping() const override { return ADVANCED; }
     virtual glm::uvec2 getRecommendedRenderSize() const override;
 private:
     static const QString NAME;
-    static const QString GROUPING;
 };
diff --git a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp
index 45a1adb386..1d7fbbec67 100755
--- a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp
+++ b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp
@@ -19,7 +19,6 @@
 #include <NumericalConstants.h>
 
 const QString KeyboardMouseDevice::NAME = "Keyboard/Mouse";
-const QString KeyboardMouseDevice::GROUPING = "Standard";
 
 void KeyboardMouseDevice::pluginUpdate(float deltaTime, bool jointsCaptured) { 
     _inputDevice->update(deltaTime, jointsCaptured); 
diff --git a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h
index 654041ac35..6acb2bf041 100644
--- a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h
+++ b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.h
@@ -68,7 +68,6 @@ public:
     virtual bool isSupported() const override { return true; }
     virtual bool isJointController() const override { return false; }
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
 
     virtual void pluginFocusOutEvent() override { _inputDevice->focusOutEvent(); }
     virtual void pluginUpdate(float deltaTime, bool jointsCaptured) override;
@@ -88,7 +87,6 @@ public:
     void wheelEvent(QWheelEvent* event);
     
     static const QString NAME;
-    static const QString GROUPING;
 
 protected:
 
diff --git a/libraries/plugins/src/plugins/Plugin.h b/libraries/plugins/src/plugins/Plugin.h
index 6928416f88..ee10ce331c 100644
--- a/libraries/plugins/src/plugins/Plugin.h
+++ b/libraries/plugins/src/plugins/Plugin.h
@@ -19,8 +19,10 @@ public:
     /// \return human-readable name
     virtual const QString& getName() const = 0;
 
-    /// \return human-readable grouping for the plugin, Standard, Advanced, or Developer
-    virtual const QString& getGrouping() const = 0;
+    typedef enum { STANDARD, ADVANCED, DEVELOPER } grouping;
+
+    /// \return human-readable grouping for the plugin, STANDARD, ADVANCED, or DEVELOPER
+    virtual grouping getGrouping() const { return STANDARD; }
 
     /// \return string ID (not necessarily human-readable)
     virtual const QString& getID() const { assert(false); return UNKNOWN_PLUGIN_ID; }
diff --git a/plugins/hifiNeuron/src/NeuronPlugin.cpp b/plugins/hifiNeuron/src/NeuronPlugin.cpp
index b9372967d1..a175ce8e06 100644
--- a/plugins/hifiNeuron/src/NeuronPlugin.cpp
+++ b/plugins/hifiNeuron/src/NeuronPlugin.cpp
@@ -30,7 +30,6 @@ Q_LOGGING_CATEGORY(inputplugins, "hifi.inputplugins")
 #endif
 
 const QString NeuronPlugin::NAME = "Neuron";
-const QString NeuronPlugin::GROUPING = "Standard";
 const QString NeuronPlugin::NEURON_ID_STRING = "Perception Neuron";
 
 // indices of joints of the Neuron standard skeleton.
diff --git a/plugins/hifiNeuron/src/NeuronPlugin.h b/plugins/hifiNeuron/src/NeuronPlugin.h
index 85ed3a3ecd..33c6879f5b 100644
--- a/plugins/hifiNeuron/src/NeuronPlugin.h
+++ b/plugins/hifiNeuron/src/NeuronPlugin.h
@@ -29,7 +29,6 @@ public:
     virtual bool isSupported() const override;
     virtual bool isJointController() const override { return true; }
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
     const QString& getID() const override { return NEURON_ID_STRING; }
 
     virtual void activate() override;
@@ -66,7 +65,6 @@ protected:
     std::shared_ptr<InputDevice> _inputDevice { std::make_shared<InputDevice>() };
 
     static const QString NAME;
-    static const QString GROUPING;
     static const QString NEURON_ID_STRING;
 
     std::string _serverAddress;
diff --git a/plugins/hifiSdl2/src/SDL2Manager.cpp b/plugins/hifiSdl2/src/SDL2Manager.cpp
index 554a8659c0..7ca49bbd75 100644
--- a/plugins/hifiSdl2/src/SDL2Manager.cpp
+++ b/plugins/hifiSdl2/src/SDL2Manager.cpp
@@ -44,7 +44,6 @@ static_assert(
 
 
 const QString SDL2Manager::NAME = "SDL2";
-const QString SDL2Manager::GROUPING = "Standard";
 
 #ifdef HAVE_SDL2
 SDL_JoystickID SDL2Manager::getInstanceId(SDL_GameController* controller) {
diff --git a/plugins/hifiSdl2/src/SDL2Manager.h b/plugins/hifiSdl2/src/SDL2Manager.h
index cb4d5cb744..6506cdccb6 100644
--- a/plugins/hifiSdl2/src/SDL2Manager.h
+++ b/plugins/hifiSdl2/src/SDL2Manager.h
@@ -30,7 +30,6 @@ public:
     virtual bool isSupported() const override;
     virtual bool isJointController() const override { return false; }
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
 
     virtual void init() override;
     virtual void deinit() override;
@@ -85,7 +84,6 @@ private:
 #endif
     bool _isInitialized;
     static const QString NAME;
-    static const QString GROUPING;
 };
 
 #endif // hifi__SDL2Manager_h
diff --git a/plugins/hifiSixense/src/SixenseManager.cpp b/plugins/hifiSixense/src/SixenseManager.cpp
index 5ef73d3646..3377aac14c 100644
--- a/plugins/hifiSixense/src/SixenseManager.cpp
+++ b/plugins/hifiSixense/src/SixenseManager.cpp
@@ -56,7 +56,6 @@ bool SixenseManager::_sixenseLoaded = false;
 
 
 const QString SixenseManager::NAME = "Sixense";
-const QString SixenseManager::GROUPING = "Standard";
 const QString SixenseManager::HYDRA_ID_STRING = "Razer Hydra";
 
 const QString MENU_PARENT = "Developer";
diff --git a/plugins/hifiSixense/src/SixenseManager.h b/plugins/hifiSixense/src/SixenseManager.h
index 4eb07c974f..bbb9774368 100644
--- a/plugins/hifiSixense/src/SixenseManager.h
+++ b/plugins/hifiSixense/src/SixenseManager.h
@@ -30,7 +30,6 @@ public:
     virtual bool isSupported() const override;
     virtual bool isJointController() const override { return true; }
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
     virtual const QString& getID() const override { return HYDRA_ID_STRING; }
 
     virtual void activate() override;
@@ -98,7 +97,6 @@ private:
     std::shared_ptr<InputDevice> _inputDevice { std::make_shared<InputDevice>() };
 
     static const QString NAME;
-    static const QString GROUPING;
     static const QString HYDRA_ID_STRING;
 
     static bool _sixenseLoaded;
diff --git a/plugins/oculus/src/OculusDebugDisplayPlugin.cpp b/plugins/oculus/src/OculusDebugDisplayPlugin.cpp
index 9ef2cda514..94a3670e4b 100644
--- a/plugins/oculus/src/OculusDebugDisplayPlugin.cpp
+++ b/plugins/oculus/src/OculusDebugDisplayPlugin.cpp
@@ -9,8 +9,6 @@
 #include <QtCore/QProcessEnvironment>
 
 const QString OculusDebugDisplayPlugin::NAME("Oculus Rift (Simulator)");
-const QString OculusDebugDisplayPlugin::GROUPING("Developer");
-
 
 static const QString DEBUG_FLAG("HIFI_DEBUG_OCULUS");
 static bool enableDebugOculus = QProcessEnvironment::systemEnvironment().contains("HIFI_DEBUG_OCULUS");
diff --git a/plugins/oculus/src/OculusDebugDisplayPlugin.h b/plugins/oculus/src/OculusDebugDisplayPlugin.h
index cc0d5c2065..c62fe12c73 100644
--- a/plugins/oculus/src/OculusDebugDisplayPlugin.h
+++ b/plugins/oculus/src/OculusDebugDisplayPlugin.h
@@ -12,7 +12,7 @@
 class OculusDebugDisplayPlugin : public OculusBaseDisplayPlugin {
 public:
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
+    virtual grouping getGrouping() const override { return DEVELOPER; }
     virtual bool isSupported() const override;
 
 protected:
@@ -20,6 +20,5 @@ protected:
 
 private:
     static const QString NAME;
-    static const QString GROUPING;
 };
 
diff --git a/plugins/oculus/src/OculusDisplayPlugin.cpp b/plugins/oculus/src/OculusDisplayPlugin.cpp
index 0b81f661df..3002c746a2 100644
--- a/plugins/oculus/src/OculusDisplayPlugin.cpp
+++ b/plugins/oculus/src/OculusDisplayPlugin.cpp
@@ -137,7 +137,6 @@ private:
 #endif
 
 const QString OculusDisplayPlugin::NAME("Oculus Rift");
-const QString OculusDisplayPlugin::GROUPING("Standard");
 
 static const QString MONO_PREVIEW = "Mono Preview";
 static const QString FRAMERATE = DisplayPlugin::MENU_PATH() + ">Framerate";
diff --git a/plugins/oculus/src/OculusDisplayPlugin.h b/plugins/oculus/src/OculusDisplayPlugin.h
index 4633e434e1..d6ae4e6436 100644
--- a/plugins/oculus/src/OculusDisplayPlugin.h
+++ b/plugins/oculus/src/OculusDisplayPlugin.h
@@ -18,7 +18,6 @@ class OculusDisplayPlugin : public OculusBaseDisplayPlugin {
 public:
     virtual void activate() override;
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
     virtual void setEyeRenderPose(uint32_t frameIndex, Eye eye, const glm::mat4& pose) override final;
 
     virtual float getTargetFrameRate() override { return TARGET_RATE_Oculus; }
@@ -31,7 +30,6 @@ protected:
 private:
     using EyePoses = std::pair<ovrPosef, ovrPosef>;
     static const QString NAME;
-    static const QString GROUPING;
     bool _enablePreview{ false };
     bool _monoPreview { true };
     QMap<uint32_t, EyePoses> _frameEyePoses;
diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp
index f6e6055d84..4bded4e58f 100644
--- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp
+++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.cpp
@@ -26,9 +26,7 @@
 
 using namespace oglplus;
 
-const QString OculusLegacyDisplayPlugin::NAME("Oculus Rift (0.5) (Simulated)");
-const QString OculusLegacyDisplayPlugin::GROUPING("Standard");
-
+const QString OculusLegacyDisplayPlugin::NAME("Oculus Rift (0.5) (Legacy)");
 
 OculusLegacyDisplayPlugin::OculusLegacyDisplayPlugin() {
 }
diff --git a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h
index 603bdac507..1ba288cc65 100644
--- a/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h
+++ b/plugins/oculusLegacy/src/OculusLegacyDisplayPlugin.h
@@ -20,7 +20,6 @@ public:
     OculusLegacyDisplayPlugin();
     virtual bool isSupported() const override;
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
 
     virtual void activate() override;
     virtual void deactivate() override;
@@ -47,7 +46,6 @@ protected:
     
 private:
     static const QString NAME;
-    static const QString GROUPING;
 
     ovrHmd _hmd;
     mutable ovrTrackingState _trackingState;
diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp
index 6860245fb0..7fb70180c4 100644
--- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp
+++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp
@@ -28,11 +28,9 @@ Q_DECLARE_LOGGING_CATEGORY(displayplugins)
 Q_LOGGING_CATEGORY(displayplugins, "hifi.displayplugins")
 
 const QString OpenVrDisplayPlugin::NAME("OpenVR (Vive)");
-const QString OpenVrDisplayPlugin::GROUPING("Standard");
 
 const QString StandingHMDSensorMode = "Standing HMD Sensor Mode"; // this probably shouldn't be hardcoded here
 
-
 static vr::IVRCompositor* _compositor{ nullptr };
 vr::TrackedDevicePose_t _trackedDevicePose[vr::k_unMaxTrackedDeviceCount];
 mat4 _trackedDevicePoseMat4[vr::k_unMaxTrackedDeviceCount];
diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.h b/plugins/openvr/src/OpenVrDisplayPlugin.h
index 5983129572..e290368de0 100644
--- a/plugins/openvr/src/OpenVrDisplayPlugin.h
+++ b/plugins/openvr/src/OpenVrDisplayPlugin.h
@@ -19,7 +19,6 @@ class OpenVrDisplayPlugin : public WindowOpenGLDisplayPlugin {
 public:
     virtual bool isSupported() const override;
     virtual const QString& getName() const override { return NAME; }
-    virtual const QString& getGrouping() const override { return GROUPING; }
     virtual bool isHmd() const override { return true; }
 
     virtual float getTargetFrameRate() override { return TARGET_RATE_OpenVr; }
@@ -46,6 +45,5 @@ protected:
 private:
     vr::IVRSystem* _hmd { nullptr };
     static const QString NAME;
-    static const QString GROUPING;
 };