diff --git a/abuild.in b/abuild.in
index 448428eba2f392a9ae30bad3710c9bc222fe8596..3878831f4b820c1f4d0a5727797f75b72948a087 100755
--- a/abuild.in
+++ b/abuild.in
@@ -453,6 +453,7 @@ create_apks() {
 		cd "$dir"
 		tar -c $(cat "$dir"/.metafiles) | abuild-tar --cut \
 			| gzip -9 > control.tar.gz
+		abuild-sign -q control.tar.gz || exit 1
 
 		# create the final apk
 		cat control.tar.gz data.tar.gz > "$PKGDEST"/$apk
@@ -466,17 +467,23 @@ apkcache() {
 	fi
 	local apk
 	mkdir -p "$apkcache" || return 1
-	set --
+	cd "$apkcache"
+
+	# remove broken links
+	for apk in *.apk; do
+		if [ -L "$apk" ] && [ ! -f "$apk" ]; then
+			rm -f "$apk"
+		fi
+	done
+
+	# create links for this package
 	for apk in $(listpkg); do
 		ln -sf "$PKGDEST"/$apk "$apkcache"/$apk
 	done
 
-	# update the apkcache cache here
 	msg "Updating the cached abuild repository index..."
-	(
 	local sign=".SIGN.RSA.${SIGN_PUBLIC_KEY##*/}"
 	local oldindex=
-	cd "$apkcache"
 	if [ -f APKINDEX.tar.gz ]; then
 		oldindex="--index APKINDEX.tar.gz"
 	fi
@@ -484,7 +491,6 @@ apkcache() {
 	msg "Signing the index..."
 	abuild-sign -q APKINDEX.tar.gz.unsigned || exit 1
 	mv APKINDEX.tar.gz.unsigned APKINDEX.tar.gz
-	)
 }
 
 # predefined splitfunc doc