diff --git a/bin/update-metadata b/bin/update-metadata
index 1f1506485b02707494992c422b9dffbb68218050..a14d0c8266e73d56fb78855f97d8f02d294026c7 100755
--- a/bin/update-metadata
+++ b/bin/update-metadata
@@ -11,7 +11,7 @@ use English qw(-no_match_vars);
 use File::Temp;
 use Getopt::Long qw(:config auto_help);
 use List::MoreUtils qw(uniq);
-use LWP::UserAgent;
+use Mojo::UserAgent;
 use Pod::Usage;
 
 use AccountManager::DB;
@@ -55,7 +55,9 @@ AccountManager::DB->register_db(
 
 my $db = AccountManager::DB->new();
 
-my $ua = LWP::UserAgent->new();
+my $ua = Mojo::UserAgent->new(
+    max_redirect => 3
+);
 
 $db->begin_work();
 
@@ -70,12 +72,15 @@ foreach my $id (keys %{$configuration->{federations}}) {
     my $file = File::Temp->new();
     my $url = $configuration->{federations}->{$id};
     print "downloading metadata from url $url\n" if $options{verbose};
-    my $response = $ua->get($url, ':content_file' => $file->filename());
-    if (!$response->is_success()) {
+    my $result = $ua->get($url)->result();
+
+    if (!$result->is_success()) {
         $db->rollback();
-        die "failed to download federation metadata: " . $response->status_line();
+        die "failed to download federation metadata: " . $result->status_line();
     }
 
+    $result->save_to($file->filename());
+
     my $metadata;
     eval {
         $metadata = AccountManager::Metadata->new(