diff --git a/modules/FindgSOAP.cmake b/modules/FindgSOAP.cmake
index 3f24463bb526fd263e2a1e2fc54f28caeaa7d64c..b259d1e580fbc00b1a73bf6374c60e85397947e3 100644
--- a/modules/FindgSOAP.cmake
+++ b/modules/FindgSOAP.cmake
@@ -94,10 +94,18 @@ message(STATUS " - wsdlh : ${GSOAP_WSDL2H}")
 message(STATUS " - SOAPCPP2 : ${GSOAP_SOAPCPP2}")
 
 # some versions of soapcpp2 interpret "-v" as verbose, and hang while waiting for input
-# try "-help" first, and if it fails, do "-v"
+# try "-help" first
 execute_process(COMMAND ${GSOAP_SOAPCPP2}  "-help"   OUTPUT_VARIABLE GSOAP_STRING_VERSION ERROR_VARIABLE GSOAP_STRING_VERSION )
 string(REGEX MATCH "[0-9]*\\.[0-9]*\\.[0-9]*" GSOAP_VERSION ${GSOAP_STRING_VERSION})
 
+# for some reason, -help stopped giving the version at some point
+# but -v also hangs, so try -V (gah)
+if( "${GSOAP_VERSION}" STREQUAL "..")
+  execute_process(COMMAND ${GSOAP_SOAPCPP2}  "-V"   OUTPUT_VARIABLE GSOAP_STRING_VERSION ERROR_VARIABLE GSOAP_STRING_VERSION )
+  string(REGEX MATCH "[0-9]*\\.[0-9]*\\.[0-9]*" GSOAP_VERSION ${GSOAP_STRING_VERSION})
+endif()
+
+# nothing worked, fallback to -v
 if( "${GSOAP_VERSION}" STREQUAL "..")
   execute_process(COMMAND ${GSOAP_SOAPCPP2}  "-v"   OUTPUT_VARIABLE GSOAP_STRING_VERSION ERROR_VARIABLE GSOAP_STRING_VERSION )
   string(REGEX MATCH "[0-9]*\\.[0-9]*\\.[0-9]*" GSOAP_VERSION ${GSOAP_STRING_VERSION})