diff --git a/src/main/java/com/googlesource/gerrit/plugins/cfoauth/CFOAuthService.java b/src/main/java/com/googlesource/gerrit/plugins/cfoauth/CFOAuthService.java
index d754307..9647f1d 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cfoauth/CFOAuthService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cfoauth/CFOAuthService.java
@@ -78,10 +78,7 @@
     if (token == null) {
       throw new UAAClientException("Must provide an access token");
     }
-    AccessToken accessToken = uaaClient.toAccessToken(token.getToken());
-    UserInfo userInfo = accessToken.getUserInfo();
-    userInfo.setDisplayName(uaaClient.getDisplayName(token.getToken()));
-    return getAsOAuthUserInfo(userInfo);
+    return getAsOAuthUserInfo(uaaClient.toAccessToken(token.getToken()));
   }
 
   @Override
@@ -113,10 +110,7 @@
           // token; if that succeeds the user is authenticated
           accessToken = uaaClient.getAccessToken(username, secret);
         }
-        UserInfo userInfo = accessToken.getUserInfo();
-        userInfo.setDisplayName(
-            uaaClient.getDisplayName(accessToken.getValue()));
-        return getAsOAuthUserInfo(userInfo);
+        return getAsOAuthUserInfo(accessToken);
       }
     } catch (UAAClientException e) {
       throw new IOException("Authentication error", e);
@@ -138,7 +132,10 @@
         accessToken.getExpiresAt() * 1000, providerId);
   }
 
-  private static OAuthUserInfo getAsOAuthUserInfo(UserInfo userInfo) {
+  private OAuthUserInfo getAsOAuthUserInfo(AccessToken accessToken) {
+    UserInfo userInfo = accessToken.getUserInfo();
+    userInfo.setDisplayName(
+        uaaClient.getDisplayName(accessToken.getValue()));
     return new OAuthUserInfo(userInfo.getExternalId(),
         userInfo.getUserName(), userInfo.getEmailAddress(),
         userInfo.getDisplayName(), null);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/cfoauth/InitOAuthConfig.java b/src/main/java/com/googlesource/gerrit/plugins/cfoauth/InitOAuthConfig.java
index c532357..c2c54ff 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/cfoauth/InitOAuthConfig.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/cfoauth/InitOAuthConfig.java
@@ -36,6 +36,7 @@
   private final InitFlags flags;
   private final ConsoleUI ui;
   private final Section cfg;
+  private final String redirectUrl;
 
   @Inject
   InitOAuthConfig(InitFlags flags, ConsoleUI ui,
@@ -44,6 +45,7 @@
     this.flags = flags;
     this.ui = ui;
     this.cfg = sections.get(PLUGIN_SECTION, pluginName);
+    this.redirectUrl = getRedirectUrl(sections);
   }
 
   @Override
@@ -60,7 +62,13 @@
     cfg.set(VERIFIY_SIGNATURES, Boolean.toString(
         ui.yesno(true, "Verify token signatures", VERIFIY_SIGNATURES)));
     flags.cfg.setString("auth", null, "logouturl", CharMatcher.is('/')
-        .trimTrailingFrom(cfg.get(SERVER_URL)) + "/logout.do");
+        .trimTrailingFrom(cfg.get(SERVER_URL)) + "/logout.do?redirect="
+            + redirectUrl);
+  }
+
+  private static String getRedirectUrl(Section.Factory sections) {
+    Section gerrit = sections.get("gerrit", null);
+    return CharMatcher.is('/').trimTrailingFrom(gerrit.get("canonicalWebUrl"));
   }
 
   @Override
