diff -ru -I Id: -x CVS -N dbmail/mysql/dbauthmysql.c dbmail.working/mysql/dbauthmysql.c
--- dbmail/mysql/dbauthmysql.c	2002-11-13 11:21:07.000000000 +1300
+++ dbmail.working/mysql/dbauthmysql.c	2002-11-06 17:33:26.000000000 +1300
@@ -24,7 +24,8 @@
  * var's for dbase connection/query
  */
 char __auth_query_data[AUTH_QUERY_SIZE]; 
-MYSQL __auth_conn;
+MYSQL auth_write_conn;
+MYSQL auth_read_conn;
 MYSQL_RES *__auth_res;
 MYSQL_ROW __auth_row;
 
@@ -37,39 +38,99 @@
  */
 int auth_connect()
 {
-  mysql_init(&__auth_conn);
-  if (mysql_real_connect (&__auth_conn,AUTH_HOST,AUTH_USER,AUTH_PASS,USERDATABASE,0,NULL,0) == NULL)
+  mysql_init(&auth_write_conn);
+  if (mysql_real_connect (&auth_write_conn,
+                          get_config_item(AUTH_HOST, "AUTH_HOST"),
+                          get_config_item(AUTH_USER, "AUTH_USER"),
+                          get_config_item(AUTH_PASS, "AUTH_PASS"),
+                          get_config_item(USERDATABASE, "USERDATABASE"),
+                          get_config_item_int(AUTH_PORT, "AUTH_PORT"),
+                          NULL,0) == NULL)
     {
       trace(TRACE_ERROR,"auth_connect(): mysql_real_connect failed: %s",
-	    mysql_error(&__auth_conn));
+	    mysql_error(&auth_write_conn));
       return -1;
     }
 
+  mysql_init(&auth_read_conn);
+  if (mysql_real_connect (&auth_read_conn,
+                          get_config_item(AUTH_HOST_READ, "AUTH_HOST_READ"),
+                          get_config_item(AUTH_USER_READ, "AUTH_USER_READ"),
+                          get_config_item(AUTH_PASS_READ, "AUTH_PASS_READ"),
+                          get_config_item(USERDATABASE_READ, "USERDATABASE_READ"),
+                          get_config_item_int(AUTH_PORT_READ, "AUTH_PORT_READ"),
+                          NULL,0) == NULL)
+    {
+      trace(TRACE_ERROR,"auth_connect(): mysql_real_connect failed: %s",
+	    mysql_error(&auth_read_conn));
+      return -1;
+    }
+    
   return 0;
 }
 
 
 int auth_disconnect()
 {
-  mysql_close(&__auth_conn);
+  mysql_close(&auth_write_conn);
+  mysql_close(&auth_read_conn);
+  return 0;
+}
+
+
+/* 
+ * auth_write_query()
+ * 
+ * Internal function for the authentication mechanism.
+ * Executes the query q on the (global) connection auth_write_conn.
+ *
+ * returns -1 on error, 0 on success.
+ *
+ */
+int auth_write_query(const char *q)
+{
+  if (!q)
+    {
+      trace(TRACE_ERROR, "auth_write_query(): got NULL query");
+      return -1;
+    }
+
+  /* ping the mySQL server
+   * this function does a automatical re-connection attempt if
+   * the connection is dead
+   */
+  if (mysql_ping(&auth_write_conn) != 0)
+    {
+      trace(TRACE_ERROR, "auth_write_query(): connection failure");
+      return -1;
+    }
+
+  trace(TRACE_DEBUG,"auth_write_query(): executing query [%s]", q);
+
+  if (mysql_real_query(&auth_write_conn, q, strlen(q)) < 0)
+    {
+      trace(TRACE_ERROR, "auth_write_query(): query failed: [%s]",mysql_error(&auth_write_conn));
+      return -1;
+    }
+  
   return 0;
 }
 
 
 /* 
- * __auth_query()
+ * auth_read_query()
  * 
  * Internal function for the authentication mechanism.
- * Executes the query q on the (global) connection __auth_conn.
+ * Executes the query q on the (global) connection auth_read_conn.
  *
  * returns -1 on error, 0 on success.
  *
  */
-int __auth_query(const char *q)
+int auth_read_query(const char *q)
 {
   if (!q)
     {
-      trace(TRACE_ERROR, "__auth_query(): got NULL query");
+      trace(TRACE_ERROR, "auth_read_query(): got NULL query");
       return -1;
     }
 
@@ -77,17 +138,17 @@
    * this function does a automatical re-connection attempt if
    * the connection is dead
    */
-  if (mysql_ping(&__auth_conn) != 0)
+  if (mysql_ping(&auth_read_conn) != 0)
     {
-      trace(TRACE_ERROR, "__auth_query(): connection failure");
+      trace(TRACE_ERROR, "auth_read_query(): connection failure");
       return -1;
     }
 
-  trace(TRACE_DEBUG,"__auth_query(): executing query [%s]", q);
+  trace(TRACE_DEBUG,"auth_read_query(): executing query [%s]", q);
 
-  if (mysql_real_query(&__auth_conn, q, strlen(q)) < 0)
+  if (mysql_real_query(&auth_read_conn, q, strlen(q)) < 0)
     {
-      trace(TRACE_ERROR, "__auth_query(): query failed: [%s]",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR, "auth_read_query(): query failed: [%s]",mysql_error(&auth_read_conn));
       return -1;
     }
   
@@ -112,15 +173,15 @@
 
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "SELECT user_idnr FROM users WHERE userid='%s'",username);
 
-  if (__auth_query(__auth_query_data)==-1)
+  if (auth_read_query(__auth_query_data)==-1)
     {
       trace(TRACE_ERROR, "auth_user_exists(): could not execute query\n");
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_user_exists: mysql_store_result failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_user_exists: mysql_store_result failed: %s",mysql_error(&auth_read_conn));
       return -1;
     }
   
@@ -148,15 +209,15 @@
   /* do a inverted (DESC) query because adding the names to the final list inverts again */
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "SELECT userid FROM users ORDER BY userid DESC");
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_read_query(__auth_query_data) == -1)
     {
       trace(TRACE_ERROR,"auth_get_known_users(): could not retrieve user list\n");
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_get_known_users(): mysql_store_result failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_get_known_users(): mysql_store_result failed: %s",mysql_error(&auth_read_conn));
       return -1;
     }
   
