diff --git a/app-crypt/johntheripper/johntheripper-1.7.3.1.ebuild b/app-crypt/johntheripper/johntheripper-1.7.3.1-r1.ebuild
--- a/app-crypt/johntheripper/johntheripper-1.7.3.1.ebuild
+++ b/app-crypt/johntheripper/johntheripper-1.7.3.1-r1.ebuild
@@ -5,8 +5,8 @@
 EAPI=1
 inherit eutils flag-o-matic toolchain-funcs pax-utils
 
-JUMBO='all-3'
-MPI='mpi8-small'
+JUMBO='all-5'
+MPI='mpi10'
 
 MY_PN="${PN/theripper/}"
 MY_P="${MY_PN/theripper/}-${PV}"
@@ -16,8 +16,8 @@ DESCRIPTION="fast password cracker"
 HOMEPAGE="http://www.openwall.com/john/"
 
 SRC_URI="http://www.openwall.com/john/g/${MY_P}.tar.gz
-	!minimal? ( ftp://ftp.openwall.com/john/contrib/historical/${MY_P}-${JUMBO}.diff.gz )
-	mpi? ( http://bindshell.net/tools/johntheripper/${MY_P}-${MPI}.patch.gz )"
+	!minimal? ( ftp://ftp.openwall.com/john/contrib/${MY_P}-${JUMBO}.diff.gz )
+	mpi? ( ftp://ftp.openwall.com/john/contrib/mpi/2009-bindshell/${MY_P}-${MPI}.patch.gz )"
 
 LICENSE="GPL-2"
 SLOT="0"
@@ -63,48 +63,41 @@ get_target() {
 	fi
 }
 
-#pkg_setup() {
-#	if use mpi && built_with_use sys-cluster/mpich2 threads; then
-#		die 'cannot work with sys-cluster/mpich2 USE=threads'
-#		#http://bindshell.net/tools/johntheripper/
-#	fi
-#}
-
 src_unpack() {
 	unpack ${A}
 	cd "${S}"
-	PATCHLIST=""
+	PATCHLIST="stackdef.S"
 	if use mpi ; then
 		epatch "${WORKDIR}"/${MY_P}-${MPI}.patch
-		# avoid the conflict on JOHN_VERSION until a better compromise is made
-		sed -i 's/_mpi"/"/' src/params.h
 	fi
 	if ! use minimal ; then
 		epatch "${WORKDIR}"/${MY_P}-${JUMBO}.diff
-		PATCHLIST=stackdef.S
+		PATCHLIST="${PATCHLIST} ${JUMBO}-stackdef.S"
 	fi
-	PATCHLIST="${PATCHLIST} params.h mkdir-sandbox"
+	PATCHLIST="${PATCHLIST} cflags mkdir-sandbox"
 
 	cd "${S}/src"
 	for p in ${PATCHLIST}; do
 		epatch "${FILESDIR}/${P}-${p}.patch"
 	done
 
-	sed -e "s/LDFLAGS  *=  */override LDFLAGS += /" -e "/LDFLAGS/s/-s//" -i Makefile || die "sed Makefile failed"
+	if ! use minimal ; then
+		sed -e "s/LDFLAGS  *=  */override LDFLAGS += /" -e "/LDFLAGS/s/-s//" \
+			-e "/LDFLAGS/s/-L[^ ]*//g" -e "/CFLAGS/s/-[IL][^ ]*//g" \
+			-i Makefile || die "sed Makefile failed"
+	fi
 }
 
 src_compile() {
-	cd "${S}/src"
-
 	use custom-cflags || strip-flags
-	append-flags -fno-PIC -fno-PIE
+	append-flags -fPIC -fPIE
 	append-ldflags -nopie
 
 	CPP=$(tc-getCXX) CC=$(tc-getCC) AS=$(tc-getCC) LD=$(tc-getCC)
 	use mpi && CPP=mpicxx CC=mpicc AS=mpicc LD=mpicc
-	emake \
+	emake -C src/\
 		CPP=${CPP} CC=${CC} AS=${AS} LD=${LD} \
-		CFLAGS="-c -Wall ${CFLAGS} -DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_HOME=\"\\\"/etc/john\\\"\"" \
+		CFLAGS="-c -Wall ${CFLAGS} -DJOHN_SYSTEMWIDE -DJOHN_SYSTEMWIDE_HOME=\"\\\"${ROOT}/etc/john\\\"\" -DJOHN_SYSTEMWIDE_EXEC=\"\\\"${ROOT}/usr/libexec/john\\\"\"" \
 		LDFLAGS="${LDFLAGS}" \
 		OPT_NORMAL="" \
 		$(get_target) \
@@ -140,18 +133,14 @@ src_install() {
 	# jumbo-patch additions
 	if ! use minimal ; then
 		dosym john /usr/sbin/undrop
-		# >=all-4
-		#dosbin run/calc_stat
-		#dosbin run/genmkvpwd
-		#dosbin run/mkvcalcproba
+		dosbin run/calc_stat
+		dosbin run/genmkvpwd
+		dosbin run/mkvcalcproba
 		insinto /etc/john
-		# >=all-4
-		#doins run/genincstats.rb run/stats
+		doins run/genincstats.rb run/stats
 		doins run/netscreen.py run/sap_prepare.pl
 	fi
 
-	#newsbin src/bench john-bench
-
 	# config files
 	insinto /etc/john
 	doins run/john.conf