diff --git a/config/vufind/config.ini b/config/vufind/config.ini
index d694a3c77f8c10e5b5cdf67752aaeb8c5f201967..c86c0aaa49c727d6ea744f2b1f8d95513233e3e2 100644
--- a/config/vufind/config.ini
+++ b/config/vufind/config.ini
@@ -165,6 +165,7 @@ method         = Database
 ;method         = SIP2
 ;method         = CAS
 ;method         = MultiAuth
+;method         = ChoiceAuth
 
 ; This setting only applies when method is set to ILS.  It determines which
 ; field of the ILS driver's patronLogin() return array is used as the username
@@ -194,6 +195,18 @@ ils_encryption_key = false
 ;method_order   = ILS,LDAP
 ;filters = "username:trim,password:trim"
 
+; Present two auth options on the login screen. Each choice given must also be
+; configured in its relevent section. (The code should allow for more than 2 
+; choices, but styling would need to be expanded / modified)
+;
+; WARNING! This module does not account for the possibility that the auth 
+; choices you present may return different usernames. You would want a user to
+; be able to log in via any method and see the same account. To make sure that
+; is the case, you should ensure that the usernames given by the authentication
+; methods themselves are the same for any given user.
+;[ChoiceAuth]
+;choice_order = Shibboleth,Database
+
 ; This section will allow you to control whether VuFind should record usage
 ; statistics.
 [Statistics]
diff --git a/module/VuFind/src/VuFind/Auth/AbstractBase.php b/module/VuFind/src/VuFind/Auth/AbstractBase.php
index 125ff8c2d4fc0dccf0e21b0a2d9844e4ae45a59f..464452378e581004c9c06afa883406491a0f966b 100644
--- a/module/VuFind/src/VuFind/Auth/AbstractBase.php
+++ b/module/VuFind/src/VuFind/Auth/AbstractBase.php
@@ -184,6 +184,17 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface
         return false;
     }
 