@@ -180,15 +241,15 @@
 
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "SELECT client_idnr FROM users WHERE user_idnr = %llu",useridnr);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_read_query(__auth_query_data) == -1)
     {
       trace(TRACE_ERROR,"auth_getclientid(): could not retrieve client id for user [%llu]\n",useridnr);
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"auth_getclientid(): could not store query result: [%s]\n",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_getclientid(): could not store query result: [%s]\n",mysql_error(&auth_read_conn));
       return -1;
     }
 
@@ -206,16 +267,16 @@
 
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "SELECT maxmail_size FROM users WHERE user_idnr = %llu",useridnr);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_read_query(__auth_query_data) == -1)
     {
       trace(TRACE_ERROR,"auth_getmaxmailsize(): could not retrieve client id for user [%llu]\n",useridnr);
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"auth_getmaxmailsize(): could not store query result: [%s]\n",
-	    mysql_error(&__auth_conn));
+	    mysql_error(&auth_read_conn));
       return -1;
     }
 
@@ -253,17 +314,17 @@
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "SELECT encryption_type FROM users WHERE user_idnr = %llu",
 	   useridnr);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_read_query(__auth_query_data) == -1)
     {
       trace(TRACE_ERROR,"auth_getencryption(): could not retrieve encryption type for user [%llu]\n",
 	    useridnr);
       return __auth_encryption_desc_string; /* return empty */
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"auth_getencryption(): could not store query result: [%s]\n",
-	    mysql_error(&__auth_conn));
+	    mysql_error(&auth_read_conn));
       return __auth_encryption_desc_string; /* return empty */
     }
 
@@ -296,12 +357,12 @@
 	    "alias=\"%s\"",username);
 
   trace(TRACE_DEBUG,"auth_check_user(): executing query, checks [%d]", checks);
-  if (__auth_query(__auth_query_data)==-1)
+  if (auth_read_query(__auth_query_data)==-1)
       return 0;
   
-  if ((myres = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((myres = mysql_store_result(&auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_check_user: mysql_store_result failed: [%s]",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_check_user: mysql_store_result failed: [%s]",mysql_error(&auth_read_conn));
       return 0;
     }
 
@@ -384,12 +445,12 @@
 	    "alias=\"%s\"",username);
 
   trace(TRACE_DEBUG,"auth_check_user_ext(): executing query, checks [%d]", checks);
-  if (__auth_query(__auth_query_data)==-1)
+  if (auth_read_query(__auth_query_data)==-1)
       return 0;
   
-  if ((myres = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((myres = mysql_store_result(&auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_check_user_ext(): mysql_store_result failed: [%s]",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_check_user_ext(): mysql_store_result failed: [%s]",mysql_error(&auth_read_conn));
       return 0;
     }
 
@@ -454,16 +515,16 @@
   /* first check to see if this user already exists */
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "SELECT * FROM users WHERE userid = '%s'", username);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_read_query(__auth_query_data) == -1)
     {
       /* query failed */
       trace (TRACE_ERROR, "auth_adduser(): query failed\n");
       return -1;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_adduser(): mysql_store_result failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_adduser(): mysql_store_result failed: %s",mysql_error(&auth_read_conn));
       return 0;
     }
 
@@ -493,7 +554,7 @@
       return -1;
     }
 
-  mysql_real_escape_string(&__auth_conn, escapedpass, password, strlen(password)); 
+  mysql_real_escape_string(&auth_write_conn, escapedpass, password, strlen(password)); 
 
   snprintf (__auth_query_data, AUTH_QUERY_SIZE,"INSERT INTO users "
 	    "(userid,passwd,client_idnr,maxmail_size,encryption_type) VALUES "
@@ -501,14 +562,14 @@
 	    username,escapedpass,clientid, size, enctype ? enctype : "");
 	
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_write_query(__auth_query_data) == -1)
     {
       /* query failed */
       trace (TRACE_ERROR, "auth_adduser(): query for adding user failed");
       return -1;
     }
 
-  useridnr = mysql_insert_id(&__auth_conn);
+  useridnr = mysql_insert_id(&auth_write_conn);
 	
   /* creating query for adding mailbox */
   snprintf (__auth_query_data, AUTH_QUERY_SIZE,"INSERT INTO mailboxes (owner_idnr, name) VALUES (%llu,'INBOX')",
@@ -517,7 +578,7 @@
   trace (TRACE_DEBUG,"auth_adduser(): executing query for mailbox");
 
 	
-  if (__auth_query(__auth_query_data))
+  if (auth_write_query(__auth_query_data))
     {
       trace (TRACE_ERROR,"auth_adduser(): query failed for adding mailbox");
       return -1;
@@ -532,7 +593,7 @@
 {
   snprintf (__auth_query_data, AUTH_QUERY_SIZE, "DELETE FROM users WHERE userid = '%s'",username);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_write_query(__auth_query_data) == -1)
     {
       /* query failed */
       trace (TRACE_ERROR, "auth_delete_user(): query for removing user failed");
@@ -547,7 +608,7 @@
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "UPDATE users SET userid = '%s' WHERE user_idnr=%llu", 
 	   newname, useridnr);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_write_query(__auth_query_data) == -1)
     {
       trace(TRACE_ERROR,"auth_change_username(): could not change name for user [%llu]\n",useridnr);
       return -1;
@@ -563,7 +624,7 @@
 	   "WHERE user_idnr=%llu", 
 	   newpass, enctype ? enctype : "", useridnr);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_write_query(__auth_query_data) == -1)
     {
       trace(TRACE_ERROR,"auth_change_password(): could not change passwd for user [%llu]\n",useridnr);
       return -1;
@@ -578,7 +639,7 @@
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "UPDATE users SET client_idnr = %llu WHERE user_idnr=%llu", 
 	   newcid, useridnr);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_write_query(__auth_query_data) == -1)
     {
       trace(TRACE_ERROR,"auth_change_password(): could not change client id for user [%llu]\n",useridnr);
       return -1;
@@ -592,7 +653,7 @@
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "UPDATE users SET maxmail_size = %llu WHERE user_idnr=%llu", 
 	   newsize, useridnr);
 
-  if (__auth_query(__auth_query_data) == -1)
+  if (auth_write_query(__auth_query_data) == -1)
     {
       trace(TRACE_ERROR,"auth_change_password(): could not change maxmailsize for user [%llu]\n",
 	    useridnr);
@@ -625,15 +686,15 @@
   snprintf(__auth_query_data, AUTH_QUERY_SIZE, "SELECT user_idnr, passwd, encryption_type FROM users "
 	   "WHERE userid = '%s'", user);
 
-  if (__auth_query(__auth_query_data)==-1)
+  if (auth_read_query(__auth_query_data)==-1)
     {
       trace(TRACE_ERROR, "auth_validate(): could not select user information");
       return -1;
     }
 	
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"auth_validate(): mysql_store_result failed: %s\n",mysql_error(&__auth_conn));
+      trace (TRACE_ERROR,"auth_validate(): mysql_store_result failed: %s\n",mysql_error(&auth_read_conn));
       return -1;
     }
 
