diff --git a/src/Viewer/VRManager.cxx b/src/Viewer/VRManager.cxx
index 3dd9ddb76..85221020f 100644
--- a/src/Viewer/VRManager.cxx
+++ b/src/Viewer/VRManager.cxx
@@ -144,15 +144,15 @@ void VRManager::setVisibilityMask(bool visibilityMask)
     syncSettings();
 }
 
-void VRManager::setVRMode(const char * mode)
+void VRManager::setVRMode(const std::string& mode)
 {
     osgXR::Settings::VRMode vrMode = osgXR::Settings::VRMODE_AUTOMATIC;
 
-    if (strcmp(mode, "AUTOMATIC") == 0) {
+    if (mode == "AUTOMATIC") {
         vrMode = osgXR::Settings::VRMODE_AUTOMATIC;
-    } else if (strcmp(mode, "SLAVE_CAMERAS") == 0) {
+    } else if (mode == "SLAVE_CAMERAS") {
         vrMode = osgXR::Settings::VRMODE_SLAVE_CAMERAS;
-    } else if (strcmp(mode, "SCENE_VIEW") == 0) {
+    } else if (mode == "SCENE_VIEW") {
         vrMode = osgXR::Settings::VRMODE_SCENE_VIEW;
     }
 
@@ -160,15 +160,15 @@ void VRManager::setVRMode(const char * mode)
     syncSettings();
 }
 
-void VRManager::setSwapchainMode(const char * mode)
+void VRManager::setSwapchainMode(const std::string& mode)
 {
     osgXR::Settings::SwapchainMode swapchainMode = osgXR::Settings::SWAPCHAIN_AUTOMATIC;
 
-    if (strcmp(mode, "AUTOMATIC") == 0) {
+    if (mode == "AUTOMATIC") {
         swapchainMode = osgXR::Settings::SWAPCHAIN_AUTOMATIC;
-    } else if (strcmp(mode,"MULTIPLE") == 0) {
+    } else if (mode == "MULTIPLE") {
         swapchainMode = osgXR::Settings::SWAPCHAIN_MULTIPLE;
-    } else if (strcmp(mode,"SINGLE") == 0) {
+    } else if (mode == "SINGLE") {
         swapchainMode = osgXR::Settings::SWAPCHAIN_SINGLE;
     }
 
@@ -176,22 +176,22 @@ void VRManager::setSwapchainMode(const char * mode)
     syncSettings();
 }
 
-void VRManager::setMirrorMode(const char * mode)
+void VRManager::setMirrorMode(const std::string& mode)
 {
     osgXR::MirrorSettings::MirrorMode mirrorMode = osgXR::MirrorSettings::MIRROR_AUTOMATIC;
     int viewIndex = -1;
 
-    if (strcmp(mode, "AUTOMATIC") == 0) {
+    if (mode == "AUTOMATIC") {
         mirrorMode = osgXR::MirrorSettings::MIRROR_AUTOMATIC;
-    } else if (strcmp(mode, "NONE") == 0) {
+    } else if (mode == "NONE") {
         mirrorMode = osgXR::MirrorSettings::MIRROR_NONE;
-    } else if (strcmp(mode, "LEFT") == 0) {
+    } else if (mode == "LEFT") {
         mirrorMode = osgXR::MirrorSettings::MIRROR_SINGLE;
         viewIndex = 0;
-    } else if (strcmp(mode, "RIGHT") == 0) {
+    } else if (mode == "RIGHT") {
         mirrorMode = osgXR::MirrorSettings::MIRROR_SINGLE;
         viewIndex = 1;
-    } else if (strcmp(mode, "LEFT_RIGHT") == 0) {
+    } else if (mode == "LEFT_RIGHT") {
         mirrorMode = osgXR::MirrorSettings::MIRROR_LEFT_RIGHT;
     }
 
diff --git a/src/Viewer/VRManager.hxx b/src/Viewer/VRManager.hxx
index 95d156d67..72150c00d 100644
--- a/src/Viewer/VRManager.hxx
+++ b/src/Viewer/VRManager.hxx
@@ -80,9 +80,9 @@ class VRManager : public osgXR::Manager
         void setDepthInfo(bool depthInfo);
         void setVisibilityMask(bool visibilityMask);
 
-        void setVRMode(const char * mode);
-        void setSwapchainMode(const char * mode);
-        void setMirrorMode(const char * mode);
+        void setVRMode(const std::string& mode);
+        void setSwapchainMode(const std::string& mode);
+        void setMirrorMode(const std::string& mode);
 
         // osgXR::Manager overrides
 
@@ -130,11 +130,11 @@ class VRManager : public osgXR::Manager
 
         // Property listeners
 
-        template <typename T>
+        template <typename T, typename R = T>
         class Listener : public SGPropertyChangeListener
         {
             public:
-                typedef void (VRManager::*SetterFn)(T v);
+                typedef void (VRManager::*SetterFn)(R v);
 
                 Listener(VRManager *manager, SetterFn setter) :
                     _manager(manager),
@@ -153,7 +153,7 @@ class VRManager : public osgXR::Manager
                 SetterFn _setter;
         };
         typedef Listener<bool> ListenerBool;
-        typedef Listener<const char *> ListenerString;
+        typedef Listener<std::string, const std::string&> ListenerString;
 
         ListenerBool _listenerEnabled;
         ListenerBool _listenerDepthInfo;