--- a/upmpd/ohproduct.cxx
+++ b/upmpd/ohproduct.cxx
@@ -172,67 +172,54 @@
 int OHProduct::setStandby(const SoapArgs& sc, SoapData& data)
 {
     LOGDEB("OHProduct::setStandby" << endl);
+    bool standby;
+    if (!sc.getBool("Value", &standby)) {
+        return UPNP_E_INVALID_PARAM;
+    }
+    return UPNP_E_SUCCESS;
+}
+
+int OHProduct::sourceCount(const SoapArgs& sc, SoapData& data)
+{
+    LOGDEB("OHProduct::sourceCount" << endl);
+    data.addarg("Value", "1");
+    return UPNP_E_SUCCESS;
+}
+
+int OHProduct::sourceXML(const SoapArgs& sc, SoapData& data)
+{
+    LOGDEB("OHProduct::sourceXML" << endl);
+    data.addarg("Value", csxml);
+    return UPNP_E_SUCCESS;
+}
+
+int OHProduct::sourceIndex(const SoapArgs& sc, SoapData& data)
+{
+    LOGDEB("OHProduct::sourceIndex" << endl);
+    data.addarg("Value", "0");
+    return UPNP_E_SUCCESS;
+}
+
+int OHProduct::setSourceIndex(const SoapArgs& sc, SoapData& data)
+{
+    LOGDEB("OHProduct::setSourceIndex" << endl);
+    int sindex;
+    if (!sc.getInt("Value", &sindex)) {
+        return UPNP_E_INVALID_PARAM;
+    }
+    LOGDEB("OHProduct::setSourceIndex: " << sindex << endl);
+    return UPNP_E_SUCCESS;
+}
+
+int OHProduct::setSourceIndexByName(const SoapArgs& sc, SoapData& data)
+{
+    LOGDEB("OHProduct::setSourceIndexByName" << endl);
     map<string, string>::const_iterator it;
 
     it = sc.args.find("Value");
     if (it == sc.args.end() || it->second.empty()) {
         return UPNP_E_INVALID_PARAM;
     }
-    if (it->second[0] == 'F' || it->second[0] == '0') {
-        LOGDEB("OHProduct::setStandby-> standby off" << endl);
-    } else if (it->second[0] == 'T' || it->second[0] == '1') {
-        LOGDEB("OHProduct::setStandby-> standby on" << endl);
-    } else {
-        return UPNP_E_INVALID_PARAM;
-    }
-    m_dev->loopWakeup();
-    return UPNP_E_SUCCESS;
-}
-
-int OHProduct::sourceCount(const SoapArgs& sc, SoapData& data)
-{
-    LOGDEB("OHProduct::sourceCount" << endl);
-    data.addarg("Value", "1");
-    return UPNP_E_SUCCESS;
-}
-
-int OHProduct::sourceXML(const SoapArgs& sc, SoapData& data)
-{
-    LOGDEB("OHProduct::sourceXML" << endl);
-    data.addarg("Value", csxml);
-    return UPNP_E_SUCCESS;
-}
-
-int OHProduct::sourceIndex(const SoapArgs& sc, SoapData& data)
-{
-    LOGDEB("OHProduct::sourceIndex" << endl);
-    data.addarg("Value", "0");
-    return UPNP_E_SUCCESS;
-}
-
-int OHProduct::setSourceIndex(const SoapArgs& sc, SoapData& data)
-{
-    LOGDEB("OHProduct::setSourceIndex" << endl);
-    map<string, string>::const_iterator it;
-
-    it = sc.args.find("Value");
-    if (it == sc.args.end() || it->second.empty()) {
-        return UPNP_E_INVALID_PARAM;
-    }
-    LOGDEB("OHProduct::setSourceIndex: " << it->second << endl);
-    m_dev->loopWakeup();
-    return UPNP_E_SUCCESS;
-}
-
-int OHProduct::setSourceIndexByName(const SoapArgs& sc, SoapData& data)
-{
-    LOGDEB("OHProduct::setSourceIndexByName" << endl);
-    map<string, string>::const_iterator it;
-
-    it = sc.args.find("Value");
-    if (it == sc.args.end() || it->second.empty()) {
-        return UPNP_E_INVALID_PARAM;
-    }
     LOGDEB("OHProduct::setSourceIndexByName: " << it->second << endl);
     m_dev->loopWakeup();
     return UPNP_E_SUCCESS;
@@ -241,15 +228,12 @@
 int OHProduct::source(const SoapArgs& sc, SoapData& data)
 {
     LOGDEB("OHProduct::source" << endl);
-    map<string, string>::const_iterator it;
-
-    it = sc.args.find("Index");
-    if (it == sc.args.end() || it->second.empty()) {
-        return UPNP_E_INVALID_PARAM;
-    }
-    string sindex(it->second);
+    int sindex;
+    if (!sc.getInt("Index", &sindex)) {
+        return UPNP_E_INVALID_PARAM;
+    }
     LOGDEB("OHProduct::setSourceIndex: " << sindex << endl);
-    if (sindex.compare("0")) {
+    if (sindex != 0) {
         return UPNP_E_INVALID_PARAM;
     }
     data.addarg("SystemName", "Default");