diff --git a/index.php b/index.php
index d4310c8..5ce87e6 100755
--- a/index.php
+++ b/index.php
@@ -5,6 +5,7 @@
 include_once 'utils.php';
 include_once 'mail.php';
 include_once 'ldap.php';
+include_once 'db_backend.php';
 include_once 'validators.php';
 include_once 'User.php';
 require __DIR__ . '/vendor/autoload.php';
@@ -13,6 +14,7 @@
 use Monolog\Handler\StreamHandler;
 use Monolog\Handler\RotatingFileHandler;
 use \User as User;
+use \DB as DB;
 include $TEMPLATE . "strings.php";
 $log = new Logger('signup');
 $log->pushHandler(new RotatingFileHandler(__DIR__ . '/logs/signup.log', 0, Logger::DEBUG));
@@ -124,17 +126,23 @@
 
 function verify_request(User $user)
 {
+    global $log, $CONFERENCE_REGISTRATION, $CAPTCHA_LENGTH;
+
     $TEMPLATE = template_path();
     unset($_SESSION['captcha_token']);
     include $TEMPLATE . 'strings.php';
     $password = $_POST["password"];
     $error = "";
 
-    $error .= validate_username($user->username);
+    if (!$CONFERENCE_REGISTRATION) {
+        $error .= validate_username($user->username);
+        $error .= validate_password($password);
+    }
+    $log->debug("validating request");
     $error .= validate_name($user->first_name, $FIRST_NAME_VALIDATION_ERROR);
     $error .= validate_name($user->last_name, $LAST_NAME_VALIDATION_ERROR);
+    $log->debug("request validated: $error");
     $error .= validate_email($user->email);
-    $error .= validate_password($password);
 
 
     if ($CAPTCHA_LENGTH > 0  &&  !(isset($_SESSION['captcha']) && PhraseBuilder::comparePhrases($_SESSION['captcha'], $_POST['captcha']))) {
@@ -156,7 +164,8 @@
     $pending = redis_get("pending");
     if ($pending) {
         $maillist = $pending->mails;
-        array_push($maillist, $user->email);
+        if(is_array($maillist))
+            array_push($maillist, $user->email);
     } else
         $maillist = [$user->email];
     redis_set("pending", (object)["mails" => $maillist], $MAIL_CONFIRMATION_AWAIT_DELAY);
@@ -217,12 +226,14 @@
                 }
                 break;
             case "recover":
+                if ($CONFERENCE_REGISTRATION)
+                    break;
                 $TEMPLATE = template_path();
                 unset($_SESSION['captcha_token']);
                 include $TEMPLATE . 'strings.php';
 
                 $email = $_POST["email"];
-                if (!ldap_mail_count($email)) {
+                if (($CONFERENCE_REGISTRATION & ! (new DB($log))->mail_count($email)) || !ldap_mail_count($email)) {
                     unset($_POST['email']);
                     $error = $error . $STRINGS->recover_email_not_registered;
                 }
@@ -260,6 +271,8 @@
                 break;
 
             case "password_change":
+                if ($CONFERENCE_REGISTRATION)
+                    break;
                 $password = $_POST['password'];
                 $error = validate_password($password);
                 if ($error) {
@@ -295,7 +308,7 @@
                 $token = $_GET["token"];
                 $user = redis_get_user($token);
                 if ($user && gettype($user) == "object") {
-                    if (ldap_add_user($user)) {
+                    if (($CONFERENCE_REGISTRATION && (new DB($log))->add_user($user)) || (!$CONFERENCE_REGISTRATION && ldap_add_user($user))) {
                         if ($REDIRECT_TO)
                             header("refresh:5;url=" . $REDIRECT_TO);
 
@@ -308,7 +321,7 @@
                             }
                         }
                         redis_inc_ipdata(getClientIP(), "register");
-                        $log->info("User registered: " . $user->to_string());
+                        $log->info("User registration completed: " . $user->to_string());
                         echo $STRINGS->email_confirmation;
                         if (isset($POST_REGISTER_HOOK)) $POST_REGISTER_HOOK($user);
                         include $TEMPLATE . "mail_confirmed.htm";
