diff --git a/User.php b/User.php
index c07dd5e..5e8487e 100644
--- a/User.php
+++ b/User.php
@@ -19,11 +19,11 @@
     public bool $privacy_policy_signed;
     public bool $author;
     public $accepted_paper_id;
-    public $participation_confirmed;
+    public bool $participation_confirmed;
     public $participation_confirmed_at;
     public bool $student;
     public bool $conference_dinner;
-    public $total_costs;
+    public float $total_due;
 
     function __construct()
     {
@@ -47,7 +47,7 @@
         $this->participation_confirmed_at = "";
         $this->student = false;
         $this->conference_dinner = false;
-        $this->total_costs = 0;
+        $this->total_due = 0.0;
     }
 
     function __construct1(object $data)
@@ -117,6 +117,8 @@
                 if (is_bool($value)) {
                     if ($value) $value = "yes";
                     else $value = "no";
+                } elseif(is_float($value)) {
+                    $key .= " €";
                 }
                 $value = str_replace("\r\n", "<br>", $value);
                 $key = str_replace("_", " ", ucfirst($key));
diff --git a/db_backend.php b/db_backend.php
index 5a92dc0..e1be86e 100644
--- a/db_backend.php
+++ b/db_backend.php
@@ -5,74 +5,74 @@
 
 use \User as User;
 