+    /**
+     * Does the class allow for authentication from more than one auth method?
+     * If so return an array that lists the classes for the methods allowed.
+     *
+     * @return array | bool
+     */
+    public function getClasses()
+    {
+        return false;
+    }
+
     /**
      * Get access to the user table.
      *
@@ -219,4 +230,4 @@ abstract class AbstractBase implements \VuFind\Db\Table\DbTableAwareInterface
     {
         $this->tableManager = $manager;
     }
-}
\ No newline at end of file
+}
diff --git a/module/VuFind/src/VuFind/Auth/CAS.php b/module/VuFind/src/VuFind/Auth/CAS.php
index 18f5ddb1a83b556755b80cb5760700a01a1ac9dc..07f0de56d44f672f54734e4ba1f71825ff5cecd1 100644
--- a/module/VuFind/src/VuFind/Auth/CAS.php
+++ b/module/VuFind/src/VuFind/Auth/CAS.php
@@ -178,8 +178,10 @@ class CAS extends AbstractBase
         } else {
             $casTarget = $target;
         }
+        $append = (preg_match('\?', $casTarget)) ? '&' : '?';
         $sessionInitiator = $config->CAS->login
-            . '?service=' . urlencode($casTarget);
+            . '?service=' . urlencode($casTarget)
+            . urlencode($append . 'auth_method=CAS'); 
 
         return $sessionInitiator;
     }
diff --git a/module/VuFind/src/VuFind/Auth/ChoiceAuth.php b/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
new file mode 100644
index 0000000000000000000000000000000000000000..6c7af73027defe59f64ba29702c79dc7a8b7068c
--- /dev/null
+++ b/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
@@ -0,0 +1,211 @@
+<?php
+/**
+ * MultiAuth Authentication plugin
+ *
+ * PHP version 5
+ *
+ * Copyright (C) Villanova University 2010.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * @category VuFind2
+ * @package  Authentication
+ * @author   Anna Headley <vufind-tech@lists.sourceforge.net>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:authentication_handlers Wiki
+ */
+namespace VuFind\Auth;
+use VuFind\Exception\Auth as AuthException;
+
+/**
+ * ChoiceAuth Authentication plugin
+ *
+ * This module enables a user to choose between two authentication methods. 
+ * choices are presented side-by-side and one is manually selected.
+ *
+ * See config.ini for more details
+ *
+ * @category VuFind2
+ * @package  Authentication
+ * @author   Anna Headley <vufind-tech@lists.sourceforge.net>
+ * @license  http://opensource.org/licenses/gpl-2.0.php GNU General Public License
+ * @link     http://vufind.org/wiki/vufind2:authentication_handlers Wiki
+ */
+class ChoiceAuth extends AbstractBase
+{
+    /**
+     * Authentication methods to present
+     *
+     * @var array
+     */
+    protected $methods = array();
+
+    /** 
+     * Auth method selected by user
+     *
+     * @var string
+     */
+    protected $method;
+
+    /**
+     * Username input
+     *
+     * @var string
+     */
+    protected $username;
+
+    /**
+     * Password input
+     *
+     * @var string
+     */
+    protected $password;
+
+    /**
+     * Plugin manager for obtaining other authentication objects
+     *
+     * @var PluginManager
+     */
+    protected $manager;
+
+    /**
+     * Validate configuration parameters.  This is a support method for getConfig(),
+     * so the configuration MUST be accessed using $this->config; do not call
+     * $this->getConfig() from within this method!
+     *
+     * @throws AuthException
+     * @return void
+     */
+    protected function validateConfig()
+    {
+        if (!isset($this->config->ChoiceAuth)
+            || !isset($this->config->ChoiceAuth->choice_order)
+            || !strlen($this->config->ChoiceAuth->choice_order)
+        ) {
+            throw new AuthException(
+                "One or more ChoiceAuth parameters are missing. " .
+                "Check your config.ini!"
+            );
+        }
+    }
+
+    /**
+     * Set configuration; throw an exception if it is invalid.
+     *
+     * @param \Zend\Config\Config $config Configuration to set
+     *
+     * @throws AuthException
+     * @return void
+     */
+    public function setConfig($config)
+    {
+        parent::setConfig($config);
+        $this->methods = array_map(
+            'trim', explode(',', $config->ChoiceAuth->choice_order)
+        );
+    }
+
+    /**
+     * Attempt to authenticate the current user.  Throws exception if login fails.
+     *
+     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * account credentials.
+     *
+     * @throws AuthException
+     * @return \VuFind\Db\Row\User Object representing logged-in user.
+     */
+    public function authenticate($request) 
+    {
+        $this->username = trim($request->getPost()->get('username'));
+        $this->password = trim($request->getPost()->get('password'));
+        $this->method = trim($request->getPost()->get('auth_method'));
+
+        if ($this->method == '') {
+            throw new AuthException('authentication_error_technical');
+        }
+
+        // Do the actual authentication work:
+        return $this->authUser($request);
+    }
+
+    /**
+     * Do the actual work of authenticating the user (supports 
+     * authenticate()).
+     *
+     * @param \Zend\Http\PhpEnvironment\Request $request Request object containing
+     * account credentials.
+     *
+     * @throws AuthException
+     * @return \VuFind\Db\Row\User Object representing logged-in user.
+     */
+    protected function authUser($request)
+    {
+        $manager = $this->getPluginManager();
+        $authenticator = $manager->get($this->method);
+        $authenticator->setConfig($this->getConfig());
+        try {
+            $user = $authenticator->authenticate($request);
+        } catch (AuthException $exception) {
+            throw $exception;
+        }
+
+        if (isset($user)) {
+            return $user;
+        } else {
+            throw new AuthException('authentication_error_technical');
+        }
+    }
+
+
+    /**
+     * Set the manager for loading other authentication plugins.
+     *
+     * @param PluginManager $manager Plugin manager
+     *
+     * @return void
+     */
+    public function setPluginManager(PluginManager $manager)
+    {
+        $this->manager = $manager;
+    }
+
+    /**
+     * Get the manager for loading other authentication plugins.
+     *
+     * @throws \Exception
+     * @return PluginManager
+     */
+    public function getPluginManager()
+    {
+        if (null === $this->manager) {
+            throw new \Exception('Plugin manager missing.');
+        }
+        return $this->manager;
+    }
+
+    /**
+     * Does the class allow for authentication from more than one method?
+     * If so return an array that lists the classes for the methods allowed.
+     *
+     * @return array | bool
+     */
+    public function getClasses()
+    {
+        $classes = array();
+        foreach ($this->methods as $method) {
+            $classes[] = get_class($this->manager->get($method));
+        }
+        return $classes;
+    }
+}
diff --git a/module/VuFind/src/VuFind/Auth/Manager.php b/module/VuFind/src/VuFind/Auth/Manager.php
index f0a52a925978a2a3b368e89b232648405402a1d4..4c8822951b25e9f248fff053f7e05383976b414b 100644
--- a/module/VuFind/src/VuFind/Auth/Manager.php
+++ b/module/VuFind/src/VuFind/Auth/Manager.php
@@ -48,6 +48,20 @@ class Manager implements ServiceLocatorAwareInterface
      */
     protected $auth = false;
 
