diff --git a/doc/contributions.txt b/doc/contributions.txt
index 1608b65033eae9b10824d647b5df7bccd43c5d52..f086ed2716eda31fea46fa4847388a8e44460fc9 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -319,6 +319,7 @@ Cinder Roxley
     OPEN-185
     OPEN-282
     OPEN-292
+    OPEN-297
     STORM-1703
     STORM-1948
     STORM-1831
diff --git a/indra/cmake/BuildVersion.cmake b/indra/cmake/BuildVersion.cmake
index 389ded1d98401405b4ab8c173cec290d4ca82a5b..195d6e705e020b8ff4d9e85bce1b5ebc4865059d 100644
--- a/indra/cmake/BuildVersion.cmake
+++ b/indra/cmake/BuildVersion.cmake
@@ -15,27 +15,33 @@ if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/n
            message("Revision (from environment): ${VIEWER_VERSION_REVISION}")
 
         else (DEFINED ENV{revision})
-           find_program(MERCURIAL hg)
-           find_program(WORDCOUNT wc)
-           find_program(SED sed)
-           if (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
-              execute_process(
-                 COMMAND ${MERCURIAL} log -r tip:0 --template '\\n'
-                 COMMAND ${WORDCOUNT} -l
-                 COMMAND ${SED} "s/ //g"
-                 OUTPUT_VARIABLE VIEWER_VERSION_REVISION
-                 OUTPUT_STRIP_TRAILING_WHITESPACE
-                 )
-              if ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
-                 message("Revision (from hg) ${VIEWER_VERSION_REVISION}")
-              else ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
-                 message("Revision not set (repository not found?); using 0")
-                 set(VIEWER_VERSION_REVISION 0 )
-              endif ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
-           else (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
-              message("Revision not set: 'hg', 'wc' or 'sed' not found; using 0")
+          find_program(MERCURIAL
+                       NAMES hg
+                       PATHS [HKEY_LOCAL_MACHINE\\Software\\TortoiseHG]
+                       PATH_SUFFIXES Mercurial)
+          mark_as_advanced(MERCURIAL)
+          if (MERCURIAL)
+            execute_process(COMMAND ${MERCURIAL} identify --num --rev tip
+                            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+                            RESULT_VARIABLE hg_id_result
+                            ERROR_VARIABLE hg_id_error
+                            OUTPUT_VARIABLE VIEWER_VERSION_REVISION
+                            OUTPUT_STRIP_TRAILING_WHITESPACE)
+            if (NOT ${hg_id_result} EQUAL 0)
+              message(SEND_ERROR "Revision number generation failed with output:\n${hg_id_error}")
+            else (NOT ${hg_id_result} EQUAL 0)
+              string(REGEX REPLACE "[^0-9a-f]" "" VIEWER_VERSION_REVISION ${VIEWER_VERSION_REVISION})
+            endif (NOT ${hg_id_result} EQUAL 0)
+            if ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+              message("Revision (from hg) ${VIEWER_VERSION_REVISION}")
+            else ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+              message("Revision not set (repository not found?); using 0")
+              set(VIEWER_VERSION_REVISION 0 )
+            endif ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+           else (MERCURIAL)
+              message("Revision not set: mercurial not found; using 0")
               set(VIEWER_VERSION_REVISION 0)
-           endif (DEFINED MERCURIAL AND DEFINED WORDCOUNT AND DEFINED SED)
+           endif (MERCURIAL)
         endif (DEFINED ENV{revision})
         message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
     else ( EXISTS ${VIEWER_VERSION_BASE_FILE} )