-function open_db() {
-    global $DB, $DB_USER, $DB_PASS;
-    try {
-        # MS SQL Server and Sybase with PDO_DBLIB 
-        $DBH = new PDO($DB, $DB_USER, $DB_PASS);
-    }
-    catch(PDOException $e) {
-        echo $e->getMessage();
-    }
-    return $DBH;
-}
-
-function db_add_user(User $user)
+class DB
 {
-    $DBH = open_db();
-    $columns = getColumnNames($DBH, "person");
-    foreach ((array) $user as $key => $value) {
-        if (array_key_exists($key, (array) $columns)) {
-            $a[$key] = $value;
+
+    public $pdo;
+    public $log;
+
+    function __construct($log)
+    {
+        global $DB, $DB_USER, $DB_PASS;
+        $this->log = $log;
+        try {
+            $this->pdo = new PDO($DB, $DB_USER, $DB_PASS);
+            if($log)
+                $log->info("Connected to database $DB");
+        } catch (PDOException $e) {
+            echo $e->getMessage();
+            if($log)
+                $log->error($e->getMessage());
         }
     }
-    $keys = array_keys($a);
-    $sql = "INSERT INTO person (".implode(", ",$keys).") \n";
-    $sql .= "VALUES ( :".implode(", :",$keys).")";
-    $q = $DBH->prepare($sql);
-    $i=1;
-    foreach($a as $value)
-        $q->bindParam($i++, $value);
-    print $sql. "\n";
-    return $q->execute($a);
-}
 
-function getColumnNames($dbh, $table)
-{
-    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
-    try {
-        $stmt = $dbh->prepare($sql);
-        $stmt->bindValue(':table', $table, PDO::PARAM_STR);
-        $stmt->execute();
-        $output = array();
-        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
-            $output[$row['COLUMN_NAME']] = $row['COLUMN_NAME'];
+    function add_user(User $user)
+    {
+        $columns = $this->getColumnNames("person");
+        foreach ((array) $user as $key => $value) {
+            if (array_key_exists($key, (array) $columns)) {
+                $a[$key] = $value;
+            }
         }
-        return $output;
-    } catch (PDOException $pe) {
-        trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
+        $keys = array_keys($a);
+        $sql = "INSERT INTO person (" . implode(", ", $keys) . ") \n";
+        $sql .= "VALUES ( :" . implode(", :", $keys) . ")";
+        $q = $this->pdo->prepare($sql);
+        $i = 1;
+        foreach ($a as $value)
+            $q->bindParam($i++, $value);
+        $this->log->debug($sql);
+        return $q->execute($a);
+    }
+
+    function getColumnNames($table)
+    {
+        $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
+        try {
+            $stmt = $this->pdo->prepare($sql);
+            $stmt->bindValue(':table', $table, PDO::PARAM_STR);
+            $stmt->execute();
+            $output = array();
+            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
+                $output[$row['COLUMN_NAME']] = $row['COLUMN_NAME'];
+            }
+            return $output;
+        } catch (PDOException $pe) {
+            trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
+        }
+    }
+
+    function mail_count($email)
+    {
+        $sql = "SELECT COUNT(*) FROM person WHERE email = :email";
+        try {
+            $stmt = $this->pdo->prepare($sql);
+            $stmt->bindValue(':email', $email, PDO::PARAM_STR);
+            $stmt->execute();
+            $row = $stmt->fetch(PDO::FETCH_ASSOC);
+            return $row['COUNT(*)'];
+        } catch (PDOException $pe) {
+            trigger_error('Could not connect to MySQL database. ' . $pe->getMessage(), E_USER_ERROR);
+        }
     }
 }
-
-try {
-    # MS SQL Server and Sybase with PDO_DBLIB 
-    $DBH = new PDO($DB, $DB_USER, $DB_PASS);
-    $table = "person";
-    $sql = "SHOW COLUMNS FROM " . $table;
-    $stmt = $DBH->prepare($sql);
-    # $stmt->bindValue(':table', $table, PDO::PARAM_STR);
-    $stmt->execute();
-    $output = array();
-    while($row = $stmt->fetch(PDO::FETCH_NUM)){
-        $output[] = $row[0];
-        print $row[0] . "\n";
-        }
-    }
-  catch(PDOException $e) {
-      echo $e->getMessage();
-  }
-
-  $user=new User();
-  $user->username="test";
-  print $user->to_string();
-  db_add_user($user);
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";
diff --git a/static/main.js b/static/main.js
index a07eb52..277b4ef 100644
--- a/static/main.js
+++ b/static/main.js
@@ -2,7 +2,7 @@
 (function () {
     'use strict';
     window.addEventListener('load', function () {
-        update_total_costs();
+        update_total_due();
         // Fetch all the forms we want to apply custom Bootstrap validation styles to
         var forms = document.getElementsByClassName('needs-validation');
         // Loop over them and prevent submission
@@ -18,7 +18,7 @@
     }, false);
 })();
 
-function update_total_costs() {
+function update_total_due() {
     var costs = 0;
 
 
@@ -31,7 +31,7 @@
             costs += parseInt($("#conference_dinner_price").text(), 10);
         }
     }
-    $("#total_costs").val(costs.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
+    $("#total_due").val(costs.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}));
 }
 
 function update_paper_id_field() {
diff --git a/templates/email.php b/templates/email.php
index 58eb17f..c55c38e 100644
--- a/templates/email.php
+++ b/templates/email.php
@@ -8,10 +8,10 @@
 
 $WELCOME_TEMPLATE = (object)[
         "subject" => "[" . $SERVICE_ACRONYM . "] Thank you for your " . $SERVICE_ACRONYM . " registration",
-        "text"    => "Thank for registering at " . $SERVICE_ACRONYM . " .",
+        "text"    => "Thank for registering for " . $SERVICE_ACRONYM . " .",
         "html" => "<html><body>
                 <p>Dear {{full_name}},</p>
-                <p>Thank for registering at " . $SERVICE_ACRONYM . " .</p>"
+                <p>Thank for registering for " . $SERVICE_ACRONYM . " .</p>"
                 . $REGISTRATION_INFORMATION . "
                 <p>
                 <p>Best regards,</p>
diff --git a/templates/register.htm b/templates/register.htm
index 5e4df50..3ce7a33 100644
--- a/templates/register.htm
+++ b/templates/register.htm
@@ -507,7 +507,7 @@
         <div class="form-group form-check">
             <input type="checkbox" class="form-check-input" name="participation_confirmed" id="participate" required
                 <?php echo isset($_POST['participation_confirmed']) ? 'checked' : '' ?>
-                oninput="update_total_costs()"
+                oninput="update_total_due()"
                 value="participation_confirmed">
             <label class="form-check-label fs-4" for="participation_confirmed">I confirm that I will be attending the <?php echo $SERVICE_ACRONYM; ?> conference. 
                 <?php if(new DateTimeImmutable("now") <= new DateTimeImmutable($EARLYBIRD_DEADLINE." 23:59:59 HST")) {
@@ -529,7 +529,7 @@
         <div class="form-group form-check">
             <input type="checkbox" class="form-check-input" name="student" id="student"
                 <?php echo isset($_POST['student']) ? 'checked' : '' ?>
-                oninput="update_total_costs()"
+                oninput="update_total_due()"
                 value="student">
             <label class="form-check-label fs-4" for="student">I am student and will therefore benefit from student discount of <strong>€ <span id="student_discount"><?php echo $STUDENT_DISCOUNT; ?></span></strong>.
             </label>
@@ -541,7 +541,7 @@
         <div class="form-group form-check">
             <input type="checkbox" class="form-check-input" name="conference_dinner" id="conference_dinner"
                 <?php echo isset($_POST['conference_dinner']) ? 'checked' : '' ?>
-                oninput="update_total_costs()"
+                oninput="update_total_due()"
                 value="conference_dinner">
             <label class="form-check-label fs-4" for="conference_dinner">I will be attending the conference dinner on 20 July at 8pm at the Rheinterrassen for the price of <strong>€ <span id="conference_dinner_price"><?php echo $CONFERENCE_DINNER; ?></span></strong>.
             </label>
@@ -551,7 +551,7 @@
             <label class="form-label fw-bold" for="exampleInputAmount">Total Amount in Euro to be paid</label>
             <div class="input-group">
               <div class="input-group-text fs-3">€</div>
-              <input lang="en" name="total_costs" id="total_costs" class="form-control text-end fw-bold fs-3" readonly>
+              <input lang="en" name="total_due" id="total_due" class="form-control text-end fw-bold fs-3" readonly>
             </div>
             <div id="totalHelp" class="form-text fs-4">Only bank transfer is available as a payment method. After submitting the form, you will be asked to confirm your e-mail address. After you have confirmed it, you will receive an invoice with all bank details.</div>
     </div>
diff --git a/templates/strings.php b/templates/strings.php
index 557a60f..dc2f1a3 100644
--- a/templates/strings.php
+++ b/templates/strings.php
@@ -1,4 +1,6 @@
 <?php
+include_once 'config.php';
+
 $RUNTIME_ERROR = (object)[
         "not_found" => "<center><h2>This page does not exist!</h2></center>",
         "template_not_found" => "Either you did not create the folder '{{template}}' or strings.php is missing on it. Maybe you have set LANG_CC: '{{langcc}}' wrong on config.php?",
@@ -30,7 +32,7 @@
 ];
 
 $EMAIL_VALIDATION_ERROR = (object)[
-        "registered" => "This email is already belongs to an account. Did you <a href='{{link}}'>forget your password?</a><br>",
+        "registered" => "This email is already belongs to an account. It seems like you are already registered. Please check your mailbox." . ($CONFERENCE_REGISTRATION? "": "Or did you <a href='{{link}}'>forget your password?</a><br>"),
         "invalid" => "Invalid email format<br>",
         "blacklisted" => "This email service is not allowed<br>",
         "pending" => "This email is already pending approval, check your mailbox or try to register with a different email<br>",
diff --git a/validators.php b/validators.php
index e40222f..966f1d1 100644
--- a/validators.php
+++ b/validators.php
@@ -3,6 +3,9 @@
 include_once 'redis.php';
 include_once 'config.php';
 include_once 'utils.php';
+include_once 'db_backend.php';
+
+use \DB as DB;
 
 $TEMPLATE = template_path();
 
@@ -63,26 +66,35 @@
 
 function validate_email(string $email)
 {
-        global $TEMPLATE;
-        include "config.php";
+        global $CONFERENCE_REGISTRATION, $TEMPLATE, $log, $MAIL_HOST_BLACKLIST, $EMAIL_VALIDATION_ERROR, $BASE_URL;
         include $TEMPLATE . 'strings.php';
         $error = "";
 
-        if (ldap_mail_count($email)) {
+        if (($CONFERENCE_REGISTRATION && (new DB(null))->mail_count($email)) || (!$CONFERENCE_REGISTRATION && ldap_mail_count($email))) {
+                $log->info("Email already registered");
                 $error = $error . format($EMAIL_VALIDATION_ERROR->registered, ["link" => $BASE_URL . "?type=recover"]);
         }
-        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
-                $error = $error . $EMAIL_VALIDATION_ERROR->invalid;
-        } elseif (in_array(explode("@", $email)[1], $MAIL_HOST_BLACKLIST)) {
+        if (in_array(explode("@", $email)[1], $MAIL_HOST_BLACKLIST)) {
                 $error = $error . $EMAIL_VALIDATION_ERROR->blacklisted;
         }
+        $log->debug("Checking if email is pending");
         $pending = redis_get("pending");
         if ($pending) {
+                $log->debug("Email might be pending");
                 $maillist = $pending->mails;
-                if (in_array($email, $maillist)) {
-                        $error = $error . $EMAIL_VALIDATION_ERROR->pending;
+                if (is_array($maillist) && in_array($email, $maillist)) {
+                        if ($CONFERENCE_REGISTRATION) {
+                                unset($maillist[array_search($user->email, $maillist)]);
+                                redis_set("pending", (object)["mails" => $maillist], $MAIL_CONFIRMATION_AWAIT_DELAY);
+                                $log->debug("Email was pending, but let participant change details.");
+                                echo '<div class="alert alert-warning" role="alert">A confirmation request has already been sent to this email, but no problem.</div>';
+                        } else {
+                                $error = $error . $EMAIL_VALIDATION_ERROR->pending;
+                                $log->debug("Email is pending");
+                        }
                 }
         }
+        $log->debug("email validated, result: $error");
         return $error;
 }
 