@@ -665,7 +726,7 @@
       snprintf(__auth_query_data, AUTH_QUERY_SIZE, "UPDATE users SET last_login = '%s' "
 	       "WHERE user_idnr = %llu", timestr, id);
       
-      if (__auth_query(__auth_query_data)==-1)
+      if (auth_write_query(__auth_query_data)==-1)
 	trace(TRACE_ERROR, "auth_validate(): could not update user login time");
     }
   else
@@ -693,15 +754,15 @@
   
   snprintf (__auth_query_data, AUTH_QUERY_SIZE, "SELECT passwd,user_idnr FROM users WHERE userid=\"%s\"",username);
 	
-  if (__auth_query(__auth_query_data)==-1)
+  if (auth_read_query(__auth_query_data)==-1)
     {
-      trace(TRACE_ERROR, "auth_md5_validate(): query failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR, "auth_md5_validate(): query failed: %s",mysql_error(&auth_read_conn));
       return -1;
     }
 	
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL)
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"auth_md5_validate(): mysql_store_result failed:  %s",mysql_error(&__auth_conn));
+      trace (TRACE_ERROR,"auth_md5_validate(): mysql_store_result failed:  %s",mysql_error(&auth_read_conn));
       
       return -1;
     }
@@ -742,7 +803,7 @@
       snprintf(__auth_query_data, AUTH_QUERY_SIZE, "UPDATE users SET last_login = '%s' "
 	       "WHERE user_idnr = %llu", timestr, useridnr);
       
-      if (__auth_query(__auth_query_data)==-1)
+      if (auth_write_query(__auth_query_data)==-1)
 	trace(TRACE_ERROR, "auth_validate(): could not update user login time");
 
       return useridnr;
@@ -770,14 +831,14 @@
 	   *useridnr);
 
   trace(TRACE_DEBUG,"auth_get_userid(): executing query");
-  if (__auth_query(__auth_query_data)==-1)
+  if (auth_read_query(__auth_query_data)==-1)
     {
       return 0;
     }
 
-  if ((__auth_res = mysql_store_result(&__auth_conn)) == NULL) 
+  if ((__auth_res = mysql_store_result(&auth_read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"auth_get_userid(): mysql_store_result failed: %s",mysql_error(&__auth_conn));
+      trace(TRACE_ERROR,"auth_get_userid(): mysql_store_result failed: %s",mysql_error(&auth_read_conn));
       
       return 0;
     }
diff -ru -I Id: -x CVS -N dbmail/mysql/dbmsgbufmysql.c dbmail.working/mysql/dbmsgbufmysql.c
--- dbmail/mysql/dbmsgbufmysql.c	2002-11-13 11:21:07.000000000 +1300
+++ dbmail.working/mysql/dbmsgbufmysql.c	2002-11-06 17:33:26.000000000 +1300
@@ -18,7 +18,7 @@
  * var's from dbmysql.c: 
  */
 extern char *query; 
-extern MYSQL conn;
+extern MYSQL read_conn;
 extern MYSQL_RES *res;
 extern MYSQL_ROW row;
 
@@ -64,16 +64,16 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT messageblk FROM messageblks WHERE "
 	   "message_idnr = %llu ORDER BY messageblk_idnr", uid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_init_msgfetch(): could not get message\n");
       return (-1);
     }
 
-  if ((_msg_result = mysql_store_result(&conn)) == NULL)
+  if ((_msg_result = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_init_msgfetch(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return (-1);
     }
 
@@ -101,7 +101,7 @@
 
   /* re-execute query */
   mysql_free_result(_msg_result);
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_init_msgfetch(): could not get message\n");
       my_free(blklengths);
@@ -109,10 +109,10 @@
       return (-1);
     }
 
-  if ((_msg_result = mysql_store_result(&conn)) == NULL)
+  if ((_msg_result = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_init_msgfetch(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       my_free(blklengths);
       blklengths = NULL;
       return (-1);
@@ -374,15 +374,15 @@
 	   " ORDER BY messageblk_idnr", 
 	   msguid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_dump_range(): could not get message\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_dump_range(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_dump_range(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
diff -ru -I Id: -x CVS -N dbmail/mysql/dbmysql.c dbmail.working/mysql/dbmysql.c
--- dbmail/mysql/dbmysql.c	2002-11-13 11:21:07.000000000 +1300
+++ dbmail.working/mysql/dbmysql.c	2002-11-08 13:26:44.000000000 +1300
@@ -20,7 +20,8 @@
 #include "../auth.h"
 
 
-MYSQL conn;  
+MYSQL write_conn;  
+MYSQL read_conn;  
 MYSQL_RES *res;
 MYSQL_RES *checkres;
 MYSQL_ROW row;
@@ -48,16 +49,42 @@
     }
 
   /* connecting */
-  mysql_init(&conn);
-  if (mysql_real_connect (&conn,MAIL_HOST,MAIL_USER,MAIL_PASS,MAILDATABASE,0,NULL,0) == NULL)
+  mysql_init(&write_conn);
+  if (mysql_real_connect (&write_conn,
+                          get_config_item(MAIL_HOST, "MAIL_HOST"),
+                          get_config_item(MAIL_USER, "MAIL_USER"),
+                          get_config_item(MAIL_PASS, "MAIL_PASS"),
+                          get_config_item(MAILDATABASE, "MAILDATABASE"),
+                          get_config_item_int(MAIL_PORT, "MAIL_PORT"),
+                          NULL,0) == NULL)
     {
-      trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&write_conn));
       return -1;
     }
 
 #ifdef mysql_errno
-  if (mysql_errno(&conn)) {
-    trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&conn));
+  if (mysql_errno(&write_conn)) {
+    trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&write_conn));
+    return -1;
+  }
+#endif
+	
+  mysql_init(&read_conn);
+  if (mysql_real_connect (&read_conn,
+                          get_config_item(MAIL_HOST_READ, "MAIL_HOST_READ"),
+                          get_config_item(MAIL_USER_READ, "MAIL_USER_READ"),
+                          get_config_item(MAIL_PASS_READ, "MAIL_PASS_READ"),
+                          get_config_item(MAILDATABASE_READ, "MAILDATABASE_READ"),
+                          get_config_item_int(MAIL_PORT_READ, "MAIL_PORT_READ"),
+                          NULL,0) == NULL)
+    {
+      trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&read_conn));
+      return -1;
+    }
+
+#ifdef mysql_errno
+  if (mysql_errno(&read_conn)) {
+    trace(TRACE_ERROR,"dbconnect(): mysql_real_connect failed: %s",mysql_error(&read_conn));
     return -1;
   }
 #endif
