diff --git a/UPGRADE.txt b/UPGRADE.txt
index ff3ca921b6cb6bf97573055041fc418d4f42bfe4..e2184ceca500c00f07b0f4346aa020b1fadd6540 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -59,6 +59,12 @@ Core:
 * The silencethreshold used for various applications is now settable via a
   centralized config option in dsp.conf.
 
+* The logical value of spaces immediately preceding a standalone 0 previously
+  evaluated to true.  It now evaluates to false.  This has confused a good
+  many people in the past (typically because they failed to realize the space
+  had any significance).  Since this violates the Principle of Least Surprise,
+  it has been changed.
+
 Voicemail:
 
 * The voicemail configuration values 'maxmessage' and 'minmessage' have
diff --git a/main/pbx.c b/main/pbx.c
index cc14ba2eb13db9f742945583a407fa9f6275bbd6..a18d29e9ae78dd368b7e3a7b644a0fd45ca52225 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -7959,12 +7959,14 @@ void pbx_builtin_clear_globals(void)
 
 int pbx_checkcondition(const char *condition)
 {
-	if (ast_strlen_zero(condition))	/* NULL or empty strings are false */
+	int res;
+	if (ast_strlen_zero(condition)) {                /* NULL or empty strings are false */
 		return 0;
-	else if (*condition >= '0' && *condition <= '9')	/* Numbers are evaluated for truth */
-		return atoi(condition);
-	else	/* Strings are true */
+	} else if (sscanf(condition, "%d", &res) == 1) { /* Numbers are evaluated for truth */
+		return res;
+	} else {                                         /* Strings are true */
 		return 1;
+	}
 }
 
 static int pbx_builtin_gotoif(struct ast_channel *chan, void *data)