diff --git a/scripts/feeds b/scripts/feeds
index 6e30b5a20f03da902a9fa54bebec6ce5e55e96f9..a1795e1639a199f2999d2933a714e1fe914712e9 100755
--- a/scripts/feeds
+++ b/scripts/feeds
@@ -366,16 +366,14 @@ sub do_install_package($$) {
 	return 0;
 }
 
-my %feed;
-
 sub lookup_package($$) {
 	my $feed = shift;
 	my $package = shift;
 
 	foreach my $feed ($feed, @feeds) {
 		next unless $feed->[1];
-		next unless $feed{$feed->[1]};
-		$feed{$feed->[1]}->{$package} and return $feed;
+		next unless $feed_cache{$feed->[1]};
+		$feed_cache{$feed->[1]}->[0]->{$package} and return $feed;
 	}
 	return;
 }
@@ -404,9 +402,9 @@ sub install_package {
 	};
 
 	# switch to the metadata for the selected feed
-	get_feed($feed->[1]);
+	my $cur = get_feed($feed->[1]);
 
-	my $pkg = $feed{$feed->[1]}->{$name} or return 1;
+	my $pkg = $cur->{$name} or return 1;
 	$pkg->{name} or do {
 		$installed{$name} and return 0;
 		# TODO: check if this is an alias package, maybe it's known by another name
@@ -488,8 +486,8 @@ sub install {
 	get_installed();
 
 	foreach my $f (@feeds) {
-		# index all feeds
-		$feed{$f->[1]} = get_feed($f->[1]);
+		# fetch all feeds
+		get_feed($f->[1]);
 
 		# look up the preferred feed
 		$opts{p} and $f->[1] eq $opts{p} and $feed = $f;