diff --git a/build.sh b/build.sh
index b281c7e..7156521 100755
--- a/build.sh
+++ b/build.sh
@@ -69,15 +69,16 @@ buildp_dispatch() {
 		buildp_dispatch_pkg_state "${_msg}" "${@}"; ;;
 	finish_group|start_group)
 		buildp_dispatch_group_state "${_msg}" "${@}"; ;;
-	*)	if command -v "buildp_dispatch_${_msg}"; then
+	*)	if command -v "buildp_dispatch_${_msg}" >/dev/null 2>&1; then
 			"buildp_dispatch_${_msg}" "${@}";
 		fi; ;;
 	esac;
 };
 
 build() {
-	local	_build_date_start="" _build_time_hours=0 _build_time_mins=0 _build_time_secs=0	\
-		BUILD_NFAIL=0 BUILD_NFINI=0 BUILD_NSKIP=0 BUILD_PKGS_FAILED="" EX_PKG_DISPATCH_UNKNOWN="";
+	local	_build_time_hours=0 _build_time_mins=0 _build_time_secs=0	\
+		BUILD_DATE_START="" BUILD_NFAIL=0 BUILD_NFINI=0 BUILD_NSKIP=0	\
+		BUILD_PKGS_FAILED="" EX_PKG_DISPATCH_UNKNOWN="";
 	if trap "buildp_ast abort" HUP INT TERM USR1 USR2\
 	&& trap "buildp_ast exit" EXIT\
 	&& . ./subr/build_init.subr && build_init "${@}"; then
diff --git a/subr/ex_pkg_exec.subr b/subr/ex_pkg_exec.subr
index 0a40cfc..6fb333b 100644
--- a/subr/ex_pkg_exec.subr
+++ b/subr/ex_pkg_exec.subr
@@ -82,7 +82,7 @@ ex_pkg_exec() {
 	if exp_pkg_exec_pre "${_group_name}" "${_pkg_name}" "${_restart_at}"\
 	&& "${_dispatch_fn}" start_pkg_child "${_group_name}" "${_pkg_name}"; then
 		if rtl_test_cmd "pkg_${_pkg_name}_all"; then
-			"pkg_${_pkg_name}_all" "${_restart_at}";
+			"pkg_${_pkg_name}_all" "${_restart_at}"; _rc="${?}";
 		else	set -- ${PKG_BUILD_STEPS};
 			while [ ${#} -gt 0 ]; do
 				_step="${1}"; _step_next="${2}"; shift;
@@ -97,7 +97,10 @@ ex_pkg_exec() {
 				fi;
 			done;
 		fi;
-		ex_pkg_state_set "${_pkg_name}" finish;
+		if [ "${_rc:-0}" -eq 0 ]\
+		&& [ -z "${_restart_at}" ]; then
+			ex_pkg_state_set "${_pkg_name}" finish;
+		fi;
 	fi;
 	return "${_rc}";
 };