diff --git a/include/Ajax.php b/include/Ajax.php
index 9beb326..49adff1 100644
--- a/include/Ajax.php
+++ b/include/Ajax.php
@@ -81,7 +81,7 @@ class Ajax extends Responder {
     private function checkout_product() {
         $user = null;
         try {
-            $user = new User($_POST['user'], 'name');
+            $user = $this->user_init($_POST['user'], null);
         } catch(Exception $e) {
             return new Failure(i18n('Invalid user ID.'));
         }
diff --git a/include/CheckoutPage.php b/include/CheckoutPage.php
index 2296f6f..7bfa219 100644
--- a/include/CheckoutPage.php
+++ b/include/CheckoutPage.php
@@ -20,57 +20,6 @@ class CheckoutPage extends Page {
         }
     }
 
-    protected function user_init($name, $email) {
-        $nameuser = null;
-        $emailuser = null;
-        if($name) {
-            try {
-                $nameuser = new User($name, 'name');
-            } catch(Exception $ue) {
-                # The user wasn't found locally
-                try {
-                    $this->ldap->get_user($name);
-                    $nameuser = User::create_user($name);
-                } catch(Exception $le) {
-                    $err = i18n("Username {name} not found.",
-                                $name);
-                    throw new Exception($err);
-                }
-            }
-        }
-        if($email) {
-            try {
-                $search = $email;
-                if(strpos($email, '@') === false) {
-                    $search = $email .'@dsv.su.se';
-                }
-                # Lookup email directly in ldap since we don't store it
-                $uid = $this->ldap->search_email($search);
-            } catch(Exception $le) {
-                $err = i18n('Email address {address} not found.',
-                            $search);
-                throw new Exception($err);
-            }
-            try {
-                $emailuser = new User($uid, 'name');
-            } catch(Exception $ue) {
-                # User wasn't found locally, so initialize a new user
-                $emailuser = User::create_user($uid);
-            }
-        }
-        if($nameuser && $emailuser) {
-            if($nameuser != $emailuser) {
-                $err = i18n('Username and email match different users.');
-                throw new Exception($err);
-            }
-            return $nameuser;
-        }
-        if($nameuser) {
-            return $nameuser;
-        }
-        return $emailuser;
-    }
-
     protected function render_body() {
         $username = $this->userstr;
         $email = $this->emailstr;
diff --git a/include/Responder.php b/include/Responder.php
index bbc9104..2787279 100644
--- a/include/Responder.php
+++ b/include/Responder.php
@@ -27,6 +27,57 @@ abstract class Responder {
 
     abstract public function render();
 
+    final protected function user_init($name, $email) {
+        $nameuser = null;
+        $emailuser = null;
+        if($name) {
+            try {
+                $nameuser = new User($name, 'name');
+            } catch(Exception $ue) {
+                # The user wasn't found locally
+                try {
+                    $this->ldap->get_user($name);
+                    $nameuser = User::create_user($name);
+                } catch(Exception $le) {
+                    $err = i18n("Username {name} not found.",
+                                $name);
+                    throw new Exception($err);
+                }
+            }
+        }
+        if($email) {
+            try {
+                $search = $email;
+                if(strpos($email, '@') === false) {
+                    $search = $email .'@dsv.su.se';
+                }
+                # Lookup email directly in ldap since we don't store it
+                $uid = $this->ldap->search_email($search);
+            } catch(Exception $le) {
+                $err = i18n('Email address {address} not found.',
+                            $search);
+                throw new Exception($err);
+            }
+            try {
+                $emailuser = new User($uid, 'name');
+            } catch(Exception $ue) {
+                # User wasn't found locally, so initialize a new user
+                $emailuser = User::create_user($uid);
+            }
+        }
+        if($nameuser && $emailuser) {
+            if($nameuser != $emailuser) {
+                $err = i18n('Username and email match different users.');
+                throw new Exception($err);
+            }
+            return $nameuser;
+        }
+        if($nameuser) {
+            return $nameuser;
+        }
+        return $emailuser;
+    }
+
     final protected function escape_tags($tags) {
         foreach($tags as $key => $tag) {
             $tags[$key] = $this->escape_string(strtolower($tag));