diff --git a/openbsc/src/db.c b/openbsc/src/db.c
index 11fb4dd..3a261ac 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/db.c
@@ -139,8 +139,9 @@
 		")",
 };
 
-void db_error_func(dbi_conn conn, void* data) {
-	const char* msg;
+void db_error_func(dbi_conn conn, void *data)
+{
+	const char *msg;
 	dbi_conn_error(conn, &msg);
 	printf("DBI: %s\n", msg);
 }
@@ -169,10 +170,12 @@
 	return 0;
 }
 
-int db_init(const char *name) {
+int db_init(const char *name)
+{
 	dbi_initialize(NULL);
+
 	conn = dbi_conn_new("sqlite3");
-	if (conn==NULL) {
+	if (conn == NULL) {
 		printf("DB: Failed to create connection.\n");
 		return 1;
 	}
@@ -206,13 +209,14 @@
 }
 
 
-int db_prepare() {
+int db_prepare()
+{
 	dbi_result result;
 	int i;
 
 	for (i = 0; i < ARRAY_SIZE(create_stmts); i++) {
 		result = dbi_conn_query(conn, create_stmts[i]);
-		if (result==NULL) {
+		if (!result) {
 			printf("DB: Failed to create some table.\n");
 			return 1;
 		}
@@ -228,7 +232,8 @@
 	return 0;
 }
 
-int db_fini() {
+int db_fini()
+{
 	dbi_conn_close(conn);
 	dbi_shutdown();
 
@@ -239,10 +244,10 @@
 	return 0;
 }
 
-struct gsm_subscriber* db_create_subscriber(struct gsm_network *net, char *imsi)
+struct gsm_subscriber *db_create_subscriber(struct gsm_network *net, char *imsi)
 {
 	dbi_result result;
-	struct gsm_subscriber* subscr;
+	struct gsm_subscriber *subscr;
 
 	/* Is this subscriber known in the db? */
 	subscr = db_get_subscriber(net, GSM_SUBSCRIBER_IMSI, imsi); 
@@ -250,11 +255,10 @@
 		result = dbi_conn_queryf(conn,
                          "UPDATE Subscriber set updated = datetime('now') "
                          "WHERE imsi = %s " , imsi);
-		if (result==NULL) {
+		if (!result)
 			printf("DB: failed to update timestamp\n");
-		} else {
+		else
 			dbi_result_free(result);
-		}
 		return subscr;
 	}
 
@@ -269,9 +273,8 @@
 		"(%s, datetime('now'), datetime('now')) ",
 		imsi
 	);
-	if (result==NULL) {
+	if (!result)
 		printf("DB: Failed to create Subscriber by IMSI.\n");
-	}
 	subscr->net = net;
 	subscr->id = dbi_conn_sequence_last(conn, NULL);
 	strncpy(subscr->imsi, imsi, GSM_IMSI_LENGTH-1);
@@ -456,7 +459,7 @@
 		printf("DB: Unknown query selector for Subscriber.\n");
 		return NULL;
 	}
-	if (result==NULL) {
+	if (!result) {
 		printf("DB: Failed to query Subscriber.\n");
 		return NULL;
 	}
@@ -498,7 +501,8 @@
 	return subscr;
 }
 
-int db_sync_subscriber(struct gsm_subscriber* subscriber) {
+int db_sync_subscriber(struct gsm_subscriber *subscriber)
+{
 	dbi_result result;
 	char tmsi[14];
 	char *q_tmsi;
@@ -510,6 +514,7 @@
 				   &q_tmsi);
 	} else
 		q_tmsi = strdup("NULL");
+
 	result = dbi_conn_queryf(conn,
 		"UPDATE Subscriber "
 		"SET updated = datetime('now'), "
@@ -524,14 +529,17 @@
 		subscriber->authorized,
 		q_tmsi,
 		subscriber->lac,
-		subscriber->imsi
-	);
+		subscriber->imsi);
+
 	free(q_tmsi);
-	if (result==NULL) {
+
+	if (!result) {
 		printf("DB: Failed to update Subscriber (by IMSI).\n");
 		return 1;
 	}
+
 	dbi_result_free(result);
+
 	return 0;
 }
 
@@ -578,10 +586,12 @@
 	return 0;
 }
 
-int db_subscriber_alloc_tmsi(struct gsm_subscriber* subscriber) {
-	dbi_result result=NULL;
+int db_subscriber_alloc_tmsi(struct gsm_subscriber *subscriber)
+{
+	dbi_result result = NULL;
 	char tmsi[14];
 	char* tmsi_quoted;
+
 	for (;;) {
 		subscriber->tmsi = rand();
 		if (subscriber->tmsi == GSM_RESERVED_TMSI)
@@ -592,14 +602,15 @@
 		result = dbi_conn_queryf(conn,
 			"SELECT * FROM Subscriber "
 			"WHERE tmsi = %s ",
-			tmsi_quoted
-		);
+			tmsi_quoted);
+
 		free(tmsi_quoted);
-		if (result==NULL) {
+
+		if (!result) {
 			printf("DB: Failed to query Subscriber while allocating new TMSI.\n");
 			return 1;
 		}
-		if (dbi_result_get_numrows(result)){
+		if (dbi_result_get_numrows(result)) {
 			dbi_result_free(result);
 			continue;
 		}
@@ -613,9 +624,11 @@
 	return 0;
 }
 
-int db_subscriber_alloc_exten(struct gsm_subscriber* subscriber) {
-	dbi_result result=NULL;
+int db_subscriber_alloc_exten(struct gsm_subscriber *subscriber)
+{
+	dbi_result result = NULL;
 	u_int32_t try;
+
 	for (;;) {
 		try = (rand()%(GSM_MAX_EXTEN-GSM_MIN_EXTEN+1)+GSM_MIN_EXTEN);
 		result = dbi_conn_queryf(conn,
@@ -623,7 +636,7 @@
 			"WHERE extension = %i",
 			try
 		);
-		if (result==NULL) {
+		if (!result) {
 			printf("DB: Failed to query Subscriber while allocating new extension.\n");
 			return 1;
 		}
@@ -647,7 +660,7 @@
  * an error.
  */
 
-int db_subscriber_alloc_token(struct gsm_subscriber* subscriber, u_int32_t* token)
+int db_subscriber_alloc_token(struct gsm_subscriber *subscriber, u_int32_t *token)
 {
 	dbi_result result;
 	u_int32_t try;
@@ -691,7 +704,8 @@
 	return 0;
 }
 
-int db_subscriber_assoc_imei(struct gsm_subscriber* subscriber, char imei[GSM_IMEI_LENGTH]) {
+int db_subscriber_assoc_imei(struct gsm_subscriber *subscriber, char imei[GSM_IMEI_LENGTH])
+{
 	unsigned long long equipment_id, watch_id;
 	dbi_result result;
 
@@ -703,27 +717,27 @@
 		"(imei, created, updated) "
 		"VALUES "
 		"(%s, datetime('now'), datetime('now')) ",
-		imei
-	);
-	if (result==NULL) {
+		imei);
+	if (!result) {
 		printf("DB: Failed to create Equipment by IMEI.\n");
 		return 1;
 	}
+
 	equipment_id = 0;
 	if (dbi_result_get_numrows_affected(result)) {
 		equipment_id = dbi_conn_sequence_last(conn, NULL);
 	}
 	dbi_result_free(result);
-	if (equipment_id) {
+
+	if (equipment_id)
 		printf("DB: New Equipment: ID %llu, IMEI %s\n", equipment_id, imei);
-	}
 	else {
 		result = dbi_conn_queryf(conn,
 			"SELECT id FROM Equipment "
 			"WHERE imei = %s ",
 			imei
 		);
-		if (result==NULL) {
+		if (!result) {
 			printf("DB: Failed to query Equipment by IMEI.\n");
 			return 1;
 		}
@@ -741,28 +755,26 @@
 		"(subscriber_id, equipment_id, created, updated) "
 		"VALUES "
 		"(%llu, %llu, datetime('now'), datetime('now')) ",
-		subscriber->id, equipment_id
-	);
-	if (result==NULL) {
+		subscriber->id, equipment_id);
+	if (!result) {
 		printf("DB: Failed to create EquipmentWatch.\n");
 		return 1;
 	}
+
 	watch_id = 0;
-	if (dbi_result_get_numrows_affected(result)) {
+	if (dbi_result_get_numrows_affected(result))
 		watch_id = dbi_conn_sequence_last(conn, NULL);
-	}
+
 	dbi_result_free(result);
-	if (watch_id) {
+	if (watch_id)
 		printf("DB: New EquipmentWatch: ID %llu, IMSI %s, IMEI %s\n", equipment_id, subscriber->imsi, imei);
-	}
 	else {
 		result = dbi_conn_queryf(conn,
 			"UPDATE EquipmentWatch "
 			"SET updated = datetime('now') "
 			"WHERE subscriber_id = %llu AND equipment_id = %llu ",
-			subscriber->id, equipment_id
-		);
-		if (result==NULL) {
+			subscriber->id, equipment_id);
+		if (!result) {
 			printf("DB: Failed to update EquipmentWatch.\n");
 			return 1;
 		}