@@ -68,7 +95,7 @@
 u64_t db_insert_result (const char *sequence_identifier)
 {
   u64_t insert_result;
-  insert_result=mysql_insert_id(&conn);
+  insert_result=mysql_insert_id(&write_conn);
   return insert_result;
 }
 
@@ -84,10 +111,10 @@
       if (querysize > 0 )
 	{
 	  trace(TRACE_DEBUG, "db_query(): executing [%s]", thequery);
-	  if (mysql_real_query(&conn, thequery, querysize) <0) 
+	  if (mysql_real_query(&write_conn, thequery, querysize) <0) 
 	    {
 	      trace(TRACE_ERROR,"db_query(): query [%s] failed: ", thequery);
-	      trace(TRACE_ERROR,"db_query(): mysql_real_query failed: %s\n",mysql_error(&conn)); 
+	      trace(TRACE_ERROR,"db_query(): mysql_real_query failed: %s\n",mysql_error(&write_conn)); 
 	      return -1;
 	    }
 	}
@@ -107,6 +134,40 @@
 }
 
 
+int db_query_read (const char *thequery)
+{
+  unsigned int querysize = 0;
+
+  if (thequery != NULL)
+    {
+      querysize = strlen(thequery);
+
+      if (querysize > 0 )
+	{
+	  trace(TRACE_DEBUG, "db_query_read(): executing [%s]", thequery);
+	  if (mysql_real_query(&read_conn, thequery, querysize) <0) 
+	    {
+	      trace(TRACE_ERROR,"db_query_read(): query [%s] failed: ", thequery);
+	      trace(TRACE_ERROR,"db_query_read(): mysql_real_query failed: %s\n",mysql_error(&read_conn)); 
+	      return -1;
+	    }
+	}
+      else
+	{
+	  trace (TRACE_ERROR,"db_query_read(): querysize is wrong: [%d]\n",querysize);
+	  return -1;
+	}
+    }
+  else
+    {
+      trace (TRACE_ERROR,"db_query_read(): query buffer is NULL, this is not supposed to happen\n",
+	     querysize);
+      return -1;
+    }
+  return 0;
+}
+
+
 /*
  * clears the configuration table
  */
@@ -146,7 +207,7 @@
   trace (TRACE_DEBUG,"db_get_config_item(): retrieving config_item %s by query %s\n",
 	 item, query);
 
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       if (type == CONFIG_MANDATORY)
 	trace (TRACE_FATAL,"db_get_config_item(): query failed could not get value for %s. "
@@ -159,15 +220,15 @@
       return NULL;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       if (type == CONFIG_MANDATORY)
 	trace(TRACE_FATAL,"db_get_config_item(): mysql_store_result failed: %s\n",
-	      mysql_error(&conn));
+	      mysql_error(&read_conn));
       else
 	if (type == CONFIG_EMPTY)
 	  trace (TRACE_ERROR,"db_get_config_item(): mysql_store_result failed (fatal): %s\n",
-		 mysql_error(&conn));
+		 mysql_error(&read_conn));
 
       return 0;
     }
@@ -211,14 +272,14 @@
 	   "WHERE m.mailbox_idnr = mb.mailbox_idnr AND mb.owner_idnr = %llu",
 	   userid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       /* query failed */
       trace (TRACE_ERROR, "db_get_quotum_used(): query to select mailbox id's failed");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_get_quotum_used(): could not store query result");
       return -1;
@@ -254,13 +315,13 @@
   snprintf (query, DEF_QUERYSIZE,
 	    "SELECT deliver_to FROM aliases WHERE alias = '%s'", alias);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_get_user_from_alias(): could not execute query");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_get_user_from_alias(): could not store query result");
       return -1;
@@ -293,14 +354,14 @@
             "SELECT alias_idnr FROM aliases WHERE alias = '%s' AND deliver_to = '%llu' "
 	    "AND client_idnr = %llu", alias, useridnr, clientid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       /* query failed */
       trace (TRACE_ERROR, "db_addalias(): query for searching alias failed");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_addalias(): could not store query result");
       return -1;
@@ -354,14 +415,14 @@
 		alias, deliver_to);
     }
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       /* query failed */
       trace (TRACE_ERROR, "db_addalias_ext(): query for searching alias failed");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR, "db_addalias_ext(): could not store query result");
       return -1;
@@ -436,24 +497,57 @@
 	    "name=\'%s\' AND owner_idnr=%llu",
 	   mailbox, useridnr);
 
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       trace(TRACE_ERROR, "db_get_mailboxid(): query failed");
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_get_mailboxid(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_mailboxid(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return 0;
     }
 
   if (mysql_num_rows(res)<1) 
     {
-      trace (TRACE_DEBUG,"db_get_mailboxid(): user has no mailbox named [%s]", mailbox);
-      mysql_free_result(res);
-      
-      return 0; 
+      if(get_config_item_int(0, "AUTO_CREATE_MAILBOX")==0) // No
+      {
+         mysql_free_result(res);
+         trace (TRACE_FATAL, "db_get_mailboxid(): user has no mailbox named [%s]", mailbox);
+         return 0;
+      }
+      else // Yes create automatically create mailbox
+      {
+         trace(TRACE_ERROR,"db_get_mailboxid(): user has no mailbox named [%s] - Creating", mailbox);
+         mysql_free_result(res);
+         db_createmailbox(mailbox, useridnr);
+
+  	      snprintf (query, DEF_QUERYSIZE,"SELECT mailbox_idnr FROM mailboxes WHERE "
+		                         "name=\'%s\' AND owner_idnr=%llu", mailbox, useridnr);
+
+         // double check to see if mailbox exists now
+         if (db_query_read(query)==-1)
+         {
+           trace(TRACE_ERROR, "db_get_mailboxid(): query failed");
+           return 0;
+         }
+
+      	if ((res = mysql_store_result(&read_conn)) == NULL)
+      	{
+   	      trace(TRACE_ERROR,"db_get_mailboxid(): mysql_store_result failed: %s",mysql_error(&read_conn));
+   	      return 0;
+         }
+      
+      	if (mysql_num_rows(res)<1)
+      	{
+            trace (TRACE_DEBUG,"db_get_mailboxid(): user has no mailbox named [%s]. Couldn't create.", mailbox);
+            mysql_free_result(res);
+            
+            return 0;
+         }
+         // if still here, the mailbox should have been created
+      }
     } 
 
   if ((row = mysql_fetch_row(res))==NULL)
@@ -479,15 +573,15 @@
 	   message_idnr);
 
   trace(TRACE_DEBUG,"db_get_message_mailboxid(): executing query : [%s]",query);
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR,"db_get_message_mailboxid(): mysql_store_result failed: %s",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       
       return 0;
     }
