Index: trunk/src/samhain_stealth.c
===================================================================
--- trunk/src/samhain_stealth.c	(revision 204)
+++ trunk/src/samhain_stealth.c	(revision 205)
@@ -277,8 +277,11 @@
       fprintf(stdout, _("   -s hide file 'what' in PS image 'where'\n"));
       fprintf(stdout, _("   -g get hidden data from PS image 'where'\n"));
-      fprintf(stdout, _("      (output to stdout)\n\n"));
+      fprintf(stdout, _("      (output to stdout)\n"));
       fprintf(stdout, _("   -o size of file 'where' = offset to "\
 			"end-of-file\n"));
-      fprintf(stdout, _("      (same as wc -c).\n"));
+      fprintf(stdout, _("      (same as wc -c).\n\n"));
+      fprintf(stdout, _(" Example: let bar.ps be the ps file, and foo the config file\n"));
+      fprintf(stdout, _("   1) extract with: samhain_stealth -g bar.ps >foo\n"));
+      fprintf(stdout, _("   2) hide with:    samhain_stealth -s bar.ps foo\n\n"));
 
       fprintf(stdout, _(" This program hides a file in an UNCOMPRESSED "\
@@ -294,5 +297,5 @@
       fprintf(stdout, _(" The program does not check the compression type of "\
 	      "the PS file.\n"));
-      fprintf(stdout, _(" Just have a look at the result to check.\n\n"));
+      fprintf(stdout, _(" Just have a look at the result to check.\n"));
       return;
 }
Index: trunk/src/sh_hash.c
===================================================================
--- trunk/src/sh_hash.c	(revision 204)
+++ trunk/src/sh_hash.c	(revision 205)
@@ -1440,4 +1440,11 @@
 }
 
+static int sh_loosedircheck = S_FALSE;
+
+int sh_hash_loosedircheck(const char * str)
+{
+  return sh_util_flagval(str, &sh_loosedircheck);
+}
+
 
 static void sh_hash_pushdata_int (file_type * buf, char * fileHash)
@@ -3056,4 +3063,13 @@
     }
   change_code[10] = '\0';
+
+  /* --- Directories special case ---
+   */
+  if (p->theFile.c_mode[0] == 'd'                               &&
+      0 == (modi_mask & ~(MODI_SIZ|MODI_ATM|MODI_CTM|MODI_MTM)) && 
+      sh_loosedircheck == S_TRUE)
+    {
+      modi_mask = 0;
+    }
 
   /* --- Report full details. ---
Index: trunk/src/sh_processcheck.c
===================================================================
--- trunk/src/sh_processcheck.c	(revision 204)
+++ trunk/src/sh_processcheck.c	(revision 205)
@@ -1092,6 +1092,9 @@
  * with PID = i + 1024
  */
+static size_t p_store = 0;
+
 static int openvz_ok(short * res, size_t i)
 {
+
   if (sh_prochk_openvz == S_FALSE) {
     return 0;
@@ -1112,7 +1115,12 @@
     }
 
-  if (openvz_hidden)
-    {
+  if (openvz_hidden > 0)
+    {
+      p_store = i;
       --openvz_hidden;
+      return 1;
+    }
+  else if (i == p_store)
+    {
       return 1;
     }
@@ -1409,4 +1417,6 @@
   sh_prochk_interval = SH_PROCHK_INTERVAL;
   sh_prochk_openvz   = S_FALSE;
+  p_store            = 0;
+  openvz_hidden      = 0;
 
   sh_prochk_free_list(process_check);
Index: trunk/src/sh_readconf.c
===================================================================
--- trunk/src/sh_readconf.c	(revision 204)
+++ trunk/src/sh_readconf.c	(revision 205)
@@ -932,4 +932,6 @@
     sh_unix_setcheckacl },
 #endif
+  { N_("loosedircheck"),      SH_SECTION_MISC,   SH_SECTION_NONE,
+    sh_hash_loosedircheck },
   { N_("addokchars"),         SH_SECTION_MISC,   SH_SECTION_NONE,
     sh_util_obscure_ok },
Index: trunk/src/sh_unix.c
===================================================================
--- trunk/src/sh_unix.c	(revision 204)
+++ trunk/src/sh_unix.c	(revision 205)
@@ -480,5 +480,5 @@
   sl_strlcat(msg, details, 128);
   (void) safe_logger (thesignal, method, msg);
-  _exit(EXIT_FAILURE);
+  raise(SIGKILL);
 }
 
@@ -526,5 +526,5 @@
 	  safe_logger (mysignal, 0, NULL);
 	}
-      _exit(mysignal);
+      raise(SIGKILL);
     }
   else
@@ -582,5 +582,5 @@
   if (immediate_exit_fast < 2)
     safe_logger (mysignal, 0, NULL);
-  _exit(mysignal);
+  raise(SIGKILL);
 #else
 
@@ -610,5 +610,5 @@
   else if (immediate_exit_fast != 0)
     {
-      _exit(mysignal);
+      raise(SIGKILL);
     }
 
@@ -1450,4 +1450,8 @@
       }
   }
+
+#ifdef HAVE_TZSET
+  tzset();
+#endif
 
   SL_RET0(_("sh_unix_zeroenv"));
@@ -4975,5 +4979,5 @@
     (tv.tv_usec - save_tv.tv_usec);
   if (difftv > 500000)
-    _exit(6);
+    raise(SIGKILL);
 #endif
   sh_not_traced += signum;
