diff --git a/Yesod/Auth/BrowserId.hs b/Yesod/Auth/BrowserId.hs
--- a/Yesod/Auth/BrowserId.hs
+++ b/Yesod/Auth/BrowserId.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 module Yesod.Auth.BrowserId
     ( authBrowserId
+    , authBrowserId'
     ) where
 
 import Yesod.Auth
@@ -11,6 +12,8 @@
 import Yesod.Core
 import Text.Hamlet (hamlet)
 import Control.Monad.IO.Class (liftIO)
+import qualified Data.Text as T
+import Data.Maybe (fromMaybe)
 
 #include "qq.h"
 
@@ -46,3 +49,33 @@
         <img src="https://browserid.org/i/sign_in_green.png">
 |]
     }
+
+authBrowserId' :: YesodAuth m => AuthPlugin m
+authBrowserId' = AuthPlugin
+    { apName = pid
+    , apDispatch = \m ps ->
+        case (m, ps) of
+            ("GET", [assertion]) -> do
+                tm <- getRouteToMaster
+                r <- getUrlRender
+                let audience = T.takeWhile (/= '/') $ stripScheme $ r $ tm LoginR
+                memail <- liftIO $ checkAssertion audience assertion
+                case memail of
+                    Nothing -> error "Invalid assertion"
+                    Just email -> setCreds True Creds
+                        { credsPlugin = pid
+                        , credsIdent = email
+                        , credsExtra = []
+                        }
+            (_, []) -> badMethod
+            _ -> notFound
+    , apLogin = \toMaster -> do
+        addScriptRemote browserIdJs
+        addHamlet [QQ(hamlet)|
+<p>
+    <a href="javascript:navigator.id.getVerifiedEmail(function(a){if(a)document.location='@{toMaster complete}/'+a});">
+        <img src="https://browserid.org/i/sign_in_green.png">
+|]
+    }
+  where
+    stripScheme t = fromMaybe t $ T.stripPrefix "//" $ snd $ T.breakOn "//" t
diff --git a/Yesod/Auth/Message.hs b/Yesod/Auth/Message.hs
--- a/Yesod/Auth/Message.hs
+++ b/Yesod/Auth/Message.hs
@@ -10,6 +10,8 @@
 data AuthMessage =
       NoOpenID
     | LoginOpenID
+    | LoginGoogle
+    | LoginYahoo
     | Email
     | Password
     | Register
@@ -37,6 +39,8 @@
 defaultMessage :: AuthMessage -> Text
 defaultMessage NoOpenID = "No OpenID identifier found"
 defaultMessage LoginOpenID = "Login via OpenID"
+defaultMessage LoginGoogle = "Login via Google"
+defaultMessage LoginYahoo = "Login via Yahoo"
 defaultMessage Email = "Email"
 defaultMessage Password = "Password"
 defaultMessage Register = "Register"
diff --git a/Yesod/Auth/OpenId.hs b/Yesod/Auth/OpenId.hs
--- a/Yesod/Auth/OpenId.hs
+++ b/Yesod/Auth/OpenId.hs
@@ -40,6 +40,12 @@
 |]
         [QQ(whamlet)|
 <form method="get" action="@{tm forwardUrl}">
+    <input type="hidden" name="openid_identifier" value="https://www.google.com/accounts/o8/id">
+    <button .openid-google>_{Msg.LoginGoogle}
+<form method="get" action="@{tm forwardUrl}">
+    <input type="hidden" name="openid_identifier" value="http://me.yahoo.com">
+    <button .openid-yahoo>_{Msg.LoginYahoo}
+<form method="get" action="@{tm forwardUrl}">
     <label for="#{ident}">OpenID: #
     <input id="#{ident}" type="text" name="#{name}" value="http://">
     <input type="submit" value="_{Msg.LoginOpenID}">
diff --git a/yesod-auth.cabal b/yesod-auth.cabal
--- a/yesod-auth.cabal
+++ b/yesod-auth.cabal
@@ -1,5 +1,5 @@
 name:            yesod-auth
-version:         0.7.2
+version:         0.7.3
 license:         BSD3
 license-file:    LICENSE
 author:          Michael Snoyman, Patrick Brisbin