@@ -526,14 +620,14 @@
 	    "mb.mailbox_idnr = m.mailbox_idnr AND m.message_idnr = %llu",
 	    message_idnr);
 
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_get_useridnr(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_useridnr(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return 0;
     }
 
@@ -620,17 +714,17 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr FROM messages WHERE "
 	   "unique_id = '%s'", unique_id);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR,"db_update_message_multiple(): could not select messages: [%s]",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
       trace(TRACE_ERROR,"db_update_message_multiple(): mysql_store_result failed: [%s]",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
@@ -671,7 +765,7 @@
 	{
 	  trace(TRACE_ERROR, "db_update_message_multiple(): "
 		"could not update message data for message [%llu]: [%s]", uids[i],
-		mysql_error(&conn));
+		mysql_error(&write_conn));
 	  /* try to continue anyways */
 	}
     }
@@ -715,7 +809,7 @@
 		      "(messageblk,blocksize,message_idnr) VALUES ('");
       
   /* escape & add data */
-  esclen = mysql_real_escape_string(&conn, &escaped_query[startlen], block, len); 
+  esclen = mysql_real_escape_string(&write_conn, &escaped_query[startlen], block, len); 
            
   snprintf(&escaped_query[esclen + startlen /*- (escaped_query[esclen + startlen - 1] ? 0 : 1)*/ ],
 	   maxesclen - esclen - startlen, "', %llu, %llu)", len, msgid);
@@ -774,7 +868,7 @@
 		    "(messageblk,blocksize,message_idnr) SELECT '") - 1;
 
   /* escape & add data */
-  esclen = mysql_real_escape_string(&conn, &escaped_query[startlen], block, len); 
+  esclen = mysql_real_escape_string(&write_conn, &escaped_query[startlen], block, len); 
            
   snprintf(&escaped_query[esclen + startlen /*- (escaped_query[esclen + startlen - 1] ? 0 : 1)*/ ],
 	   maxesclen - esclen - startlen, 
@@ -809,15 +903,15 @@
 	   "mb.owner_idnr = %llu AND m.mailbox_idnr = mb.mailbox_idnr AND m.unique_id = '%s'",
 	   ownerid, unique_id);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
-      trace(TRACE_ERROR,"db_rollback_insert(): could not select message-id: %s", mysql_error(&conn));
+      trace(TRACE_ERROR,"db_rollback_insert(): could not select message-id: %s", mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_rollback_insert(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_rollback_insert(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return -1;
     }
   
@@ -868,15 +962,15 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT alias FROM aliases WHERE deliver_to = '%llu' ORDER BY alias "
 	   "DESC", userid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR,"db_get_user_aliases(): could not retrieve  list\n");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL) 
+  if ((res = mysql_store_result(&read_conn)) == NULL) 
     {
-      trace(TRACE_ERROR,"db_get_user_aliases(): mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_user_aliases(): mysql_store_result failed: %s",mysql_error(&read_conn));
       return -1;
     }
   
@@ -921,15 +1015,15 @@
 	   message_idnr);
   trace (TRACE_DEBUG,"db_send_message_lines(): executing query [%s]",query);
 
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       my_free(buffer);
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_send_message_lines: mysql_store_result failed: %s",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_send_message_lines: mysql_store_result failed: %s",mysql_error(&read_conn));
       my_free(buffer);
       return 0;
     }
@@ -1056,14 +1150,14 @@
 	   "unique_id!=\"\" order by status ASC",
 	   (db_get_mailboxid(useridnr, "INBOX")));
 
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_createsession(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_createsession(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       
       return -1;
     }
@@ -1141,7 +1235,8 @@
 	{
 	  /* yes they need an update, do the query */
 	  snprintf (query,DEF_QUERYSIZE,
-		    "UPDATE messages set status=%llu WHERE message_idnr=%llu AND status<002",
+		    "UPDATE messages set seen_flag=if(%llu=1, 1, seen_flag), status=%llu WHERE message_idnr=%llu AND status<002",
+		   ((struct message *)tmpelement->data)->virtual_messagestatus,
 		   ((struct message *)tmpelement->data)->virtual_messagestatus,
 		   ((struct message *)tmpelement->data)->realmessageid);
 	
@@ -1179,7 +1274,7 @@
   trace (TRACE_DEBUG,"db_check_mailboxsize(): executing query [%s]\n",
 	 query);
 
-  if (db_query(query) != 0)
+  if (db_query_read(query) != 0)
     {
       trace (TRACE_ERROR,"db_check_mailboxsize(): could not execute query [%s]\n",
 	     query);
@@ -1187,10 +1282,10 @@
       return -1;
     }
   
-  if ((localres = mysql_store_result(&conn)) == NULL)
+  if ((localres = mysql_store_result(&read_conn)) == NULL)
     {
       trace (TRACE_ERROR,"db_check_mailboxsize(): mysql_store_result failed: %s\n",
-	     mysql_error(&conn));
+	     mysql_error(&read_conn));
       
       return -1;
     }
@@ -1232,7 +1327,7 @@
 	   *useridnr);
 
 
-  if (db_query(query) != 0)
+  if (db_query_read(query) != 0)
     {
       trace (TRACE_ERROR,"db_check_sizelimit(): could not execute query [%s]\n",
 	     query);
@@ -1240,10 +1335,10 @@
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace (TRACE_ERROR,"db_check_sizelimit(): mysql_store_result failed: %s\n",
-	     mysql_error(&conn));
+	     mysql_error(&read_conn));
       
       return -1;
     }
