diff --git a/contrib/scripts/safe_asterisk b/contrib/scripts/safe_asterisk
new file mode 100755
index 0000000000000000000000000000000000000000..584e854d286bed4ac2cac5c3029c5ef9ac8d4567
--- /dev/null
+++ b/contrib/scripts/safe_asterisk
@@ -0,0 +1,47 @@
+#!/bin/sh
+TTY=9			# TTY (if you want one) for Asterisk to run on
+CONSOLE=yes		# Whether or not you want a console
+NOTIFY=			# Who to notify about crashes
+#
+# Don't fork when running "safely"
+#
+ASTARGS="-f"
+if [ "$TTY" != "" ]; then
+	ASTARGS="${ASTARGS} -vvv"
+	if [ "$CONSOLE" != "no" ]; then
+		ASTARGS="${ASTARGS} -c"
+	fi
+fi
+
+#
+# Let Asterisk dump core
+#
+ulimit -c unlimited
+
+while :; do 
+
+	if [ "$TTY" != "" ]; then
+		stty sane < /dev/tty${TTY}
+		asterisk ${ASTARGS} >& /dev/tty${TTY} < /dev/tty${TTY}
+	else
+		asterisk ${ASTARGS}
+	fi
+	EXITSTATUS=$?
+	#echo "Asterisk ended with exit status $EXITSTATUS"
+	if [ "$EXITSTATUS" = "0" ]; then
+		# Properly shutdown....
+		echo "Asterisk shutdown normally."
+		exit 0
+	elif [ $EXITSTATUS -gt 128 ]; then
+		let EXITSIGNAL=EXITSTATUS-128
+		echo "Asterisk exited on signal $EXITSIGNAL."
+		if [ "$NOTIFY" != "" ]; then
+			echo "Asterisk exited on signal $EXITSIGNAL.  Might want to take a peek." | \
+			mail -s "Asterisk Died" $NOTIFY
+		fi
+	else
+		echo "Asterisk died with code $EXITSTATUS.  Aborting."
+		exit 0
+	fi
+	echo "Automatically restarting Asterisk."
+done
diff --git a/redhat/asterisk.spec b/redhat/asterisk.spec
index 3688af2fd7ec87045ce9c9fad4a109d7bf423823..3a754088c3988c5d2f035e25730998ecd0d8f4de 100755
--- a/redhat/asterisk.spec
+++ b/redhat/asterisk.spec
@@ -53,6 +53,8 @@ ln -s /var/spool/asterisk/vm /var/lib/asterisk/sounds/vm
 # Asterisk
 #
 %attr(0755,root,root)      /usr/sbin/asterisk
+%attr(0755,root,root)      /usr/sbin/safe_asterisk
+%attr(0755,root,root)      /usr/sbin/astgenkey
 
 #
 # Sound files
@@ -64,6 +66,10 @@ ln -s /var/spool/asterisk/vm /var/lib/asterisk/sounds/vm
 %attr(0644,root,root)      /var/lib/asterisk/sounds/digits/*.gsm
 %attr(0755,root,root) %dir /var/lib/asterisk/images
 %attr(0644,root,root)      /var/lib/asterisk/images/*
+%attr(0755,root,root) %dir /var/lib/asterisk/keys
+%attr(0644,root,root)      /var/lib/asterisk/keys/*
+%attr(0755,root,root) %dir /var/lib/asterisk/agi-bin
+%attr(0755,root,root) %dir /var/lib/asterisk/agi-bin/*
 
 #
 # Example voicemail files
diff --git a/safe_asterisk b/safe_asterisk
new file mode 100755
index 0000000000000000000000000000000000000000..584e854d286bed4ac2cac5c3029c5ef9ac8d4567
--- /dev/null
+++ b/safe_asterisk
@@ -0,0 +1,47 @@
+#!/bin/sh
+TTY=9			# TTY (if you want one) for Asterisk to run on
+CONSOLE=yes		# Whether or not you want a console
+NOTIFY=			# Who to notify about crashes
+#
+# Don't fork when running "safely"
+#
+ASTARGS="-f"
+if [ "$TTY" != "" ]; then
+	ASTARGS="${ASTARGS} -vvv"
+	if [ "$CONSOLE" != "no" ]; then
+		ASTARGS="${ASTARGS} -c"
+	fi
+fi
+
+#
+# Let Asterisk dump core
+#
+ulimit -c unlimited
+
+while :; do 
+
+	if [ "$TTY" != "" ]; then
+		stty sane < /dev/tty${TTY}
+		asterisk ${ASTARGS} >& /dev/tty${TTY} < /dev/tty${TTY}
+	else
+		asterisk ${ASTARGS}
+	fi
+	EXITSTATUS=$?
+	#echo "Asterisk ended with exit status $EXITSTATUS"
+	if [ "$EXITSTATUS" = "0" ]; then
+		# Properly shutdown....
+		echo "Asterisk shutdown normally."
+		exit 0
+	elif [ $EXITSTATUS -gt 128 ]; then
+		let EXITSIGNAL=EXITSTATUS-128
+		echo "Asterisk exited on signal $EXITSIGNAL."
+		if [ "$NOTIFY" != "" ]; then
+			echo "Asterisk exited on signal $EXITSIGNAL.  Might want to take a peek." | \
+			mail -s "Asterisk Died" $NOTIFY
+		fi
+	else
+		echo "Asterisk died with code $EXITSTATUS.  Aborting."
+		exit 0
+	fi
+	echo "Automatically restarting Asterisk."
+done