diff -urN dbmail-2.0cvs030304.orig/config.c dbmail-2.0cvs030304.freecfg/config.c
--- dbmail-2.0cvs030304.orig/config.c	2004-03-03 04:30:07.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/config.c	2004-03-03 21:22:46.000000000 -0500
@@ -225,4 +225,8 @@
 }
 
 
-
+void FreeConfig(struct list *cfg_items)
+{
+     if(cfg_items && cfg_items->start) 
+      list_freelist(&cfg_items->start);
+}
diff -urN dbmail-2.0cvs030304.orig/dbmail.h dbmail-2.0cvs030304.freecfg/dbmail.h
--- dbmail-2.0cvs030304.orig/dbmail.h	2004-01-27 10:53:34.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/dbmail.h	2004-03-03 21:22:46.000000000 -0500
@@ -129,4 +129,11 @@
  */
 void SetTraceLevel(struct list *cfg_items);
 
+/** 
+ \brief free config listnodes
+ \param cfg_items list of configuration items
+ \the config items list is freeed with list_freelist
+ */
+void FreeConfig(struct list *cfg_items);
+
 #endif
diff -urN dbmail-2.0cvs030304.orig/imapd.c dbmail-2.0cvs030304.freecfg/imapd.c
--- dbmail-2.0cvs030304.orig/imapd.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/imapd.c	2004-03-03 21:22:46.000000000 -0500
@@ -110,6 +110,9 @@
       SetTraceLevel(&imapItems);
       GetDBParams(&_db_params, &sysItems);
 
+      FreeConfig(&imapItems);
+      FreeConfig(&sysItems);
+
       config.ClientHandler = IMAPClientHandler;
       config.timeoutMsg = IMAP_TIMEOUT_MSG;
 
@@ -159,8 +162,6 @@
 	    }
 	}
 
-      list_freelist(&imapItems.start);
-      list_freelist(&sysItems.start);
       close(config.listenSocket);
       
     } while (result == 1 && !mainStop) ; /* 1 means reread-config and restart */
diff -urN dbmail-2.0cvs030304.orig/lmtpd.c dbmail-2.0cvs030304.freecfg/lmtpd.c
--- dbmail-2.0cvs030304.orig/lmtpd.c	2004-03-03 04:30:07.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/lmtpd.c	2004-03-03 21:22:46.000000000 -0500
@@ -102,6 +102,10 @@
       SetTraceLevel(&lmtpItems);
       GetDBParams(&_db_params, &sysItems);
 
+      FreeConfig(&smtpItems);
+      FreeConfig(&lmtpItems);
+      FreeConfig(&sysItems);
+  
       config.ClientHandler = lmtp_handle_connection;
       config.timeoutMsg = LMTP_TIMEOUT_MSG;
 
@@ -152,9 +156,6 @@
 	    }
 	}
 
-      list_freelist(&smtpItems.start);
-      list_freelist(&lmtpItems.start);
-      list_freelist(&sysItems.start);
       close(config.listenSocket);
 
     } while (result == 1 && !mainStop) ; /* 1 means reread-config and restart */
diff -urN dbmail-2.0cvs030304.orig/main.c dbmail-2.0cvs030304.freecfg/main.c
--- dbmail-2.0cvs030304.orig/main.c	2004-03-03 04:30:07.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/main.c	2004-03-03 21:23:23.000000000 -0500
@@ -97,6 +97,8 @@
   SetTraceLevel(&smtpItems);
   GetDBParams(&_db_params, &sysItems);
 
+  FreeConfig(&sysItems);
+
   list_init(&users);
   list_init(&dsnusers);
   list_init(&mimelist);
@@ -341,8 +343,7 @@
   trace(TRACE_DEBUG, "main(): freeing memory blocks");
   if (header != NULL)
       my_free(header);
-  list_freelist(&sysItems.start);
-  list_freelist(&smtpItems.start);
+  FreeConfig(&smtpItems);
   list_freelist(&mimelist.start);
   list_freelist(&returnpath.start);
   list_freelist(&dsnusers.start);
diff -urN dbmail-2.0cvs030304.orig/maintenance.c dbmail-2.0cvs030304.freecfg/maintenance.c
--- dbmail-2.0cvs030304.orig/maintenance.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/maintenance.c	2004-03-03 21:22:46.000000000 -0500
@@ -76,6 +76,7 @@
   ReadConfig("DBMAIL", configFile, &sysItems);
   SetTraceLevel(&sysItems);
   GetDBParams(&_db_params, &sysItems);
+  FreeConfig(&sysItems);
 	
   setvbuf(stdout,0,_IONBF,0);
   printf ("*** dbmail-maintenance ***\n");
diff -urN dbmail-2.0cvs030304.orig/pop3d.c dbmail-2.0cvs030304.freecfg/pop3d.c
--- dbmail-2.0cvs030304.orig/pop3d.c	2004-01-07 10:00:16.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/pop3d.c	2004-03-03 21:22:46.000000000 -0500
@@ -135,6 +135,9 @@
       SetTraceLevel(&popItems);
       GetDBParams(&_db_params, &sysItems);
 
+      FreeConfig(&popItems);
+      FreeConfig(&popItems);
+
       config.ClientHandler = pop3_handle_connection;
       config.timeoutMsg = POP_TIMEOUT_MSG;
 
@@ -185,8 +188,6 @@
 	    }
 	}
 
-      list_freelist(&popItems.start);
-      list_freelist(&sysItems.start);
       close(config.listenSocket);
 
     } while (result == 1 && !mainStop) ; /* 1 means reread-config and restart */
diff -urN dbmail-2.0cvs030304.orig/timsieved.c dbmail-2.0cvs030304.freecfg/timsieved.c
--- dbmail-2.0cvs030304.orig/timsieved.c	2004-01-30 11:54:11.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/timsieved.c	2004-03-03 21:22:46.000000000 -0500
@@ -103,6 +103,10 @@
       SetTraceLevel(&timsItems);
       GetDBParams(&_db_params, &sysItems);
 
+      FreeConfig(&smtpItems);
+      FreeConfig(&timsItems);
+      FreeConfig(&sysItems);
+
       config.ClientHandler = tims_handle_connection;
       config.timeoutMsg = TIMS_TIMEOUT_MSG;
 
@@ -153,9 +157,6 @@
 	    }
 	}
 
-      list_freelist(&smtpItems.start);
-      list_freelist(&timsItems.start);
-      list_freelist(&sysItems.start);
       close(config.listenSocket);
 
     } while (result == 1 && !mainStop) ; /* 1 means reread-config and restart */
diff -urN dbmail-2.0cvs030304.orig/user.c dbmail-2.0cvs030304.freecfg/user.c
--- dbmail-2.0cvs030304.orig/user.c	2004-02-11 03:54:43.000000000 -0500
+++ dbmail-2.0cvs030304.freecfg/user.c	2004-03-03 21:22:46.000000000 -0500
@@ -108,6 +108,8 @@
   SetTraceLevel(&sysItems);
   GetDBParams(&_db_params, &sysItems);
 
+  FreeConfig(&sysItems);
+
   quiet_printf ("\n*** dbmail-adduser ***\n");
 	
   /* open database connection */