@@ -1332,16 +1427,16 @@
   snprintf (query,DEF_QUERYSIZE,"SELECT message_idnr FROM messages WHERE status=003");
   trace (TRACE_DEBUG,"db_deleted_purge(): executing query [%s]",query);
 	
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       trace(TRACE_ERROR,"db_deleted_purge(): Cound not fetch message ID numbers: [%s]",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_deleted_purge(): mysql_store_result failed: [%s]",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_deleted_purge(): mysql_store_result failed: [%s]",mysql_error(&read_conn));
       return -1;
     }
   
@@ -1371,7 +1466,7 @@
       if (db_query(query)==-1)
 	{
 	  trace(TRACE_ERROR, "db_deleted_purge(): could not delete blocks for message [%llu]: %s",
-		msgids[i], mysql_error(&conn));
+		msgids[i], mysql_error(&write_conn));
 	  my_free(msgids);
 	  msgids = 0;
 	  mysql_free_result(res);
@@ -1390,13 +1485,13 @@
   if (db_query(query)==-1)
     {
       trace(TRACE_ERROR, "db_deleted_purge(): could not delete messages: %s", 
-	    mysql_error(&conn));
+	    mysql_error(&write_conn));
     
       mysql_free_result(res);
       return -1;
     }
 	
-  affected_rows = mysql_affected_rows(&conn);
+  affected_rows = mysql_affected_rows(&write_conn);
   mysql_free_result(res);
   
 
@@ -1420,7 +1515,7 @@
     }
  
   
-  return mysql_affected_rows(&conn);
+  return mysql_affected_rows(&write_conn);
 }
 
 
@@ -1441,17 +1536,17 @@
   strftime(timestr, sizeof(timestr), "%G-%m-%d %H:%M:%S", &tm);
 
   snprintf(query, DEF_QUERYSIZE, "SELECT idnr FROM pbsp WHERE ipnumber = '%s'", ip);
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR,"db_log_ip(): could not access ip-log table (pop/imap-before-smtp): %s",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_log_ip(): could not check ip-log (pop/imap-before-smtp): %s",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
@@ -1468,7 +1563,7 @@
       if (db_query(query) == -1)
 	{
 	  trace(TRACE_ERROR,"db_log_ip(): could not update ip-log (pop/imap-before-smtp): %s",
-		mysql_error(&conn));
+		mysql_error(&write_conn));
 	  return -1;
 	}
     }
@@ -1481,7 +1576,7 @@
       if (db_query(query) == -1)
 	{
 	  trace(TRACE_ERROR,"db_log_ip(): could not log IP number to dbase (pop/imap-before-smtp): %s",
-		mysql_error(&conn));
+		mysql_error(&write_conn));
 	  return -1;
 	}
     }
@@ -1501,7 +1596,7 @@
   if (db_query(query) == -1)
     {
       trace(TRACE_ERROR,"db_cleanup_log(): error executing query [%s] : [%s]",
-	    query, mysql_error(&conn));
+	    query, mysql_error(&write_conn));
       return -1;
     }
 
@@ -1525,7 +1620,7 @@
 	}
 
       /* store & free result set */
-      if ((res = mysql_store_result(&conn)) != NULL)
+      if ((res = mysql_store_result(&write_conn)) != NULL)
 	mysql_free_result(res);
       
     }
@@ -1550,16 +1645,16 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT mailbox_idnr FROM mailboxes WHERE owner_idnr=%llu",
 	   userid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR,"db_empty_mailbox(): error executing query: [%s]",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_empty_mailbox(): mysql_store_result failed: [%s]",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_empty_mailbox(): mysql_store_result failed: [%s]",mysql_error(&read_conn));
       return -1;
     }
 
@@ -1617,15 +1712,15 @@
   list_init(lostlist);
 
   snprintf(query, DEF_QUERYSIZE, "SELECT messageblk_idnr FROM messageblks ORDER BY messageblk_idnr DESC LIMIT 0,1");
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       trace (TRACE_ERROR,"db_icheck_messageblks(): Could not execute query [%s]",query);
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       return -1;
     }
 
@@ -1645,15 +1740,15 @@
       snprintf(query, DEF_QUERYSIZE, "SELECT messageblk_idnr, message_idnr FROM messageblks LIMIT %llu,%llu", 
 	       start, (u64_t)ICHECK_RESULTSETSIZE);
 
-      if (db_query(query)==-1)
+      if (db_query_read(query)==-1)
 	{
 	  trace (TRACE_ERROR,"db_icheck_messageblks(): Could not execute query [%s]",query);
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&conn));
+	  trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -1688,7 +1783,7 @@
 	  snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr FROM messages WHERE message_idnr = %llu",
 		   currids[j].msgid);
  
-	  if (db_query(query)==-1)
+	  if (db_query_read(query)==-1)
 	    {
 	      list_freelist(&lostlist->start);
 	      my_free(currids);
@@ -1697,9 +1792,9 @@
 	      return -1;
 	    }
 	  
-	  if ((res = mysql_store_result(&conn)) == NULL)
+	  if ((res = mysql_store_result(&read_conn)) == NULL)
 	    {
-	      trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&conn));
+	      trace (TRACE_ERROR,"db_icheck_messageblks(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	      return -1;
 	    }
 
@@ -1749,15 +1844,15 @@
   list_init(lostlist);
 
   snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr FROM messages ORDER BY message_idnr DESC LIMIT 0,1");
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       trace (TRACE_ERROR,"db_icheck_messages(): Could not execute query [%s]",query);
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       return -1;
     }
 
@@ -1777,15 +1872,15 @@
       snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr, mailbox_idnr FROM messages LIMIT %llu,%llu", 
 	       start, (u64_t)ICHECK_RESULTSETSIZE);
 
-      if (db_query(query)==-1)
+      if (db_query_read(query)==-1)
 	{
 	  trace (TRACE_ERROR,"db_icheck_messages(): Could not execute query [%s]",query);
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+	  trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -1820,7 +1915,7 @@
 	  snprintf(query, DEF_QUERYSIZE, "SELECT mailbox_idnr FROM mailboxes WHERE mailbox_idnr = %llu",
 		   currids[j].mboxid);
  
-	  if (db_query(query)==-1)
+	  if (db_query_read(query)==-1)
 	    {
 	      list_freelist(&lostlist->start);
 	      my_free(currids);
@@ -1829,9 +1924,9 @@
 	      return -1;
 	    }
 	  
-	  if ((res = mysql_store_result(&conn)) == NULL)
+	  if ((res = mysql_store_result(&read_conn)) == NULL)
 	    {
-	      trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&conn));
+	      trace (TRACE_ERROR,"db_icheck_messages(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	      return -1;
 	    }
 