+    /**
+     * Authentication module currently proxied (false if uninitialized)
+     *
+     * @var \VuFind\Auth\AbstractBase|bool
+     */
+    protected $authProxied = false;
+
+    /**
+     * Authentication module to proxy (false if uninitialized)
+     *
+     * @var string|bool
+     */
+    protected $authToProxy = false;
+
     /**
      * VuFind configuration
      *
@@ -111,21 +125,47 @@ class Manager implements ServiceLocatorAwareInterface
      */
     protected function getAuth()
     {
-        if (!$this->auth) {
-            $manager = $this->getServiceLocator()->get('VuFind\AuthPluginManager');
-            $this->auth = $manager->get($this->config->Authentication->method);
-            $this->auth->setConfig($this->config);
+        if ($this->authToProxy == false) {
+            if (!$this->auth) {
+                $this->auth = $this->makeAuth($this->config->Authentication->method);
+            }
+            return $this->auth;
+        } else {
+            if (!$this->authProxied) {
+                $this->authProxied = $this->makeAuth($this->authToProxy);
+            }
+            return $this->authProxied;
         }
-        return $this->auth;
+    }
+
+    /** 
+     * Helper
+     *
+     * @param string $method auth method to instantiate
+     *
+     * @return AbstractBase
+     */
+    protected function makeAuth($method) 
+    {
+        $manager = $this->getServiceLocator()->get('VuFind\AuthPluginManager');
+        $auth = $manager->get($method);
+        $auth->setConfig($this->config);
+        return $auth;
     }
 
     /**
      * Does the current configuration support account creation?
      *
+     *@param string $authMethod optional; check this auth method rather than 
+     *  the one in config file
+     *
      * @return bool
      */
-    public function supportsCreation()
+    public function supportsCreation($authMethod=null)
     {
+        if ($authMethod != null) {
+            $this->setActiveAuthClass($authMethod);
+        }
         return $this->getAuth()->supportsCreation();
     }
 
@@ -153,6 +193,35 @@ class Manager implements ServiceLocatorAwareInterface
         return get_class($this->getAuth());
     }
 
+    /**
+     * Does the current auth class allow for authentication from more than 
+     * one auth method? (e.g. choiceauth)
+     * If so return an array that lists the classes for the methods allowed.
+     *
+     * @return array
+     */
+    public function getAuthClasses()
+    {
+        $classes = $this->getAuth()->getClasses();
+        if ($classes) {
+            return $classes;
+        } else {
+            return array($this->getAuthClass());
+        }
+    }
+
+    /**
+     * Get the name of the current authentication method.
+     *
+     * @return string
+     */
+    public function getAuthMethod()
+    {
+        $className = $this->getAuthClass();
+        $classParts = explode('\\', $className);
+        return array_pop($classParts);
+    }
+
     /**
      * Is login currently allowed?
      *
@@ -418,4 +487,16 @@ class Manager implements ServiceLocatorAwareInterface
     {
         return $this->serviceLocator;
     }
-}
\ No newline at end of file
+
+    /**
+     * Setter
+     *
+     * @param string $method The auth class to proxy
+     */
+    public function setActiveAuthClass($method) 
+    {
+        $this->authToProxy = $method;
+        $this->authProxied = false;
+    }
+
+}
diff --git a/module/VuFind/src/VuFind/Auth/Shibboleth.php b/module/VuFind/src/VuFind/Auth/Shibboleth.php
index 3e4605774b399b836aae03883aeb7b9196eac02d..aed75d5bbb25abb9ee1517ca100fcad0dccc7dcc 100644
--- a/module/VuFind/src/VuFind/Auth/Shibboleth.php
+++ b/module/VuFind/src/VuFind/Auth/Shibboleth.php
@@ -141,8 +141,14 @@ class Shibboleth extends AbstractBase
         } else {
             $shibTarget = $target;
         }
