diff --git a/src/db.c b/src/db.c
new file mode 100644
index 0000000..904281a
--- /dev/null
+++ b/src/db.c
@@ -0,0 +1,198 @@
+#include "db.h"
+
+#include <stdio.h>
+#include <dbi/dbi.h>
+
+dbi_conn conn;
+
+void db__error_func(dbi_conn conn, void* data) {
+    const char* msg;
+    dbi_conn_error(conn, &msg);
+    printf("DBI: %s\n", msg);
+}
+
+int db_init() {
+    dbi_initialize(NULL);
+    conn = dbi_conn_new("sqlite3");
+    
+    dbi_conn_error_handler( conn, db__error_func, NULL );
+
+    /* MySQL
+    dbi_conn_set_option(conn, "host", "localhost");
+    dbi_conn_set_option(conn, "username", "your_name");
+    dbi_conn_set_option(conn, "password", "your_password");
+    dbi_conn_set_option(conn, "dbname", "your_dbname");
+    dbi_conn_set_option(conn, "encoding", "UTF-8");
+    */
+
+    /* SqLite 3 */
+    dbi_conn_set_option(conn, "sqlite3_dbdir", "/tmp");
+    dbi_conn_set_option(conn, "dbname", "hlr.sqlite3");
+
+    if (dbi_conn_connect(conn) < 0) {
+        return 1;
+    }
+
+    return 0;
+}
+
+int db_prepare() {
+    dbi_result result;
+    result = dbi_conn_query(conn,
+        "CREATE TABLE IF NOT EXISTS Subscriber ("
+        "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+        "imsi INTEGER UNIQUE NOT NULL, "
+        "tmsi INTEGER UNIQUE, "
+        "extension TEXT UNIQUE, "
+        "lac INTEGER"
+        ")"
+    );
+    if (result==NULL) {
+        printf("DB: Failed to create Subscriber table.\n");
+        return 1;
+    }
+    dbi_result_free(result);
+    result = dbi_conn_query(conn,
+        "CREATE TABLE IF NOT EXISTS Equipment ("
+        "id INTEGER PRIMARY KEY AUTOINCREMENT, "
+        "imei INTEGER UNIQUE NOT NULL"
+        ")"
+    );
+    if (result==NULL) {
+        printf("DB: Failed to create Equipment table.\n");
+        return 1;
+    }
+    dbi_result_free(result);
+    return 0;
+}
+
+int db_fini() {
+    dbi_conn_close(conn);
+    dbi_shutdown();
+}
+
+int db_insert_imei(uint64_t imei) {
+    dbi_result result;
+    result = dbi_conn_queryf(conn,
+        "INSERT OR IGNORE INTO Equipment "
+        "(imei) "
+        "VALUES "
+        "(%llu) ",
+        imei
+    );
+    if (result==NULL) {
+        printf("DB: Failed to create Equipment by IMEI.\n");
+        return 1;
+    }
+    dbi_result_free(result);
+    return 0;
+}
+
+int db_insert_imsi(uint64_t imsi) {
+    dbi_result result;
+    result = dbi_conn_queryf(conn,
+        "INSERT OR IGNORE INTO Subscriber "
+        "(imsi) "
+        "VALUES "
+        "(%llu) ",
+        imsi
+    );
+    if (result==NULL) {
+        printf("DB: Failed to create Subscriber by IMSI.\n");
+        return 1;
+    }
+    dbi_result_free(result);
+    return 0;
+}
+
+int db_imsi_set_tmsi(uint64_t imsi, uint64_t tmsi) {
+    if (db_insert_imsi(imsi)) {
+        return 1;
+    }
+    dbi_result result;
+    result = dbi_conn_queryf(conn,
+        "UPDATE Subscriber "
+        "SET tmsi = %llu "
+        "WHERE imsi = %llu ",
+        tmsi, imsi
+    );
+    if (result==NULL) {
+        printf("DB: Failed to update Subscriber with TMSI by IMSI.\n");
+        return 1;
+    }
+    dbi_result_free(result);
+    return 0;
+}
+
+int db_imsi_set_lac(uint64_t imsi, uint16_t lac) {
+    if (db_insert_imsi(imsi)) {
+        return 1;
+    }
+    dbi_result result;
+    result = dbi_conn_queryf(conn,
+        "UPDATE Subscriber "
+        "SET lac = %u "
+        "WHERE imsi = %llu ",
+        lac, imsi
+    );
+    if (result==NULL) {
+        printf("DB: Failed to update Subscriber with LAC by IMSI.\n");
+        return 1;
+    }
+    dbi_result_free(result);
+    return 0;
+}
+
+int db__parse_subscriber(dbi_result result, db_subscriber* subscriber) {
+    if (!dbi_result_first_row(result)) {
+        printf("DB: Failed to find Subscriber.\n");
+        return 1;
+    }
+    subscriber->imsi = dbi_result_get_ulonglong(result, "imsi");
+    subscriber->tmsi = dbi_result_get_ulonglong(result, "tmsi");
+    // FIXME handle extension
+    subscriber->lac = dbi_result_get_uint(result, "lac");
+    printf("DB: Subscriber: IMSI %llu, TMSI %llu, LAC %hu\n", subscriber->imsi, subscriber->tmsi, subscriber->lac);
+    return 0;
+}
+
+int db_imsi_get_subscriber(uint64_t imsi, db_subscriber* subscriber) {
+    dbi_result result;
+    result = dbi_conn_queryf(conn,
+        "SELECT * FROM Subscriber "
+        "WHERE imsi = %llu ",
+        imsi
+    );
+    if (result==NULL) {
+        printf("DB: Failed to find Subscriber by IMSI.\n");
+        return 1;
+    }
+    if (db__parse_subscriber(result, subscriber)) {
+        printf("DB: Failed to parse Subscriber.\n");
+        dbi_result_free(result);
+        return 1;
+    }
+    dbi_result_free(result);
+    return 0;
+}
+
+int db_tmsi_get_subscriber(uint64_t tmsi, db_subscriber* subscriber) {
+    dbi_result result;
+    result = dbi_conn_queryf(conn,
+        "SELECT * FROM Subscriber "
+        "WHERE tmsi = %llu ",
+        tmsi
+    );
+    if (result==NULL) {
+        printf("DB: Failed to find Subscriber by TMSI.\n");
+        return 1;
+    }
+    if (db__parse_subscriber(result, subscriber)) {
+        printf("DB: Failed to parse Subscriber.\n");
+        dbi_result_free(result);
+        return 1;
+    }
+    dbi_result_free(result);
+    return 0;
+}
+
diff --git a/src/db.h b/src/db.h
new file mode 100644
index 0000000..edf1655
--- /dev/null
+++ b/src/db.h
@@ -0,0 +1,23 @@
+#include <stdint.h>
+
+#define NUMBER_LENGTH 32
+
+typedef struct {
+    uint64_t imsi;
+    uint64_t tmsi;
+    char number[NUMBER_LENGTH];
+    uint16_t lac;
+} db_subscriber;
+
+int db_init();
+int db_prepare();
+int db_fini();
+
+int db_insert_imei(uint64_t imei);
+
+int db_insert_imsi(uint64_t imsi);
+int db_imsi_set_tmsi(uint64_t imsi, uint64_t tmsi);
+int db_imsi_set_lac(uint64_t imsi, uint16_t lac);
+int db_imsi_get_subscriber(uint64_t imsi, db_subscriber* subscriber);
+int db_tmsi_get_subscriber(uint64_t tmsi, db_subscriber* subscriber);
+
diff --git a/src/db_test.c b/src/db_test.c
new file mode 100644
index 0000000..82dde49
--- /dev/null
+++ b/src/db_test.c
@@ -0,0 +1,31 @@
+#include "db.h"
+
+#include <stdio.h>
+
+int main() {
+
+    if (db_init()) {
+        printf("DB: Failed to init database. Please check the option settings.\n");
+        return 1;
+    }    
+    printf("DB: Database initialized.\n");
+
+    if (db_prepare()) {
+        printf("DB: Failed to prepare database.\n");
+        return 1;
+    }
+    printf("DB: Database prepared.\n");
+
+    db_insert_imsi(3243245432351LLU);
+    db_insert_imsi(3243245432352LLU);
+    db_imsi_set_tmsi(3243245432345LLU, 99999999LLU);
+    db_imsi_set_lac(3243245432345LLU, 42);
+
+    db_subscriber alice;
+    db_imsi_get_subscriber(3243245432345LLU, &alice);
+    db_tmsi_get_subscriber(99999999LLU, &alice);
+
+    db_fini();
+
+    return 0;
+}