@@ -1881,15 +1976,15 @@
   list_init(lostlist);
 
   snprintf(query, DEF_QUERYSIZE, "SELECT mailbox_idnr FROM mailboxes ORDER BY mailbox_idnr DESC LIMIT 0,1");
-  if (db_query(query)==-1)
+  if (db_query_read(query)==-1)
     {
       trace (TRACE_ERROR,"db_icheck_mailboxes(): Could not execute query [%s]",query);
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&conn));
+      trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&read_conn));
       return -1;
     }
 
@@ -1909,15 +2004,15 @@
       snprintf(query, DEF_QUERYSIZE, "SELECT mailbox_idnr, owner_idnr FROM mailboxes LIMIT %llu,%llu", 
 	       start, (u64_t)ICHECK_RESULTSETSIZE);
 
-      if (db_query(query)==-1)
+      if (db_query_read(query)==-1)
 	{
 	  trace (TRACE_ERROR,"db_icheck_mailboxes(): Could not execute query [%s]",query);
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&conn));
+	  trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -1952,7 +2047,7 @@
 	  snprintf(query, DEF_QUERYSIZE, "SELECT user_idnr FROM users WHERE user_idnr = %llu",
 		   currids[j].userid);
  
-	  if (db_query(query)==-1)
+	  if (db_query_read(query)==-1)
 	    {
 	      list_freelist(&lostlist->start);
 	      my_free(currids);
@@ -1961,9 +2056,9 @@
 	      return -1;
 	    }
 	  
-	  if ((res = mysql_store_result(&conn)) == NULL)
+	  if ((res = mysql_store_result(&read_conn)) == NULL)
 	    {
-	      trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&conn));
+	      trace (TRACE_ERROR,"db_icheck_mailboxes(): mysql_store_result failed:  %s",mysql_error(&read_conn));
 	      mysql_free_result(res);
 	      return -1;
 	    }
@@ -2031,16 +2126,16 @@
 
   snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr FROM messages WHERE mailbox_idnr = %llu",uid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_delete_mailbox(): could not select message ID's for mailbox [%llu]: [%s]", 
-	    uid, mysql_error(&conn));
+	    uid, mysql_error(&read_conn));
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_delete_mailbox(): mysql_store_result() failed [%s]",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_delete_mailbox(): mysql_store_result() failed [%s]",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2059,7 +2154,7 @@
 	  if (db_query(query) == -1)
 	    {
 	      trace(TRACE_ERROR, "db_delete_mailbox(): could not delete mailbox [%llu]: [%s]", 
-		    uid, mysql_error(&conn));	  
+		    uid, mysql_error(&write_conn));	  
 	      return -1;
 	    }
 	}
@@ -2121,7 +2216,8 @@
   my_free(query);
   query = NULL;
 
-  mysql_close(&conn);
+  mysql_close(&write_conn);
+  mysql_close(&read_conn);
   return 0;
 }
 
@@ -2167,7 +2263,7 @@
     }
 
   /* fetch the id of the new message */
-  msgid = mysql_insert_id(&conn);
+  msgid = mysql_insert_id(&write_conn);
   
   result = db_check_sizelimit(datalen, msgid, &uid);
   if (result == -1 || result == -2)
@@ -2341,16 +2437,16 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT mailbox_idnr FROM mailboxes WHERE name='%s' AND owner_idnr=%llu",
 	   name, useridnr);
   
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR,"db_findmailbox(): could not select mailbox '%s'\n",name);
       return (u64_t)(-1);
     }
 
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_findmailbox(): mysql_store_result failed:  %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_findmailbox(): mysql_store_result failed:  %s\n",mysql_error(&read_conn));
       return (u64_t)(-1);
     }
   
@@ -2393,17 +2489,17 @@
     snprintf(query, DEF_QUERYSIZE, "SELECT name, mailbox_idnr FROM mailboxes WHERE "
 	     "owner_idnr=%llu", ownerid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR,"db_findmailbox_by_regex(): error during mailbox query\r\n");
       return (-1);
     }
 
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_findmailbox_by_regex(): mysql_store_result failed:  %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return (-1);
     }
   
@@ -2489,16 +2585,16 @@
 	   "draft_flag "
 	   " FROM mailboxes WHERE mailbox_idnr = %llu", mb->uid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_getmailbox(): could not select mailbox\n");
       return -1;
     }
 
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed:  %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed:  %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2526,15 +2622,15 @@
 	   "FROM messages WHERE mailbox_idnr = %llu "
 	   "AND status<2 AND unique_id!=\"\" ORDER BY message_idnr ASC", mb->uid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_getmailbox(): could not retrieve messages\n");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2569,7 +2665,7 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr FROM messages WHERE unique_id!=\"\""
 	   "ORDER BY message_idnr DESC LIMIT 0,1");
   
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_getmailbox(): could not determine highest message ID\n");
 
@@ -2579,9 +2675,9 @@
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_getmailbox(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       
       my_free(mb->seq_list);
       mb->seq_list = NULL;
@@ -2644,16 +2740,16 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT name FROM mailboxes WHERE"
 	   " mailbox_idnr = %llu AND owner_idnr = %llu", uid, useridnr);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_listmailboxchildren(): could not retrieve mailbox name\n");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_listmailboxchildren(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
@@ -2669,16 +2765,16 @@
   mysql_free_result(res);
   
   /* now find the children */
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_listmailboxchildren(): could not retrieve mailbox name\n");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_listmailboxchildren(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return -1;
     }
 