+        $append = (preg_match('\?', $shibTarget)) ? '&' : '?';
         $sessionInitiator = $config->Shibboleth->login
-            . '?target=' . urlencode($shibTarget);
+            . '?target=' . urlencode($shibTarget)
+            . urlencode($append . 'auth_method=Shibboleth'); 
+                                                    // makes it possible to 
+                                                    // handle logins when using
+                                                    // an auth method that 
+                                                    // proxies others
 
         if (isset($config->Shibboleth->provider_id)) {
             $sessionInitiator = $sessionInitiator . '&providerId=' .
@@ -224,4 +230,4 @@ class Shibboleth extends AbstractBase
 
         return $sortedUserAttributes;
     }
-}
\ No newline at end of file
+}
diff --git a/module/VuFind/src/VuFind/Controller/MyResearchController.php b/module/VuFind/src/VuFind/Controller/MyResearchController.php
index de9704354e286b93099e91720485af5955be8ca5..7b3d24ae04ecc5b34efeccae8f312f7722d57692 100644
--- a/module/VuFind/src/VuFind/Controller/MyResearchController.php
+++ b/module/VuFind/src/VuFind/Controller/MyResearchController.php
@@ -112,10 +112,18 @@ class MyResearchController extends AbstractBase
      */
     public function homeAction()
     {
+        // if the current auth class proxies others, we'll get the proxied
+        //   auth method as a querystring or post parameter.
+        //   Force to post.
+        $method = trim($this->params()->fromQuery('auth_method'));
+        if ($method) {
+            $this->getRequest()->setPost($this->getRequest()->getPost()->set('auth_method', $method));
+        }
         // Process login request, if necessary (either because a form has been
         // submitted or because we're using an external login provider):
         if ($this->params()->fromPost('processLogin')
             || $this->getSessionInitiator()
+            || $this->params()->fromPost('auth_method')
         ) {
             try {
                 $this->getAuthManager()->login($this->getRequest());
@@ -152,9 +160,12 @@ class MyResearchController extends AbstractBase
      */
     public function accountAction()
     {
+        // if the current auth class proxies others, we'll get the proxied
+        //   auth method as a querystring parameter.
+        $method = trim($this->params()->fromQuery('auth_method'));
         // If authentication mechanism does not support account creation, send
         // the user away!
-        if (!$this->getAuthManager()->supportsCreation()) {
+        if (!$this->getAuthManager()->supportsCreation($method)) {
             return $this->forwardTo('MyResearch', 'Home');
         }
 
@@ -230,6 +241,9 @@ class MyResearchController extends AbstractBase
             $logoutTarget = $this->getServerUrl('home');
         }
 
+        // clear querystring parameters
+        $logoutTarget = preg_replace('/\?.*/', '', $logoutTarget);
+
         return $this->redirect()
             ->toUrl($this->getAuthManager()->logout($logoutTarget));
     }
diff --git a/module/VuFind/src/VuFind/View/Helper/Root/Auth.php b/module/VuFind/src/VuFind/View/Helper/Root/Auth.php
index ff3e397aa1445aaf8d7644f4bdaacf8b320993c1..547b3859ca491967542ff38115fcb6ed3864a697 100644
--- a/module/VuFind/src/VuFind/View/Helper/Root/Auth.php
+++ b/module/VuFind/src/VuFind/View/Helper/Root/Auth.php
@@ -39,6 +39,13 @@ use Zend\View\Exception\RuntimeException;
  */
 class Auth extends \Zend\View\Helper\AbstractHelper
 {
+    /**
+     * Active auth class (used for auth methods that allow more than one type of authentication)
+     *
+     * @var string
+     */
+    protected $activeAuthClass;
+
     /**
      * Authentication manager
      *
@@ -54,6 +61,7 @@ class Auth extends \Zend\View\Helper\AbstractHelper
     public function __construct(\VuFind\Auth\Manager $manager)
     {
         $this->manager = $manager;
+        $this->activeAuthClass = null;
     }
 
     /**
@@ -73,12 +81,11 @@ class Auth extends \Zend\View\Helper\AbstractHelper
         // Get the current auth module's class name, then start a loop
         // in case we need to use a parent class' name to find the appropriate
         // template.
-        $className = $this->getManager()->getAuthClass();
+        $className = $this->getActiveAuthClass();
         $topClassName = $className; // for error message
         while (true) {
             // Guess the template name for the current class:
-            $classParts = explode('\\', $className);
-            $template = 'Auth/' . array_pop($classParts) . '/' . $name;
+            $template = 'Auth/' . $this->getBriefClass($className) . '/' . $name;
             try {
                 // Try to render the template....
                 $html = $this->getView()->render($template);
@@ -140,7 +147,80 @@ class Auth extends \Zend\View\Helper\AbstractHelper
      * @return string
      */
     public function getLoginFields($context = array())
+    {
+        return $this->renderTemplate('loginfields.phtml', $context);
+    }
+
+    /**
+     * Render the login template.
+     *
+     * @param array $context Context for rendering template
+     *
+     * @return string
+     */
+    public function getLogin($context = array())
     {
         return $this->renderTemplate('login.phtml', $context);
     }
-}
\ No newline at end of file
+
+    /**
+     * Render the login description template.
+     *
+     * @param array $context Context for rendering template
+     *
+     * @return string
+     */
+    public function getLoginDesc($context = array())
+    {
+        return $this->renderTemplate('logindesc.phtml', $context);
+    }
+
+    /**
+     * Setter
+     *
+     * @param string $classname Class to use in rendering
+     */
+    public function setActiveAuthClass($classname) {
+        $this->activeAuthClass = $classname;
+        $this->getManager()->setActiveAuthClass($this->getBriefClass($classname));
+    }
+
+    /**
+     * Accessor for the full class name
+     *
+     * @return string
+     */
+    protected function getActiveAuthClass()
+    {
+        if ($this->activeAuthClass == null) {
+            return $this->getManager()->getAuthClass();
+        }
+        return $this->activeAuthClass;
+    }
+
+    /**
+     * Accessor for just the last part of the class name
+     *
+     * @return string
+     */
+    public function getActiveAuthMethod()
+    {
+        if ($this->activeAuthClass == null) {
+            return $this->getManager()->getAuthClass();
+        }
+        return $this->getBriefClass($this->activeAuthClass);
+    }
+
+    /**
+     * Helper to grab the end of the class name
+     *
+     * @param string $className
+     *
+     * @return string
+     */
+    protected function getBriefClass($className) 
+    {
+        $classParts = explode('\\', $className);
+        return array_pop($classParts);
+    }
+}
diff --git a/themes/blueprint/css/styles.css b/themes/blueprint/css/styles.css
index 39e789411110b66ff86c17fef5d3cfbe201cc690..6545163e2fa2d3a2b32372fdea4ed7b1e740d612 100644
--- a/themes/blueprint/css/styles.css
+++ b/themes/blueprint/css/styles.css
@@ -1,7 +1,6 @@
 @CHARSET "UTF-8";
 
 /** General ***/
-
 body {
     margin: 1.5em 0;
     /*background:url("../images/bg_body.jpg") no-repeat scroll center top;*/
@@ -2250,4 +2249,26 @@ div.handle {
 .combinedResult .more_link {
     text-align: center;
     border-top: 1px solid #eee;
-}
\ No newline at end of file
+}
+
+
+.authmethod0 {
+  width:47%;
+  float:left;
+  padding:1%;
+  border-right:1px solid rgb(204, 204, 204);
+}
+
+.authmethod1 {
+  width:47%;
+  float:left;
+  padding:1%;
+  border-left:1px solid rgb(204, 204, 204);
+  margin:-1px; /* keep the borders on top of one another; longest one will win */
+}
+
+#authcontainer {
+  float:left;
+  width:100%;
+}
+
diff --git a/themes/blueprint/templates/Auth/AbstractBase/login.phtml b/themes/blueprint/templates/Auth/AbstractBase/login.phtml
index 44a178d3b437d9f83454589964e20d6bde914e74..de95c83fbaf1f6fc2e7d72324198a1f46b70314e 100644
--- a/themes/blueprint/templates/Auth/AbstractBase/login.phtml
+++ b/themes/blueprint/templates/Auth/AbstractBase/login.phtml
@@ -1,6 +1,20 @@
-<label class="span-2" for="login_username"><?=$this->transEsc('Username')?>:</label>
-<input id="login_username" type="text" name="username" value="<?=$this->escapeHtml($this->request->get('username'))?>" size="15" class="mainFocus <?=$this->jqueryValidation(array('required'=>'This field is required'))?>"/>
-<br class="clear"/>
-<label class="span-2" for="login_password"><?=$this->transEsc('Password')?>:</label>
-<input id="login_password" type="password" name="password" size="15" class="<?=$this->jqueryValidation(array('required'=>'This field is required'))?>"/>
-<br class="clear"/>
\ No newline at end of file
+  <? $account = $this->auth()->getManager(); ?>
+  <? $sessionInitiator = $account->getSessionInitiator($this->serverUrl($this->url('myresearch-home'))); ?>
+  <? if (!$sessionInitiator): // display default login form if no login URL provided ?>
+    <form method="post" action="<?=$this->url('myresearch-home')?>" name="loginForm" id="loginForm">
+      <?=$this->auth()->getLoginFields()?>
+      <input type="hidden" name="auth_method" value="<?=$this->auth()->getActiveAuthMethod()?>">
+      <input class="push-2 button" type="submit" name="processLogin" value="<?=$this->transEsc('Login')?>"/>
+      <div class="clear"></div>
+    </form>
+    <?
+      // Set up form validation:
+      $initJs = '$(document).ready(function() { $(\'#loginForm\').validate(); });';
+      echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $initJs, 'SET');
+    ?>
+    <? if ($account->supportsCreation()): ?>
+      <a class="new_account" href="<?=$this->url('myresearch-account')?>?auth_method=<?=$this->auth()->getActiveAuthMethod()?>"><?=$this->transEsc('Create New Account')?></a>
+    <? endif; ?>
+  <? else: ?>
+    <a href="<?=$this->escapeHtml($sessionInitiator)?>"><?=$this->transEsc("Institutional Login")?></a>
+  <? endif; ?>
diff --git a/themes/blueprint/templates/Auth/AbstractBase/loginfields.phtml b/themes/blueprint/templates/Auth/AbstractBase/loginfields.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..707a379f5e475b4a61c1d1a44eccf13753ff5a06
--- /dev/null
+++ b/themes/blueprint/templates/Auth/AbstractBase/loginfields.phtml
@@ -0,0 +1,6 @@
+<label class="span-2" for="login_username"><?=$this->transEsc('Username')?>:</label>
+<input id="login_username" type="text" name="username" value="<?=$this->escapeHtml($this->request->get('username'))?>" size="15" class="mainFocus <?=$this->jqueryValidation(array('required'=>'This field is required'))?>"/>
+<br class="clear"/>
+<label class="span-2" for="login_password"><?=$this->transEsc('Password')?>:</label>
+<input id="login_password" type="password" name="password" size="15" class="<?=$this->jqueryValidation(array('required'=>'This field is required'))?>"/>
+<br class="clear"/>
diff --git a/themes/blueprint/templates/Auth/ChoiceAuth/login.phtml b/themes/blueprint/templates/Auth/ChoiceAuth/login.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..077a548164d544743634dc95e1bfe6d3e05fac88
--- /dev/null
+++ b/themes/blueprint/templates/Auth/ChoiceAuth/login.phtml
@@ -0,0 +1,13 @@
+<p>Please choose a login method:</p>
+<div id="authcontainer">
+<? foreach ($this->auth()->getManager()->getAuthClasses() as $loop=>$class):?>
+  <div class="authmethod<?=$loop?>">
+    <? $this->auth()->setActiveAuthClass($class) ?>
+    <?=$this->auth()->getLoginDesc($method) ?>
+    <?=$this->auth()->getLogin($method) ?>
+    <? $this->auth()->setActiveAuthClass('ChoiceAuth') ?>
+  </div>
+<? endforeach ?>
+</div>
+<div class="clearer"></div>
+
diff --git a/themes/blueprint/templates/Auth/Database/logindesc.phtml b/themes/blueprint/templates/Auth/Database/logindesc.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..edb066d19678e6eb76adac37edda5c182b1df471
--- /dev/null
+++ b/themes/blueprint/templates/Auth/Database/logindesc.phtml
@@ -0,0 +1,2 @@
+<h3>Local login</h3>
+<p>Enter the username and password you created for this site.</p>
diff --git a/themes/blueprint/templates/Auth/Shibboleth/login.phtml b/themes/blueprint/templates/Auth/Shibboleth/login.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..94f44ef3d93574b3e3bcc672e4abbf1042b762f4
--- /dev/null
+++ b/themes/blueprint/templates/Auth/Shibboleth/login.phtml
@@ -0,0 +1,3 @@
+<? $account = $this->auth()->getManager(); ?>
+<? $sessionInitiator = $account->getSessionInitiator($this->serverUrl($this->url('myresearch-home'))); ?>
+<a href="<?=$this->escapeHtml($sessionInitiator)?>"><?=$this->transEsc("Institutional Login")?></a>
diff --git a/themes/blueprint/templates/Auth/Shibboleth/logindesc.phtml b/themes/blueprint/templates/Auth/Shibboleth/logindesc.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..6f36b6298d3e69da457844fe9ab2242954c61829
--- /dev/null
+++ b/themes/blueprint/templates/Auth/Shibboleth/logindesc.phtml
@@ -0,0 +1,2 @@
+<h3>Institutional login</h3>
+<p>Enter your campus-wide username and password.</p>
diff --git a/themes/blueprint/templates/myresearch/login.phtml b/themes/blueprint/templates/myresearch/login.phtml
index 2d48e8b4746a377001a8c295af0adec6aad53794..c3a72bc034f8105a1dd4034a3456ab316193f928 100644
--- a/themes/blueprint/templates/myresearch/login.phtml
+++ b/themes/blueprint/templates/myresearch/login.phtml
@@ -34,22 +34,5 @@
 <? if ($hideLogin): ?>
   <div class="error"><?=$this->transEsc('login_disabled')?></div>
 <? else: ?>
-  <? $sessionInitiator = $account->getSessionInitiator($this->serverUrl($this->url('myresearch-home'))); ?>
-  <? if (!$sessionInitiator): // display default login form if no login URL provided ?>
-    <form method="post" action="<?=$this->url('myresearch-home')?>" name="loginForm" id="loginForm">
-      <?=$this->auth()->getLoginFields()?>
-      <input class="push-2 button" type="submit" name="processLogin" value="<?=$this->transEsc('Login')?>"/>
-      <div class="clear"></div>
-    </form>
-    <?
-      // Set up form validation:
-      $initJs = '$(document).ready(function() { $(\'#loginForm\').validate(); });';
-      echo $this->inlineScript(\Zend\View\Helper\HeadScript::SCRIPT, $initJs, 'SET');
-    ?>
-    <? if ($account->supportsCreation()): ?>
-      <a class="new_account" href="<?=$this->url('myresearch-account')?>"><?=$this->transEsc('Create New Account')?></a>
-    <? endif; ?>
-  <? else: ?>
-    <a href="<?=$this->escapeHtml($sessionInitiator)?>"><?=$this->transEsc("Institutional Login")?></a>
-  <? endif; ?>
-<? endif; ?>
\ No newline at end of file
+  <?=$this->auth()->getLogin()?>
+<? endif; ?>