diff --git a/abuild.in b/abuild.in
index 62a860fa3405b700d11c3998b1fd11463e0d6e35..175c227e05375b848f6343c125b2321a208b7d23 100755
--- a/abuild.in
+++ b/abuild.in
@@ -992,7 +992,16 @@ scan_shared_objects() {
 		esac
 		list_has "$soname" $somask && continue
 		echo "$soname $sover"
-	done | sort -u > "$controldir"/.provides-so
+	# use awk to filter out dupes that has sover = 0
+	done | awk '{ if (so[$1] == 0) so[$1] = $2; }
+		END { for (i in so) print(i " " so[i]); }' \
+		| sort -u > "$controldir"/.provides-so
+
+	# verify that we dont have any duplicates
+	local dupes="$(cut -d' ' -f1 "$controldir"/.provides-so | uniq -d)"
+	if [ -n "$dupes" ]; then
+		die  "provides multiple versions of same shared object: $dupes"
+	fi
 
 	# now find the so dependencies
 	scanelf --nobanner --recursive --needed "$datadir"  | tr ' ' ':' \