@@ -2775,15 +2871,15 @@
 
   snprintf(query, DEF_QUERYSIZE, "SELECT no_select FROM mailboxes WHERE mailbox_idnr = %llu",uid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_isselectable(): could not retrieve select-flag\n");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_isselectable(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_isselectable(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2823,15 +2919,15 @@
 
   snprintf(query, DEF_QUERYSIZE, "SELECT no_inferiors FROM mailboxes WHERE mailbox_idnr = %llu",uid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_noinferiors(): could not retrieve noinferiors-flag\n");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_noinferiors(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_noinferiors(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -2926,15 +3022,15 @@
       snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr FROM messages WHERE"
 	       " mailbox_idnr = %llu AND deleted_flag=1 AND status<2 ORDER BY message_idnr DESC", uid);
 
-      if (db_query(query) == -1)
+      if (db_query_read(query) == -1)
 	{
 	  trace(TRACE_ERROR, "db_expunge(): could not select messages in mailbox\n");
 	  return -1;
 	}
       
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace(TRACE_ERROR,"db_expunge(): mysql_store_result failed: %s\n",mysql_error(&conn));
+	  trace(TRACE_ERROR,"db_expunge(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -3044,15 +3140,15 @@
 
       snprintf(query, DEF_QUERYSIZE, "SELECT messagesize FROM messages WHERE message_idnr = %llu", msgid);
   
-      if (db_query(query) == -1)
+      if (db_query_read(query) == -1)
 	{
 	  trace(TRACE_ERROR, "db_copymsg(): could not fetch message size for message id [%llu]\n", msgid);
 	  return -1;
 	}
 
-      if ((res = mysql_store_result(&conn)) == NULL)
+      if ((res = mysql_store_result(&read_conn)) == NULL)
 	{
-	  trace(TRACE_ERROR,"db_copymsg(): mysql_store_result failed: %s\n",mysql_error(&conn));
+	  trace(TRACE_ERROR,"db_copymsg(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
 	  return -1;
 	}
 
@@ -3103,7 +3199,7 @@
       return -1;
     }
 
-  tmpid = mysql_insert_id(&conn);
+  tmpid = mysql_insert_id(&write_conn);
 
   /* copy message blocks */
   snprintf(query, DEF_QUERYSIZE, "INSERT INTO tmpmessageblk (message_idnr, messageblk, blocksize) "
@@ -3149,7 +3245,7 @@
     }
 
   /* retrieve id of new message */
-  newid = mysql_insert_id(&conn);
+  newid = mysql_insert_id(&write_conn);
 
   /* copy message blocks */
   snprintf(query, DEF_QUERYSIZE, "INSERT INTO messageblks (message_idnr, messageblk, blocksize) "
@@ -3214,15 +3310,15 @@
 
   snprintf(query, DEF_QUERYSIZE, "SELECT name FROM mailboxes WHERE mailbox_idnr = %llu",uid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_getmailboxname(): could not retrieve name\n");
       return -1;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_getmailboxname(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_getmailboxname(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return -1;
     }
 
@@ -3279,15 +3375,15 @@
 	   "AND status<2 AND seen_flag = 0 AND unique_id != \"\" "
 	   "ORDER BY message_idnr ASC LIMIT 0,1", uid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_first_unseen(): could not select messages\n");
       return (u64_t)(-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_first_unseen(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_first_unseen(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (u64_t)(-1);
     }
   
@@ -3382,15 +3478,15 @@
 	   "message_idnr = %llu AND status<2 AND unique_id != \"\" "
 	   "AND mailbox_idnr = %llu", flagname, msguid, mailboxuid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_get_msgflag(): could not select message\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_get_msgflag(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_msgflag(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
   
@@ -3428,15 +3524,15 @@
 	   "message_idnr = %llu AND status<2 AND unique_id != '' "
 	   "AND mailbox_idnr = %llu", msguid, mailboxuid);
  
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_get_msgflag_all(): could not select message\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_get_msgflag_all(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_msgflag_all(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
   
@@ -3636,15 +3732,15 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT internal_date FROM messages WHERE mailbox_idnr = %llu "
 	   "AND message_idnr = %llu AND unique_id!=\"\"", mailboxuid, msguid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_get_msgdate(): could not get message\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_get_msgdate(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_msgdate(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
@@ -3696,15 +3792,15 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT rfcsize FROM messages WHERE message_idnr = %llu "
 	   "AND status<2 AND unique_id != '' AND mailbox_idnr = %llu", msguid, mailboxuid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_get_rfcsize(): could not fetch RFC size from table\n");
       return -1;
     }
   
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_get_rfcsize(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_get_rfcsize(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
@@ -3751,16 +3847,16 @@
 	   "AND status<2 AND unique_id != '' "
 	   "ORDER BY message_idnr ASC", msguidlow, msguidhigh, mailboxuid);
  
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_get_msginfo_range(): could not select message\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_get_msginfo_range(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return (-1);
     }
   
@@ -3842,16 +3938,16 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT messageblk FROM messageblks WHERE "
 	   "message_idnr = %llu ORDER BY messageblk_idnr LIMIT 1", msguid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_get_main_header(): could not get message header\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
       trace(TRACE_ERROR,"db_get_main_header(): mysql_store_result failed: %s\n",
-	    mysql_error(&conn));
+	    mysql_error(&read_conn));
       return (-1);
     }
 
@@ -3925,15 +4021,15 @@
 	   " ORDER BY messageblk_idnr", 
 	   msguid);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_search_range(): could not get message\n");
       return 0;
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_search_range(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_search_range(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return 0;
     }
 
@@ -4012,15 +4108,15 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr FROM messages WHERE message_idnr = %llu AND "
 	   "mailbox_idnr = %llu AND status<002 AND unique_id!=\"\"", msguid, mailboxuid); 
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_mailbox_msg_match(): could not get message\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_mailbox_msg_match(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_mailbox_msg_match(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
diff -ru -I Id: -x CVS -N dbmail/mysql/dbsearchmysql.c dbmail.working/mysql/dbsearchmysql.c
--- dbmail/mysql/dbsearchmysql.c	2002-11-13 11:21:07.000000000 +1300
+++ dbmail.working/mysql/dbsearchmysql.c	2002-11-06 17:33:27.000000000 +1300
@@ -16,7 +16,7 @@
  * var's from dbmysql.c: 
  */
 extern char *query; 
-extern MYSQL conn;
+extern MYSQL read_conn;
 extern MYSQL_RES *res;
 extern MYSQL_ROW row;
 
@@ -56,15 +56,15 @@
   snprintf(query, DEF_QUERYSIZE, "SELECT message_idnr FROM messages WHERE mailbox_idnr = %llu "
 	   "AND status<2 AND unique_id!=\"\" AND %s", mb->uid, key);
 
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_search(): could not execute query\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_search(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_search(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
@@ -345,15 +345,15 @@
       i++;
     }
       
-  if (db_query(query) == -1)
+  if (db_query_read(query) == -1)
     {
       trace(TRACE_ERROR, "db_search_messages(): could not execute query\n");
       return (-1);
     }
 
-  if ((res = mysql_store_result(&conn)) == NULL)
+  if ((res = mysql_store_result(&read_conn)) == NULL)
     {
-      trace(TRACE_ERROR,"db_search_messages(): mysql_store_result failed: %s\n",mysql_error(&conn));
+      trace(TRACE_ERROR,"db_search_messages(): mysql_store_result failed: %s\n",mysql_error(&read_conn));
       return (-1);
     }
 
