diff --git a/meta-msn/recipes-phosphor/initfs/files/failsafe-boot.sh b/meta-msn/recipes-phosphor/initfs/files/failsafe-boot.sh
new file mode 100644
index 0000000..ea1bd07
--- /dev/null
+++ b/meta-msn/recipes-phosphor/initfs/files/failsafe-boot.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+echo "----------------
+System entered recovery mode. Running from backup flash!!!
+help for get ip:
+ifconfig eth0 $IP netmask $NETMASK up;
+route add default gw $GATEWAY eth0
+Or type udhcpc to get ip over dhcp.
+Please scp image file to /tmp folder and re-burn main flash with:
+/run/initramfs/recovery /tmp/<bmc-image-file>.
+----------------";
+
+mkdir /run/lock;
+
+mkdir /dev/mtd;
+
+ln -s /run/mtd\:u-boot-env /dev/mtd/u-boot-env;
+
+/usr/bin/mlx-hw-events.sh add reset /sys/devices/platform/ahb/ahb:apb/ahb:apb:i2c@1e78a000/1e78a140.i2c-bus/i2c-4/4-0071/mlxreg-core.1137/hwmon/hwmon*;
+
+mount /dev/mtdblock5 /run/initramfs/rw -t jffs2 -o remount,ro;
+mount tmpfs tmp -t tmpfs -o mode=755,nodev;
+
+export PS1="(recovery)\u@BMC:\w\$"
+
+while true;
+do
+    /run/initramfs/ro/sbin/sulogin;
+done
+
diff --git a/meta-msn/recipes-phosphor/initfs/files/obmc-init.sh b/meta-msn/recipes-phosphor/initfs/files/obmc-init.sh
new file mode 100644
index 0000000..55862aa
--- /dev/null
+++ b/meta-msn/recipes-phosphor/initfs/files/obmc-init.sh
@@ -0,0 +1,430 @@
+#!/bin/sh
+
+fslist="proc sys dev run"
+rodir=run/initramfs/ro
+rwdir=run/initramfs/rw
+upper=$rwdir/cow
+work=$rwdir/work
+
+cd /
+mkdir -p $fslist
+mount dev dev -tdevtmpfs
+mount sys sys -tsysfs
+mount proc proc -tproc
+if ! grep run proc/mounts
+then
+	mount tmpfs run -t tmpfs -o mode=755,nodev
+fi
+
+mkdir -p $rodir $rwdir
+
+cp -rp init failsafe recovery shutdown update update_all whitelist bin sbin usr lib etc var run/initramfs
+
+# To start a interactive shell with job control at this point, run
+# getty 38400 ttyS4
+
+findmtd() {
+	m=$(grep -xl "$1" /sys/class/mtd/*/name)
+	m=${m%/name}
+	m=${m##*/}
+	echo $m
+}
+
+blkid_fs_type() {
+	# Emulate util-linux's `blkid -s TYPE -o value $1`
+	# Example busybox blkid output:
+	#    # blkid /dev/mtdblock5
+	#    /dev/mtdblock5: TYPE="squashfs"
+	# Process output to extract TYPE value "squashfs".
+	blkid $1 | sed -e 's/^.*TYPE="//' -e 's/".*$//'
+}
+
+probe_fs_type() {
+	fst=$(blkid_fs_type $1)
+	echo ${fst:=jffs2}
+}
+
+# This fw_get_env_var is a possibly broken version of fw_printenv that
+# does not check the crc or flag byte.
+# The u-boot environemnt starts with a crc32, followed by a flag byte
+# when a redundannt environment is configured, followed by var=value\0 sets.
+# The flag byte for nand is a 1 byte counter; for nor it is a 1 or 0 byte.
+
+get_fw_env_var() {
+	# do we have 1 or 2 copies of the environment?
+	# count non-blank non-comment lines
+	# copies=$(grep -v ^# /etc/fw_env.config | grep -c [::alnum::])
+	# ... we could if we had the fw_env.config in the initramfs
+	copies=2
+
+	# * Change \n to \r and \0 to \n
+	# * Skip to the 5th byte to skip over crc
+	# * then skip to the first or 2nd byte to skip over flag if it exists
+	# * stop parsing at first empty line corresponding to the
+	#   double \0 at the end of the environment.
+	# * print the value of the variable name passed as argument
+
+	envdev=$(findmtd u-boot-env)
+	if test -n $envdev
+	then
+		cat /dev/$envdev |
+		tr '\n\000' '\r\n' |
+		tail -c +5 | tail -c +${copies-1} |
+		sed -ne '/^$/,$d' -e "s/^$1=//p"
+	fi
+}
+
+setup_resolv() {
+	runresolv=/run/systemd/resolve/resolv.conf
+	etcresolv=/etc/resolv.conf
+
+	if test ! -e $etcresolv -a ! -L $etcresolv
+	then
+		mkdir -p ${runresolv%/*}
+		ln -s $runresolv $etcresolv
+	fi
+	if test ! -f $runresolv
+	then
+		cat  /proc/net/pnp > $runresolv
+	fi
+
+	return 0
+}
+
+try_tftp() {
+	# split into  tftp:// host:port/ path/on/remote
+	# then spilt off / and then :port from the end of host:port/
+	# and : from the beginning of port
+
+	rest="${1#tftp://}"
+	path=${rest#*/}
+	host=${rest%$path}
+	host="${host%/}"
+	port="${host#${host%:*}}"
+	host="${host%$port}"
+	port="${port#:}"
+
+	setup_resolv
+
+	if test -z "$host" -o -z "$path"
+	then
+		debug_takeover "Invalid tftp download url '$url'."
+	elif echo "Downloading '$url' from $host ..."  &&
+		! tftp -g -r "$path" -l /run/image-rofs "$host" ${port+"$port"}
+	then
+		debug_takeover "Download of '$url' failed."
+	fi
+}
+
+try_wget() {
+	setup_resolv
+
+	echo "Downloading '$1' ..."
+	if ! wget -O /run/image-rofs "$1"
+	then
+		debug_takeover "Download of '$url' failed."
+	fi
+}
+
+debug_takeover() {
+	echo "$@"
+	test -n "$@" && echo Enter password to try to manually fix.
+	cat << HERE
+After fixing run exit to continue this script, or reboot -f to retry, or
+touch /takeover and exit to become PID 1 allowing editing of this script.
+HERE
+
+	while ! sulogin && ! test -f /takeover
+	do
+		echo getty failed, retrying
+	done
+
+	# Touch /takeover in the above getty to become pid 1
+	if test -e /takeover
+	then
+		cat << HERE
+
+Takeover of init requested.  Executing /bin/sh as PID 1.
+When finished exec new init or cleanup and run reboot -f.
+
+Warning: No job control!  Shell exit will panic the system!
+HERE
+		export PS1=init#\ 
+		exec /bin/sh
+	fi
+}
+
+env=$(findmtd u-boot-env)
+if test -n $env
+then
+	ln -s /dev/$env /run/mtd:u-boot-env
+	cp /run/mtd:u-boot-env /run/fw_env
+fi
+
+rofs=$(findmtd rofs)
+rwfs=$(findmtd rwfs)
+
+rodev=/dev/mtdblock${rofs#mtd}
+rwdev=/dev/mtdblock${rwfs#mtd}
+
+# Set to y for yes, anything else for no.
+force_rwfst_jffs2=y
+flash_images_before_init=n
+consider_download_files=y
+consider_download_tftp=y
+consider_download_http=y
+consider_download_ftp=y
+
+rofst=squashfs
+rwfst=$(probe_fs_type $rwdev)
+roopts=ro
+rwopts=rw
+
+image=/run/initramfs/image-
+trigger=${image}rwfs
+
+init=/sbin/init
+failsafe=/run/initramfs/failsafe
+fsckbase=/sbin/fsck.
+fsck=$fsckbase$rwfst
+fsckopts=-a
+optfile=/run/initramfs/init-options
+optbase=/run/initramfs/init-options-base
+urlfile=/run/initramfs/init-download-url
+update=/run/initramfs/update
+
+if test -e /${optfile##*/}
+then
+	cp /${optfile##*/} $optfile
+fi
+
+if test -e /${optbase##*/}
+then
+	cp /${optbase##*/} $optbase
+else
+	touch $optbase
+fi
+
+if test ! -f $optfile
+then
+	cat /proc/cmdline $optbase > $optfile
+	get_fw_env_var openbmcinit >> $optfile
+	get_fw_env_var openbmconce >> $optfile
+fi
+
+echo rofs = $rofs $rofst   rwfs = $rwfs $rwfst
+
+if grep -w debug-init-sh $optfile
+then
+	debug_takeover "Debug initial shell requested by command line."
+fi
+
+if test "x$consider_download_files" = xy &&
+	grep -w openbmc-init-download-files $optfile
+then
+	if test -f ${urlfile##*/}
+	then
+		cp ${urlfile##*/} $urlfile
+	fi
+	if test ! -f $urlfile
+	then
+		get_fw_env_var openbmcinitdownloadurl > $urlfile
+	fi
+	url="$(cat $urlfile)"
+	rest="${url#*://}"
+	proto="${url%$rest}"
+
+	if test -z "$url"
+	then
+		echo "Download url empty.  Ignoring download request."
+	elif test -z "$proto"
+	then
+		echo "Download failed."
+	elif test "$proto" = tftp://
+	then
+		if test "x$consider_download_tftp" = xy
+		then
+			try_tftp "$url"
+		else
+			echo "Download failed."
+		fi
+	elif test "$proto" = http://
+	then
+		if test "x$consider_download_http" = xy
+		then
+			try_wget "$url"
+		else
+			echo "Download failed."
+		fi
+	elif test "$proto" = ftp://
+	then
+		if test "x$consider_download_ftp" = xy
+		then
+			try_wget "$url"
+		else
+			echo "Download failed."
+		fi
+	else
+		echo "Download failed."
+	fi
+fi
+
+# If there are images in root move them to /run/initramfs/ or /run/ now.
+imagebasename=${image##*/}
+if test -n "${imagebasename}" && ls /${imagebasename}* > /dev/null 2>&1
+then
+	if test "x$flash_images_before_init" = xy
+	then
+		echo "Flash images found, will update before starting init."
+		mv /${imagebasename}* ${image%$imagebasename}
+	else
+		echo "Flash images found, will use but deferring flash update."
+		mv /${imagebasename}* /run/
+	fi
+fi
+
+if grep -w clean-rwfs-filesystem $optfile
+then
+	echo "Cleaning of read-write overlay filesystem requested."
+	touch $trigger
+fi
+
+if test "x$force_rwfst_jffs2" = xy -a $rwfst != jffs2 -a ! -f $trigger
+then
+	echo "Converting read-write overlay filesystem to jffs2 forced."
+	touch $trigger
+fi
+
+if ls $image* > /dev/null 2>&1
+then
+	if ! test -x $update
+	then
+		debug_takeover "Flash update requested but $update missing!"
+	elif test -f $trigger -a ! -s $trigger
+	then
+		echo "Saving selected files from read-write overlay filesystem."
+		$update --no-restore-files
+		echo "Clearing read-write overlay filesystem."
+		flash_eraseall /dev/$rwfs
+		echo "Restoring saved files to read-write overlay filesystem."
+		touch $trigger
+		$update --no-save-files --clean-saved-files
+	else
+		$update --clean-saved-files
+	fi
+
+	rwfst=$(probe_fs_type $rwdev)
+	fsck=$fsckbase$rwfst
+fi
+
+if grep -w overlay-filesystem-in-ram $optfile
+then
+	rwfst=none
+fi
+
+copyfiles=
+if grep -w copy-files-to-ram $optfile
+then
+	rwfst=none
+	copyfiles=y
+fi
+
+# It would be nice to do this after fsck but that mean rofs is mounted
+# which triggers the mtd is mounted check
+if test "$rwfst$copyfiles" = noney
+then
+	touch $trigger
+	$update --copy-files --clean-saved-files --no-restore-files
+fi
+
+if grep -w copy-base-filesystem-to-ram $optfile &&
+	test ! -e /run/image-rofs && ! cp $rodev /run/image-rofs
+then
+	# Remove any partial copy to avoid attempted usage later
+	if test -e  /run/image-rofs
+	then
+		ls -l /run/image-rofs
+		rm -f /run/image-rofs
+	fi
+	debug_takeover "Copying $rodev to /run/image-rofs failed."
+fi
+
+if test -s /run/image-rofs
+then
+	rodev=/run/image-rofs
+	roopts=$roopts,loop
+fi
+
+mount $rodev $rodir -t $rofst -o $roopts
+
+if test -x $rodir$fsck
+then
+	for fs in $fslist
+	do
+		mount --bind $fs $rodir/$fs
+	done
+	chroot $rodir $fsck $fsckopts $rwdev
+	rc=$?
+	for fs in $fslist
+	do
+		umount $rodir/$fs
+	done
+	if test $rc -gt 1
+	then
+		debug_takeover "fsck of read-write fs on $rwdev failed (rc=$rc)"
+	fi
+elif test "$rwfst" != jffs2 -a "$rwfst" != none
+then
+	echo "No '$fsck' in read only fs, skipping fsck."
+fi
+
+if test "$rwfst" = none
+then
+	echo "Running with read-write overlay in RAM for this boot."
+	echo "No state will be preserved unless flash update performed."
+elif ! mount $rwdev $rwdir -t $rwfst -o $rwopts
+then
+	msg="$(cat)" << HERE
+
+Mounting read-write $rwdev filesystem failed.  Please fix and run
+	mount $rwdev $rwdir -t $rwfst -o $rwopts
+to to continue, or do change nothing to run from RAM for this boot.
+HERE
+	debug_takeover "$msg"
+fi
+
+rm -rf $work
+mkdir -p $upper $work
+
+mount -t overlay -o lowerdir=$rodir,upperdir=$upper,workdir=$work cow /root
+
+while ! chroot /root /bin/sh -c "test -x '$init' -a -s '$init'"
+do
+	msg="$(cat)" << HERE
+
+Unable to confirm /sbin/init is an executable non-empty file
+in merged file system mounted at /root.
+
+Change Root test failed!  Invoking emergency shell.
+HERE
+	debug_takeover "$msg"
+done
+
+for f in $fslist
+do
+	mount --move $f root/$f
+done
+
+# switch_root /root $init
+ln -s /root/dev/mem /dev/mem
+FLASH_CP=`/root/sbin/devmem 0x1e785030`
+FLASH_CP=$(($FLASH_CP&0x02))
+rm /dev/mem
+
+if [ $FLASH_CP == 0 ]; then
+#	echo "Flash 1 used. Normal boot.";
+    exec chroot /root $init;
+else
+    exec chroot /root $failsafe;
+fi
+
diff --git a/meta-msn/recipes-phosphor/initfs/files/obmc-update_all.sh b/meta-msn/recipes-phosphor/initfs/files/obmc-update_all.sh
new file mode 100644
index 0000000..fbcf466
--- /dev/null
+++ b/meta-msn/recipes-phosphor/initfs/files/obmc-update_all.sh
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+# Script to burn entire 32MB of BMC SPI Flash
+#
+# Usage:
+#    a) Local: /run/initramfs/update_all <bmc-image-file>
+#    b) Remote: sshpass -p "<root-password>" ssh root@<ip> '/run/initramfs/update_all <bmc-image-file>'
+#
+# Assumptions:
+#    <bmc-image-file> is a 32MB file representing all partitions in BMC SPI Flash
+#    <bmc-image-file> exists on local filesystem
+#    /dev/mtd0 represents entire BMC SPI Flash device
+#    /dev/mtd5 is a JFFS2 filesystem (rwfs) partition
+#    /bsp/reset/bmc_upgrade is symlink pointing to proper sticky bit in CPLD
+#
+
+if [ -f $1 ]
+then
+   echo $0: Update BMC SPI Flash with $1
+else
+   echo $0: File $1 not found on target, exiting
+   exit
+fi
+
+echo $0: Stopping system services
+systemctl stop mlx_ipmid
+
+echo $0: Remounting rwfs "(/dev/mtd5)" as read-only
+mount /dev/mtdblock5 /run/initramfs/rw -t jffs2 -o remount,ro
+
+echo $0: Unmounting rofs "(/dev/mtd4)"
+umount /dev/mtdblock4
+
+MAC=`fw_printenv ethaddr | sed -n "s/^ethaddr=//p"`
+
+echo $0: Burning SPI Flash "(/dev/mtd0)" with image "$1"
+/usr/sbin/flashcp -v $1 /dev/mtd0
+
+if [ -v $MAC ]; then
+	echo "MAC env variable not exist. Set eth0 MAC from eeprom."
+	MAC=`hexdump -n 6 -s 0xf0 -v -e '/1 "%02x:"' /sys/bus/i2c/devices/6-0055/eeprom`;MAC=${MAC::-1};
+else
+	echo "MAC env variable exist. Set eth0 MAC from env."
+fi;
+fw_setenv ethaddr $MAC
+
+echo $0: Setting bmc_upgrade sticky bit in CPLD
+echo 1 > /bsp/reset/bmc_upgrade
+
+echo $0: Rebooting BMC
+echo 0 > /bsp/reset/bmc_reset_soft
+
+
+
diff --git a/meta-msn/recipes-phosphor/initfs/files/recovery.sh b/meta-msn/recipes-phosphor/initfs/files/recovery.sh
new file mode 100644
index 0000000..256e18f
--- /dev/null
+++ b/meta-msn/recipes-phosphor/initfs/files/recovery.sh
@@ -0,0 +1,52 @@
+
+#!/bin/sh
+#
+# Script to burn entire 32MB of BMC SPI Flash 1
+#
+# Usage:
+#    a) Local: /run/initramfs/recovery <bmc-image-file>
+#
+# Assumptions:
+#    <bmc-image-file> is a 32MB file representing all partitions in BMC SPI Flash
+#    <bmc-image-file> exists on local filesystem
+#    /dev/mtd0 represents entire BMC SPI Flash device
+#    /dev/mtd5 is a JFFS2 filesystem (rwfs) partition
+#    /bsp/reset/bmc_upgrade is symlink pointing to proper sticky bit in CPLD
+#
+
+if [ -f $1 ]
+then
+   echo $0: Update BMC SPI Flash with $1
+else
+   echo $0: File $1 not found on target, exiting
+   exit
+fi
+
+echo $0: Remounting rwfs "(/dev/mtd5)" as read-only
+mount /dev/mtdblock5 /run/initramfs/rw -t jffs2 -o remount,ro
+
+echo $0: Unmounting rofs "(/dev/mtd4)"
+umount /dev/mtdblock4
+
+devmem 0x1e785034 l 0x01;
+
+MAC=`fw_printenv ethaddr | sed -n "s/^ethaddr=//p"`
+
+echo $0: Burning SPI Flash "(/dev/mtd0)" with image "$1"
+/usr/sbin/flashcp -v $1 /dev/mtd0
+
+if [ -v $MAC ]; then
+	echo "MAC env variable not exist. Set eth0 MAC from eeprom."
+	MAC=`hexdump -n 6 -s 0xf0 -v -e '/1 "%02x:"' /sys/bus/i2c/devices/6-0055/eeprom`;MAC=${MAC::-1};
+else
+	echo "MAC env variable exist. Set eth0 MAC from env."
+fi;
+
+fw_setenv ethaddr $MAC
+
+echo $0: Setting bmc_upgrade sticky bit in CPLD
+echo 1 > /bsp/reset/bmc_upgrade
+
+echo $0: Rebooting BMC
+echo 0 > /bsp/reset/bmc_reset_soft
+
diff --git a/meta-msn/recipes-phosphor/initfs/obmc-phosphor-initfs.bbappend b/meta-msn/recipes-phosphor/initfs/obmc-phosphor-initfs.bbappend
new file mode 100644
index 0000000..9ad6bc8
--- /dev/null
+++ b/meta-msn/recipes-phosphor/initfs/obmc-phosphor-initfs.bbappend
@@ -0,0 +1,16 @@
+FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
+
+SRC_URI += "file://obmc-init.sh"
+SRC_URI += "file://obmc-update_all.sh"
+SRC_URI += "file://failsafe-boot.sh"
+SRC_URI += "file://recovery.sh"
+
+
+do_install_append() {
+        install -m 0755 ${WORKDIR}/obmc-init.sh ${D}/init
+        install -m 0755 ${WORKDIR}/failsafe-boot.sh ${D}/failsafe
+        install -m 0755 ${WORKDIR}/obmc-update_all.sh ${D}/update_all
+        install -m 0755 ${WORKDIR}/recovery.sh ${D}/recovery
+}
+
+FILES_${PN} += " /update_all /failsafe /recovery"
