diff --git a/main/open-iscsi/APKBUILD b/main/open-iscsi/APKBUILD
index e405cbb94580037706ed2027bb8986353e6fc81c..d78fdf66dc53573005b7ba39defabff3d88d9752 100644
--- a/main/open-iscsi/APKBUILD
+++ b/main/open-iscsi/APKBUILD
@@ -1,7 +1,7 @@
 # Maintainer: Leonardo Arena <rnalrd@alpinelinux.org>
 pkgname=open-iscsi
 pkgver=2.1.0
-pkgrel=0
+pkgrel=1
 pkgdesc="High performance, transport independent, multi-platform iSCSI initiator"
 url="https://www.open-iscsi.com"
 arch="all"
@@ -25,7 +25,6 @@ builddir="$srcdir"/$pkgname-$pkgver
 build() {
 	make prefix=/usr \
 		exec_prefix=/usr \
-		sbindir=/usr/bin \
 		localstatedir=/var \
 		sysconfdir=/etc \
 		mandir=/usr/share/man \
@@ -33,18 +32,14 @@ build() {
 }
 
 package() {
-	make prefix=/usr sbindir=/usr/bin DESTDIR="$pkgdir" install
-	install -Dm755 "$pkgdir"/usr/bin/iscsid "$pkgdir"/usr/sbin/iscsid
+	make prefix=/usr DESTDIR="$pkgdir" install
 	install -Dm755 "$srcdir"/iscsid.initd "$pkgdir"/etc/init.d/iscsid
-	local file
-	for file in initd confd conf; do
-		install -Dm644 "$srcdir"/iscsid.$file "$pkgdir"/etc/conf.d/iscsid
-		install -Dm644 "$srcdir"/iscsid.$file "$pkgdir"/etc/iscsi/iscsid.$file
-	done
+	install -Dm644 "$srcdir"/iscsid.confd "$pkgdir"/etc/conf.d/iscsid
+	install -Dm644 "$srcdir"/iscsid.conf "$pkgdir"/etc/iscsi/iscsid.conf
 }
 
 sha512sums="bb1a4ff2bab0562bfd4281d757dd888e8f5d2d1ae16561cabf5598073c343e8c2dc9b35992c2bc51398faffceb9b70ea2eae214ab205a586bcb971d741d5f59d  open-iscsi-2.1.0.tar.gz
-49ac7e1c9cd6aa444edcfc4d5dea1330a93cee286d69d82521cc1afecc66296027c359f2314e418671813f049c9ff18ba4bdd0f90922423fac94b6529c887cf5  iscsid.initd
+a5544e35da3433dfde96984d2e5783991d961554b8843f4f96d4317a38d7534864882342633ed0dc15c2f9e49a419e51958593b0de1ce84644938dafabe392fc  iscsid.initd
 075bb9cb783be7ccbc799947e0e042b85310d40b3045141dc1be40ca84ed1cc0e1e54559df501c512c179e28375314b27a03c15d9a6d4b1cabd428b2279985d3  iscsid.confd
 3686d31c5642e611c0c0c61f0f42a33030a74b518a2a108f004b9bd34b2b98d8e29ee2416a5b9cc447ab0449bdc94158b2323d977e7b7d2930dd4dcf0866da68  iscsid.conf
 1b89ffd6de0dc7bb63fc2702a97e49df4369158c66ee609acfc041b1677c07fbd964b7a709f1f324fa51a9842d4d3e11611d9783e18d526372d468163c0ac8db  musl-fixes.patch
diff --git a/main/open-iscsi/iscsid.initd b/main/open-iscsi/iscsid.initd
index 2affb80840b535011a1e7cf5289c825960f76063..617af9ac109752fb2291d32fc0c283346defb66a 100644
--- a/main/open-iscsi/iscsid.initd
+++ b/main/open-iscsi/iscsid.initd
@@ -1,9 +1,19 @@
 #!/sbin/openrc-run
+# Copyright 1999-2015 Gentoo Foundation, Inc.
+# Distributed under the terms of the GNU General Public License, v2 or later
 
-extra_started_commands="starttargets stoptargets restarttargets"
+command="/usr/sbin/iscsid"
+command_args="${OPTS}"
+start_stop_daemon_args="-w 100" # iscsid might fail e.g. when the iSCSI kernel modules aren't available
+pidfile=${PIDFILE:-/var/run/${SVCNAME}.pid}
+
+extra_started_commands="starttargets stoptargets"
+extra_commands="restarttargets"
+
+ISCSIADM=/usr/sbin/iscsiadm
 
 depend() {
-	after modules
+	after modules multipath
 	use net
 }
 
@@ -16,101 +26,44 @@ checkconfig() {
 		eerror "Config file ${CONFIG_FILE} does not exist!"
 		return 1
 	fi
-	if [ ! -e ${INITIATORNAME_FILE} ] || [ ! "$(grep "^InitiatorName=iqn\." ${INITIATORNAME_FILE})" ]; then
+
+	if [ -e ${INITIATORNAME_FILE} ]; then
+		. ${INITIATORNAME_FILE}
+	fi
+	if [ ! -e ${INITIATORNAME_FILE} -o -z "${InitiatorName}" ]; then
 		ewarn "${INITIATORNAME_FILE} should contain a string with your initiatior name."
-		IQN=iqn.$(date +%Y-%m).$(hostname -f | awk 'BEGIN { FS=".";}{x=NF; while (x>0) {printf $x ;x--; if (x>0) printf ".";} print ""}'):openiscsi
-		IQN=${IQN}-$(echo ${RANDOM}${RANDOM}${RANDOM}${RANDOM}${RANDOM} | md5sum | sed -e "s/\(.*\) -/\1/g" -e 's/ //g')
+		local IQN=$(/usr/sbin/iscsi-iname)
 		ebegin "Creating InitiatorName ${IQN} in ${INITIATORNAME_FILE}"
 		echo "InitiatorName=${IQN}" >> "${INITIATORNAME_FILE}"
 		eend $?
 	fi
 }
 
-do_modules() {
-	msg="$1"
-	shift
-	modules="${1}"
-	shift
-	modopts="$@"
-	for m in ${modules}
-	do
-		ebegin "${msg} ${m}"
-		modprobe ${modopts} ${m}
-		ret=$?
-		eend ${ret}
-		if [ ${ret} -ne 0 ]; then
-			return ${ret}
-		fi
-	done
-	return 0
+starttargets() {
+	ebegin "Setting up iSCSI targets"
+	$ISCSIADM -m node --loginall=automatic
+	local ret=$?
+	eend $ret
+	return $ret
 }
 
-start() {
-	ebegin "Checking open-iSCSI configuration"
-	checkconfig
-	ret=$?
-	if [ $ret -ne 0 ]; then
-		eend 1
-		return 1
-	fi
-	ebegin "Loading iSCSI modules"
-	do_modules 'Loading' 'libiscsi scsi_transport_iscsi iscsi_tcp'
-	ret=$?
-	if [ $ret -ne 0 ]; then
-		eend 1
-		return 1
-	fi
+stoptargets() {
+	ebegin "Disconnecting iSCSI targets"
+	sync
+	$ISCSIADM -m node --logoutall=all
+	local ret=$?
 
-	ebegin "Starting ${SVCNAME}"
-	start-stop-daemon --start --quiet --exec /usr/sbin/iscsid -- ${OPTS}
-	ret=$?
-	if [ $ret -ne 0 ]; then
-		eend $?
-		return $?
+	if [ $ret -eq 21 ]; then
+		# See man iscsiadm(8)
+		einfo "No active sessions to disconnect"
+		eend 0
+		return 0
 	fi
 
-	# Start automatic targets when iscsid is started
-	if [ "${AUTOSTARTTARGETS}" = "yes" ]; then
-		starttargets
-		return $?
-	fi
-	return 0
-}
-	
-stop() {
-	local ret=
-	stoptargets
-	ebegin "Stopping ${SVCNAME}"
-	start-stop-daemon --signal HUP --stop --quiet --exec /usr/sbin/iscsid #--pidfile $PID_FILE
-	ret=$?
 	eend $ret
-
-	# ugly, but pid file is not removed by iscsid
-	rm -f $PID_FILE
 	return $ret
 }
 
-starttargets() {
-        ebegin "Setting up iSCSI targets"
-        /usr/bin/iscsiadm -m node --loginall=automatic
-		ret=$?
-	#Don't report error when no targets are configured
-	if [ "$ret" -eq "21" ]; then
-		ret="0"
-	fi
-        eend $ret
-		return $ret
-}
-
-stoptargets() {
-        ebegin "Disconnecting iSCSI targets"
-        sync
-        /usr/bin/iscsiadm -m node --logoutall=all
-		ret=$?
-        eend $ret
-		return $ret
-}
-
 restarttargets() {
         stoptargets
         starttargets
@@ -118,5 +71,36 @@ restarttargets() {
 
 status() {
 	ebegin "Showing current active iSCSI sessions"
-	/usr/bin/iscsiadm -m session
+	$ISCSIADM -m session
+}
+
+
+start_pre() {
+	local ret=1
+
+	ebegin "Checking Open-iSCSI configuration"
+	checkconfig
+	ret=$?
+	if [ $ret -ne 0 ]; then
+		eend 1
+		return 1
+	fi
+	eend 0
+}
+
+start_post() {
+	# Start automatic targets when iscsid is started
+	if [ "${AUTOSTARTTARGETS}" = "yes" ]; then
+		starttargets
+		local ret=$?
+		if [ "${AUTOSTART}" = "strict" -a $ret -ne 0 ]; then
+			stop
+			return $ret
+		fi
+	fi
+	return 0
+}
+
+stop_pre() {
+	stoptargets
 }