Apply patch from Toomas Kiisk <vix@cyber.ee> and complete it.
diff --git a/CHANGES b/CHANGES
index 38dc3dc..42c32dc 100644
--- a/CHANGES
+++ b/CHANGES
@@ -12,6 +12,10 @@
          *) applies to 0.9.6a/0.9.6b/0.9.6c and 0.9.7
          +) applies to 0.9.7 only
 
+  +) Have the CHIL engine fork-safe (as defined by nCipher) and actually
+     make the newer ENGINE framework commands for the CHIL engine work.
+     [Toomas Kiisk <vix@cyber.ee> and Richard Levitte]
+
   +) Make it possible to produce shared libraries on ReliantUNIX.
      [Robert Dahlem <Robert.Dahlem@ffm2.siemens.de> via Richard Levitte]
 
diff --git a/apps/speed.c b/apps/speed.c
index 08d00be..1d62c8b 100644
--- a/apps/speed.c
+++ b/apps/speed.c
@@ -353,7 +353,7 @@
 
 int MAIN(int argc, char **argv)
 	{
-	ENGINE *e;
+	ENGINE *e = NULL;
 	unsigned char *buf=NULL,*buf2=NULL;
 	int mret=1;
 	long count=0,save_count=0;
diff --git a/crypto/engine/hw_ncipher.c b/crypto/engine/hw_ncipher.c
index e3ce534..8d86ce2 100644
--- a/crypto/engine/hw_ncipher.c
+++ b/crypto/engine/hw_ncipher.c
@@ -357,7 +357,7 @@
 
 /* Stuff to pass to the HWCryptoHook library */
 static HWCryptoHook_InitInfo hwcrhk_globals = {
-	0,			/* Flags */
+	HWCryptoHook_InitFlags_SimpleForkCheck,	/* Flags */
 	&logstream,		/* logstream */
 	sizeof(BN_ULONG),	/* limbsize */
 	0,			/* mslimb first: false for BNs */
@@ -741,11 +741,13 @@
 		CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
 		break;
 	case ENGINE_CTRL_SET_USER_INTERFACE:
+	case HWCRHK_CMD_SET_USER_INTERFACE:
 		CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
 		password_context.ui_method = (UI_METHOD *)p;
 		CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
 		break;
 	case ENGINE_CTRL_SET_CALLBACK_DATA:
+	case HWCRHK_CMD_SET_CALLBACK_DATA:
 		CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
 		password_context.callback_data = p;
 		CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);