diff --git a/module/VuFind/src/VuFind/Auth/ChoiceAuth.php b/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
index 23623abf2d4b8d1a2e7146e026367787b0012b5e..83c1c20efa7b8a8f89093b9353e59a2f47a1526e 100644
--- a/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
+++ b/module/VuFind/src/VuFind/Auth/ChoiceAuth.php
@@ -45,18 +45,18 @@ use VuFind\Exception\Auth as AuthException;
 class ChoiceAuth extends AbstractBase
 {
     /**
-     * Authentication methods to present
+     * Authentication strategies to present
      *
      * @var array
      */
-    protected $methods = array();
+    protected $strategies = array();
 
     /** 
-     * Auth method selected by user
+     * Auth strategy selected by user
      *
      * @var string
      */
-    protected $method;
+    protected $strategy;
 
     /**
      * Username input
@@ -86,6 +86,9 @@ class ChoiceAuth extends AbstractBase
      */
     protected $session;
 
+    /**
+     * Constructor
+     */
     public function __construct() 
     {
         $this->session = new \Zend\Session\Container('ChoiceAuth');
@@ -123,7 +126,7 @@ class ChoiceAuth extends AbstractBase
     public function setConfig($config)
     {
         parent::setConfig($config);
-        $this->methods = array_map(
+        $this->strategies = array_map(
             'trim', explode(',', $config->ChoiceAuth->choice_order)
         );
     }
@@ -141,12 +144,11 @@ class ChoiceAuth extends AbstractBase
     {
         $this->username = trim($request->getPost()->get('username'));
         $this->password = trim($request->getPost()->get('password'));
-        $this->method = trim($request->getPost()->get('auth_method'));
+        $this->strategy = trim($request->getPost()->get('auth_method'));
 
-        if ($this->method == '')
-        {
+        if ($this->strategy == '') {
             if (isset($this->session->auth_method)) {
-                $this->method = $this->session->auth_method;
+                $this->strategy = $this->session->auth_method;
             } else {
                 throw new AuthException('authentication_error_technical');
             }
@@ -168,13 +170,10 @@ class ChoiceAuth extends AbstractBase
      */
     protected function authUser($request)
     {
-        $manager = $this->getPluginManager();
-        $authenticator = $manager->get($this->method);
-        $authenticator->setConfig($this->getConfig());
         try {
-            $user = $authenticator->authenticate($request);
+            $user = $this->proxyAuthMethod('authenticate', func_get_args());
             if ($user) {
-                $this->session->auth_method = $this->method;
+                $this->session->auth_method = $this->strategy;
             }
         } catch (AuthException $exception) {
             throw $exception;
@@ -187,7 +186,6 @@ class ChoiceAuth extends AbstractBase
         }
     }
 
-
     /**
      * Set the manager for loading other authentication plugins.
      *
@@ -215,16 +213,16 @@ class ChoiceAuth extends AbstractBase
     }
 
     /**
-     * Does the class allow for authentication from more than one method?
-     * If so return an array that lists the classes for the methods allowed.
+     * Does the class allow for authentication from more than one strategy?
+     * If so return an array that lists the classes for the strategies allowed.
      *
      * @return array | bool
      */
     public function getClasses()
     {
         $classes = array();
-        foreach ($this->methods as $method) {
-            $classes[] = get_class($this->manager->get($method));
+        foreach ($this->strategies as $strategy) {
+            $classes[] = get_class($this->manager->get($strategy));
         }
         return $classes;
     }
@@ -239,8 +237,11 @@ class ChoiceAuth extends AbstractBase
     public function logout($url)
     {
         // clear user's login choice
-        unset($this->session->auth_method);
-        // TODO: proxy logout
+        if (isset($this->session->auth_method)) {
+            $this->strategy = $this->session->auth_method;
+            unset($this->session->auth_method);
+            return $this->proxyAuthMethod('logout', func_get_args());
+        }
         // No special cleanup or URL modification needed by default.
         return $url;
     }
@@ -249,22 +250,40 @@ class ChoiceAuth extends AbstractBase
      * Get the URL to establish a session (needed when the internal VuFind login
      * form is inadequate).  Returns false when no session initiator is needed.
      *
-     * @param string $target Full URL where external authentication method should
+     * @param string $target Full URL where external authentication strategy should
      * send user after login (some drivers may override this).
      *
      * @return bool|string
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function getSessionInitiator($target)
     {
         if (isset($this->session->auth_method)) {
             // if user has chosen and logged in; use that auth's method
-            $manager = $this->getPluginManager();
-            $authenticator = $manager->get($this->session->auth_method);
-            $authenticator->setConfig($this->getConfig());
-            return $authenticator->getSessionInitiator($target);
+            $this->strategy = $this->session->auth_method;
+            return $this->proxyAuthMethod('getSessionInitiator', func_get_args());
         }
         return false;
     }
 
+    /**
+     * Proxy auth method; a helper function to be called like:
+     *   return $this->proxyAuthMethod(METHOD, func_get_args());
+     *
+     * @param string $method the method to proxy
+     * @param array  $params array of params to pass
+     *
+     * @throws AuthException
+     * @return mixed
+     */
+    protected function proxyAuthMethod($method, $params)
+    {
+        $manager = $this->getPluginManager();
+        $authenticator = $manager->get($this->strategy);
+        $authenticator->setConfig($this->getConfig());
+        if (!is_callable(array($authenticator, $method))) {
+            throw new AuthException($this->strategy . "has no method $method");
+        }
+        return call_user_func_array(array($authenticator, $method), $params);
+    }
+
 }