Index: trunk/src/sh_calls.c
===================================================================
--- trunk/src/sh_calls.c	(revision 2)
+++ trunk/src/sh_calls.c	(revision 3)
@@ -138,4 +138,12 @@
 int sh_calls_set_bind_addr (char * str)
 {
+  static int reject = 0;
+
+  if (reject == 1)
+    return (0);
+
+  if (sh.flag.opts == S_TRUE)  
+    reject = 1;
+
   if (0 == /*@-unrecog@*/inet_aton(str, &bind_addr)/*@+unrecog@*/) 
     {
Index: trunk/src/sh_database.c
===================================================================
--- trunk/src/sh_database.c	(revision 2)
+++ trunk/src/sh_database.c	(revision 3)
@@ -38,4 +38,6 @@
 #include "sh_error.h"
 #include "sh_utils.h"
+
+extern int safe_logger (int signal, int method, pid_t thepid);
 
 #undef  FIL__
@@ -1009,5 +1011,5 @@
 {
   int               status = 0;
-  char            * p;
+  const char      * p;
   static MYSQL    * db_conn = NULL;
   static SH_TIMEOUT sh_timer = { 0, 3600, S_TRUE };
@@ -1447,4 +1449,8 @@
 	  retv = S_FALSE;
 	}
+      else if (*p == '\"' && escp == 0)
+	{
+	  retv = S_FALSE;
+	}
       else 
 	{
@@ -1453,4 +1459,6 @@
       ++p;
     }
+  if (escp == 1) 
+    retv = S_FALSE;
   return retv;
 }
@@ -1546,4 +1554,7 @@
 
 	      if (S_FALSE == is_escaped(&p[j+2])) {
+		sh_error_handle((-1), FIL__, __LINE__, 0, MSG_E_SUBGEN,
+				_("Message not properly escaped"), 
+				_("sh_database_parse"));
 		SL_RETURN(NULL, _("sh_database_parse"));
 	      }
Index: trunk/src/sh_forward.c
===================================================================
--- trunk/src/sh_forward.c	(revision 2)
+++ trunk/src/sh_forward.c	(revision 3)
@@ -1944,4 +1944,6 @@
   SL_RET0(_("free_client"));
 }
+
+extern int safe_logger (int signal, int method, pid_t thepid);
 
 int sh_forward_register_client (char * str)
Index: trunk/src/sh_hash.c
===================================================================
--- trunk/src/sh_hash.c	(revision 2)
+++ trunk/src/sh_hash.c	(revision 3)
@@ -653,4 +653,5 @@
 {
   sh_file_t * p;
+  sh_file_t * q;
   int key;
 
@@ -674,7 +675,10 @@
 	      strlen(s->fullpath) == strlen(p->fullpath))
 	    {
-	      SH_FREE(s->fullpath);
-	      if(s->linkpath)
-		SH_FREE(s->linkpath);
+	      q = p->next;
+	      SH_FREE(p->fullpath);
+	      if(p->linkpath)
+		SH_FREE(p->linkpath);
+	      memcpy(p, s, sizeof(sh_file_t));
+	      p->next = q;
 	      SH_FREE(s);
 	      s = NULL;
Index: trunk/src/sh_kern.c
===================================================================
--- trunk/src/sh_kern.c	(revision 2)
+++ trunk/src/sh_kern.c	(revision 3)
@@ -859,5 +859,5 @@
    * Stored(old) is system_call_code[]
    */
-  if (sh.flag.checkSum == SH_CHECK_INIT)
+  if (sh.flag.checkSum == SH_CHECK_INIT || sh.flag.update == S_TRUE)
     {
       store0 = 0; store1 = 0; store2 = 0;
@@ -935,5 +935,5 @@
    * Stored(old) is sh_syscalls[] array.
    */
-  if (sh.flag.checkSum == SH_CHECK_INIT)
+  if (sh.flag.checkSum == SH_CHECK_INIT || sh.flag.update == S_TRUE)
     {
       for (i = 0; i < SH_MAXCALLS; ++i) 
@@ -1125,5 +1125,5 @@
   if (ShKernIDT == S_TRUE)
     {
-      if (sh.flag.checkSum == SH_CHECK_INIT)
+      if (sh.flag.checkSum == SH_CHECK_INIT || sh.flag.update == S_TRUE)
 	{
 	  datasize = 8;
@@ -1447,5 +1447,5 @@
    * Stored(old) is sh_syscalls[] array.
    */
-  if (sh.flag.checkSum == SH_CHECK_INIT)
+  if (sh.flag.checkSum == SH_CHECK_INIT || sh.flag.update == S_TRUE)
     {
       for (i = 0; i < SH_MAXCALLS; ++i) 
