diff --git a/src/scripts/xt_geoip_update b/src/scripts/xt_geoip_update
index 6c0b70db0..ebd266533 100644
--- a/src/scripts/xt_geoip_update
+++ b/src/scripts/xt_geoip_update
@@ -117,27 +117,22 @@ function cleanup() {
 }
 
 function main() {
-	# Download ruleset.
-	download || exit $?
+	local func
+	for func in download install build build_legacy; do
+		if ! ${func}; then
+			# Cleanup any temporary data
+			cleanup
 
-	if ! install; then
-		# Do cleanup.
-		cleanup || exit $?
-		exit 1
-	fi
-
-	# Remove temporary files.
-	cleanup || exit $?
-
-	# Convert the ruleset.
-	build || exit $?
+			return 1
+		fi
+	done
 
-	# Convert GeoIP2 to lagacy.
-	build_legacy || exit $?
+	# Cleanup
+	cleanup || return $?
 
-	# Remove temporary files.
-	cleanup || exit $?
+	# All done
+	return 0
 }
 
 # Run the main function.
-main
+main || exit $?
