diff --git a/share/genbuild.sh b/share/genbuild.sh
index 208f7fc93..15cbcb1ad 100755
--- a/share/genbuild.sh
+++ b/share/genbuild.sh
@@ -1,49 +1,49 @@
 #!/bin/sh
 # Copyright (c) 2012-2016 The Bitcoin Core developers
 # Distributed under the MIT software license, see the accompanying
 # file COPYING or http://www.opensource.org/licenses/mit-license.php.
 
 export LC_ALL=C
 if [ $# -gt 1 ]; then
     cd "$2" || exit 1
 fi
 if [ $# -gt 0 ]; then
     FILE="$1"
     shift
     if [ -f "$FILE" ]; then
         INFO="$(head -n 1 "$FILE")"
     fi
 else
     echo "Usage: $0 <filename> <srcroot>"
     exit 1
 fi
 
-DESC=""
-SUFFIX=""
+GIT_TAG=""
+GIT_COMMIT=""
 if [ -e "$(command -v git)" ] && [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then
     # clean 'dirty' status of touched files that haven't been modified
     git diff >/dev/null 2>/dev/null
 
     # if latest commit is tagged and not dirty, then override using the tag name
     RAWDESC=$(git describe --abbrev=0 2>/dev/null)
     if [ "$(git rev-parse HEAD)" = "$(git rev-list -1 $RAWDESC 2>/dev/null)" ]; then
-        git diff-index --quiet HEAD -- && DESC=$RAWDESC
+        git diff-index --quiet HEAD -- && GIT_TAG=$RAWDESC
     fi
 
     # otherwise generate suffix from git, i.e. string like "59887e8-dirty"
-    SUFFIX=$(git rev-parse --short HEAD)
-    git diff-index --quiet HEAD -- || SUFFIX="$SUFFIX-dirty"
+    GIT_COMMIT=$(git rev-parse --short HEAD)
+    git diff-index --quiet HEAD -- || GIT_COMMIT="$GIT_COMMIT-dirty"
 fi
 
-if [ -n "$DESC" ]; then
-    NEWINFO="#define BUILD_DESC \"$DESC\""
-elif [ -n "$SUFFIX" ]; then
-    NEWINFO="#define BUILD_SUFFIX $SUFFIX"
+if [ -n "$GIT_TAG" ]; then
+    NEWINFO="#define BUILD_GIT_TAG \"$GIT_TAG\""
+elif [ -n "$GIT_COMMIT" ]; then
+    NEWINFO="#define BUILD_GIT_COMMIT \"$GIT_COMMIT\""
 else
     NEWINFO="// No build information available"
 fi
 
 # only update build.h if necessary
 if [ "$INFO" != "$NEWINFO" ]; then
     echo "$NEWINFO" >"$FILE"
 fi
diff --git a/src/clientversion.cpp b/src/clientversion.cpp
index d07ebf014..536b8ac7c 100644
--- a/src/clientversion.cpp
+++ b/src/clientversion.cpp
@@ -1,115 +1,81 @@
 // Copyright (c) 2012-2016 The Bitcoin Core developers
 // Distributed under the MIT software license, see the accompanying
 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
 
 #include <clientversion.h>
 
 #include <tinyformat.h>
 
 /**
  * Name of client reported in the 'version' message. Report the same name
  * for both bitcoind and bitcoin-qt, to make it harder for attackers to
  * target servers or GUI users specifically.
  */
 const std::string CLIENT_NAME("Bitcoin ABC");
 
-/**
- * Client version number
- */
-#define CLIENT_VERSION_SUFFIX ""
-
-/**
- * The following part of the code determines the CLIENT_BUILD variable.
- * Several mechanisms are used for this:
- * * first, if HAVE_BUILD_INFO is defined, include build.h, a file that is
- *   generated by the build environment, possibly containing the output
- *   of git-describe in a macro called BUILD_DESC
- * * secondly, if this is an exported version of the code, GIT_ARCHIVE will
- *   be defined (automatically using the export-subst git attribute), and
- *   GIT_COMMIT will contain the commit id.
- * * then, three options exist for determining CLIENT_BUILD:
- *   * if BUILD_DESC is defined, use that literally (output of git-describe)
- *   * if not, but GIT_COMMIT is defined, use
- *     v[maj].[min].[rev].[build]-g[commit]
- *   * otherwise, use v[maj].[min].[rev].[build]-unk
- * finally CLIENT_VERSION_SUFFIX is added
- */
-
-//! First, include build.h if requested
 #ifdef HAVE_BUILD_INFO
 #include <obj/build.h>
+// The <obj/build.h>, which is generated by the build environment
+// (share/genbuild.sh), could contain only one line of the following:
+//   - "#define BUILD_GIT_TAG ...", if the top commit is tagged
+//   - "#define BUILD_GIT_COMMIT ...", if the top commit is not tagged
+//   - "// No build information available", if proper git information is not
+//   available
 #endif
 
-//! git will put "#define GIT_ARCHIVE 1" on the next line inside archives.
-//! $Format:%n#define GIT_ARCHIVE 1$
-#ifdef GIT_ARCHIVE
-#define GIT_COMMIT_ID "$Format:%h$"
-#define GIT_COMMIT_DATE "$Format:%cD$"
-#endif
-
-#define BUILD_DESC_WITH_SUFFIX(maj, min, rev, suffix)                          \
-    "v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE(              \
-        rev) "-" DO_STRINGIZE(suffix)
+//! git will put "#define GIT_COMMIT_ID ..." on the next line inside archives.
+//! $Format:%n#define GIT_COMMIT_ID "%H"$
 
-#define BUILD_DESC_FROM_COMMIT(maj, min, rev, commit)                          \
-    "v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE(              \
-        rev) "-g" commit
-
-#define BUILD_DESC_FROM_UNKNOWN(maj, min, rev)                                 \
-    "v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE(rev) "-unk"
-
-#ifndef BUILD_DESC
-#ifdef BUILD_SUFFIX
+#ifdef BUILD_GIT_TAG
+#define BUILD_DESC BUILD_GIT_TAG
+#define BUILD_SUFFIX ""
+#else
 #define BUILD_DESC                                                             \
-    BUILD_DESC_WITH_SUFFIX(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR,         \
-                           CLIENT_VERSION_REVISION, BUILD_SUFFIX)
-
+    "v" STRINGIZE(CLIENT_VERSION_MAJOR) "." STRINGIZE(                         \
+        CLIENT_VERSION_MINOR) "." STRINGIZE(CLIENT_VERSION_REVISION)
+#ifdef BUILD_GIT_COMMIT
+#define BUILD_SUFFIX "-" BUILD_GIT_COMMIT
 #elif defined(GIT_COMMIT_ID)
-#define BUILD_DESC                                                             \
-    BUILD_DESC_FROM_COMMIT(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR,         \
-                           CLIENT_VERSION_REVISION, GIT_COMMIT_ID)
-
+#define BUILD_SUFFIX "-g" GIT_COMMIT_ID
 #else
-#define BUILD_DESC                                                             \
-    BUILD_DESC_FROM_UNKNOWN(CLIENT_VERSION_MAJOR, CLIENT_VERSION_MINOR,        \
-                            CLIENT_VERSION_REVISION)
+#define BUILD_SUFFIX "-unk"
 #endif
 #endif
 
-const std::string CLIENT_BUILD(BUILD_DESC CLIENT_VERSION_SUFFIX);
+const std::string CLIENT_BUILD(BUILD_DESC BUILD_SUFFIX);
 
 static std::string FormatVersion(int nVersion) {
     if (nVersion % 100 == 0) {
         return strprintf("%d.%d.%d", nVersion / 1000000,
                          (nVersion / 10000) % 100, (nVersion / 100) % 100);
     } else {
         return strprintf("%d.%d.%d.%d", nVersion / 1000000,
                          (nVersion / 10000) % 100, (nVersion / 100) % 100,
                          nVersion % 100);
     }
 }
 
 std::string FormatFullVersion() {
     return CLIENT_BUILD;
 }
 
 /**
  * Format the subversion field according to BIP 14 spec
  * (https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki)
  */
 std::string FormatSubVersion(const std::string &name, int nClientVersion,
                              const std::vector<std::string> &comments) {
     std::ostringstream ss;
     ss << "/";
     ss << name << ":" << FormatVersion(nClientVersion);
     if (!comments.empty()) {
         std::vector<std::string>::const_iterator it(comments.begin());
         ss << "(" << *it;
         for (++it; it != comments.end(); ++it) {
             ss << "; " << *it;
         }
         ss << ")";
     }
     ss << "/";
     return ss.str();
 }