diff --git a/plugins/python-build/bin/pyenv-install b/plugins/python-build/bin/pyenv-install
index 5aaf0a52..6bc78b22 100755
--- a/plugins/python-build/bin/pyenv-install
+++ b/plugins/python-build/bin/pyenv-install
@@ -106,6 +106,8 @@ for option in "${OPTIONS[@]}"; do
   esac
 done
 
+[ "${#ARGUMENTS[@]}" -le 1 ] || usage 1 >&2
+
 unset VERSION_NAME
 
 # The first argument contains the definition to install. If the
@@ -114,8 +116,7 @@ unset VERSION_NAME
 # version is not specified.
 DEFINITION="${ARGUMENTS[0]}"
 [ -n "$DEFINITION" ] || DEFINITION="$(pyenv-local 2>/dev/null || true)"
-[ -n "$DEFINITION" ] || usage 1
-
+[ -n "$DEFINITION" ] || usage 1 >&2
 
 # Define `before_install` and `after_install` functions that allow
 # plugin hooks to register a string of code for execution before or
diff --git a/plugins/python-build/bin/pyenv-uninstall b/plugins/python-build/bin/pyenv-uninstall
index 8336b454..ed6a3b84 100755
--- a/plugins/python-build/bin/pyenv-uninstall
+++ b/plugins/python-build/bin/pyenv-uninstall
@@ -17,24 +17,32 @@ if [ "$1" = "--complete" ]; then
   exec pyenv versions --bare
 fi
 
+usage() {
+  # We can remove the sed fallback once pyenv 0.4.0 is widely available
+  pyenv-help uninstall 2>/dev/null || sed -ne '/^#/!q;s/.//;s/.//;1,4d;p' < "$0"
+  [ -z "$1" ] || exit "$1"
+}
+
 if [ -z "$PYENV_ROOT" ]; then
   PYENV_ROOT="${HOME}/.pyenv"
 fi
 
+if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
+  usage 0
+fi
+
 unset FORCE
 if [ "$1" = "-f" ] || [ "$1" = "--force" ]; then
   FORCE=true
   shift
 fi
 
+[ "$#" -eq 1 ] || usage 1 >&2
+
 DEFINITION="$1"
 case "$DEFINITION" in
 "" | -* )
-  # We can remove the sed fallback once pyenv 0.4.0 is widely available.
-  { pyenv-help uninstall 2>/dev/null ||
-    sed -ne '/^#/!q;s/.\{1,2\}//;1,4d;p' < "$0"
-  } >&2
-  exit 1
+  usage 1 >&2
   ;;
 esac
 
diff --git a/plugins/python-build/bin/python-build b/plugins/python-build/bin/python-build
index 87ff4e90..6f54fe4e 100755
--- a/plugins/python-build/bin/python-build
+++ b/plugins/python-build/bin/python-build
@@ -1,4 +1,14 @@
 #!/usr/bin/env bash
+#
+# Usage: python-build [-kvp] <definition> <prefix>
+#        python-build --definitions
+#
+#   -k/--keep        Do not remove source tree after installation
+#   -v/--verbose     Verbose mode: print compilation status to stdout
+#   -p/--patch       Apply a patch from stdin before building
+#   --definitions    List all built-in definitions
+#   -g/--debug       Build a debug version
+#
 
 PYTHON_BUILD_VERSION="20141028"
 
@@ -495,7 +505,7 @@ fetch_svn() {
   if type svn &>/dev/null; then
     svn co -r "$svn_rev" "$svn_url" "${package_name}" >&4 2>&1
   else
-    echo "error: please install \`svn\` and try again" >&2
+    echo "error: please install Subversion and try again" >&2
     exit 1
   fi
 }
@@ -644,7 +654,6 @@ build_package_standard() {
   local PACKAGE_MAKE_OPTS_ARRAY="${package_var_name}_MAKE_OPTS_ARRAY[@]"
   local PACKAGE_MAKE_INSTALL_OPTS="${package_var_name}_MAKE_INSTALL_OPTS"
   local PACKAGE_MAKE_INSTALL_OPTS_ARRAY="${package_var_name}_MAKE_INSTALL_OPTS_ARRAY[@]"
-  local PACKAGE_MAKE_INSTALL_TARGET="${package_var_name}_MAKE_INSTALL_TARGET"
   local PACKAGE_CFLAGS="${package_var_name}_CFLAGS"
 
   [ "$package_var_name" = "PYTHON" ] && use_homebrew_readline || true
@@ -661,7 +670,7 @@ build_package_standard() {
   ) >&4 2>&1
 
   { "$MAKE" $MAKE_OPTS ${!PACKAGE_MAKE_OPTS} "${!PACKAGE_MAKE_OPTS_ARRAY}"
-    "$MAKE" "${!PACKAGE_MAKE_INSTALL_TARGET:-install}" $MAKE_INSTALL_OPTS ${!PACKAGE_MAKE_INSTALL_OPTS} "${!PACKAGE_MAKE_INSTALL_OPTS_ARRAY}"
+    "$MAKE" install $MAKE_INSTALL_OPTS ${!PACKAGE_MAKE_INSTALL_OPTS} "${!PACKAGE_MAKE_INSTALL_OPTS_ARRAY}"
   } >&4 2>&1
 }
 
@@ -1098,7 +1107,15 @@ require_llvm() {
   local llvm_version="$1"
   if [ "$(uname -s)" = "Darwin" ] && [ "$(osx_version)" -ge 1010 ]; then
     if [[ "$PYTHON_CONFIGURE_OPTS" != *--llvm-* ]]; then
-      package_option python configure --prebuilt-name="llvm-3.2-x86_64-apple-darwin13.tar.bz2"
+      if [ "$llvm_version" = "3.2" ]; then
+        package_option python configure --prebuilt-name="llvm-3.2-x86_64-apple-darwin13.tar.bz2"
+      else
+        local llvm_prefix="$(brew --prefix llvm 2>/dev/null || true)"
+        local llvm_config="${llvm_prefix}/bin/llvm-config"
+        if [ -x "$llvm_config" ]; then
+          package_option python configure --llvm-config="$llvm_config"
+        fi
+      fi
     fi
   fi
 }
@@ -1519,14 +1536,8 @@ version() {
 }
 
 usage() {
-  { version
-    echo "usage: python-build [-k|--keep] [-v|--verbose] [-p|--patch] [-g|--debug] definition prefix"
-    echo "       python-build --definitions"
-  } >&2
-
-  if [ -z "$1" ]; then
-    exit 1
-  fi
+  sed -ne '/^#/!q;s/.\{1,2\}//;1,2d;p' < "$0"
+  [ -z "$1" ] || exit "$1"
 }
 
 list_definitions() {
@@ -1558,16 +1569,9 @@ parse_options "$@"
 for option in "${OPTIONS[@]}"; do
   case "$option" in
   "h" | "help" )
-    usage without_exiting
-    { echo
-      echo "  -k/--keep        Do not remove source tree after installation"
-      echo "  -v/--verbose     Verbose mode: print compilation status to stdout"
-      echo "  -p/--patch       Apply a patch from stdin before building"
-      echo "  -g/--debug       Build a debug version"
-      echo "  --definitions    List all built-in definitions"
-      echo
-    } >&2
-    exit 0
+    version
+    echo
+    usage 0
     ;;
   "definitions" )
     list_definitions
@@ -1592,9 +1596,11 @@ for option in "${OPTIONS[@]}"; do
   esac
 done
 
+[ "${#ARGUMENTS[@]}" -eq 2 ] || usage 1 >&2
+
 DEFINITION_PATH="${ARGUMENTS[0]}"
 if [ -z "$DEFINITION_PATH" ]; then
-  usage
+  usage 1 >&2
 elif [ ! -f "$DEFINITION_PATH" ]; then
   for DEFINITION_DIR in "${PYTHON_BUILD_DEFINITIONS[@]}"; do
     if [ -f "${DEFINITION_DIR}/${DEFINITION_PATH}" ]; then
@@ -1611,7 +1617,7 @@ fi
 
 PREFIX_PATH="${ARGUMENTS[1]}"
 if [ -z "$PREFIX_PATH" ]; then
-  usage
+  usage 1 >&2
 elif [ "${PREFIX_PATH#/}" = "$PREFIX_PATH" ]; then
   PREFIX_PATH="${PWD}/${PREFIX_PATH}"
 fi
diff --git a/plugins/python-build/test/arguments.bats b/plugins/python-build/test/arguments.bats
new file mode 100644
index 00000000..56840b65
--- /dev/null
+++ b/plugins/python-build/test/arguments.bats
@@ -0,0 +1,23 @@
+#!/usr/bin/env bats
+
+load test_helper
+
+@test "not enought arguments for python-build" {
+  # use empty inline definition so nothing gets built anyway
+  local definition="${TMP}/build-definition"
+  echo '' > "$definition"
+
+  run python-build "$definition"
+  assert_failure
+  assert_output_contains 'Usage: python-build'
+}
+
+@test "extra arguments for python-build" {
+  # use empty inline definition so nothing gets built anyway
+  local definition="${TMP}/build-definition"
+  echo '' > "$definition"
+
+  run python-build "$definition" "${TMP}/install" ""
+  assert_failure
+  assert_output_contains 'Usage: python-build'
+}
diff --git a/plugins/python-build/test/build.bats b/plugins/python-build/test/build.bats
index 1b9724f5..ef2396d7 100644
--- a/plugins/python-build/test/build.bats
+++ b/plugins/python-build/test/build.bats
@@ -5,6 +5,7 @@ export PYTHON_BUILD_CACHE_PATH="$TMP/cache"
 export MAKE=make
 export MAKE_OPTS="-j 2"
 export CC=cc
+export -n PYTHON_CONFIGURE_OPTS
 
 setup() {
   mkdir -p "$INSTALL_ROOT"
@@ -449,6 +450,18 @@ OUT
   # nop
 }
 
+@test "JRuby Java 7 missing" {
+  # nop
+}
+
+@test "JRuby Java is outdated" {
+  # nop
+}
+
+@test "JRuby Java 7 up-to-date" {
+  # nop
+}
+
 @test "non-writable TMPDIR aborts build" {
   export TMPDIR="${TMP}/build"
   mkdir -p "$TMPDIR"
diff --git a/plugins/python-build/test/compiler.bats b/plugins/python-build/test/compiler.bats
index 154c1156..a8de5a07 100644
--- a/plugins/python-build/test/compiler.bats
+++ b/plugins/python-build/test/compiler.bats
@@ -5,8 +5,13 @@ export MAKE=make
 export MAKE_OPTS='-j 2'
 export -n CFLAGS
 export -n CC
+export -n PYTHON_CONFIGURE_OPTS
 
 @test "require_gcc on OS X 10.9" {
+  # yyuu/pyenv#222
+  stub uname '-s : echo Darwin'
+  stub sw_vers '-productVersion : echo 10.9.5'
+
   stub uname '-s : echo Darwin'
   stub sw_vers '-productVersion : echo 10.9.5'
   stub gcc '--version : echo 4.2.1'
@@ -24,6 +29,10 @@ OUT
 }
 
 @test "require_gcc on OS X 10.10" {
+  # yyuu/pyenv#222
+  stub uname '-s : echo Darwin'
+  stub sw_vers '-productVersion : echo 10.10'
+
   stub uname '-s : echo Darwin'
   stub sw_vers '-productVersion : echo 10.10'
   stub gcc '--version : echo 4.2.1'
@@ -36,7 +45,7 @@ DEF
   assert_success
   assert_output <<OUT
 CC=${TMP}/bin/gcc
-MACOSX_DEPLOYMENT_TARGET=10.10
+MACOSX_DEPLOYMENT_TARGET=10.9
 OUT
 }
 
diff --git a/plugins/python-build/test/pyenv.bats b/plugins/python-build/test/pyenv.bats
index 88994bec..471e80e3 100644
--- a/plugins/python-build/test/pyenv.bats
+++ b/plugins/python-build/test/pyenv.bats
@@ -146,3 +146,42 @@ ${PYENV_ROOT}/plugins/bar/share/python-build
 ${PYENV_ROOT}/plugins/foo/share/python-build
 OUT
 }
+
+@test "not enough arguments for pyenv-install" {
+  stub_python_build
+  run pyenv-install
+  assert_failure
+  assert_output_contains 'Usage: pyenv install'
+}
+
+@test "too many arguments for pyenv-install" {
+  stub_python_build
+  run pyenv-install 3.4.1 3.4.2
+  assert_failure
+  assert_output_contains 'Usage: pyenv install'
+}
+
+@test "show help for pyenv-install" {
+  stub_python_build
+  run pyenv-install -h
+  assert_success
+  assert_output_contains 'Usage: pyenv install'
+}
+
+@test "not enough arguments pyenv-uninstall" {
+  run pyenv-uninstall
+  assert_failure
+  assert_output_contains 'Usage: pyenv uninstall'
+}
+
+@test "too many arguments for pyenv-uninstall" {
+  run pyenv-uninstall 3.4.1 3.4.2
+  assert_failure
+  assert_output_contains 'Usage: pyenv uninstall'
+}
+
+@test "show help for pyenv-uninstall" {
+  run pyenv-uninstall -h
+  assert_success
+  assert_output_contains 'Usage: pyenv uninstall'
+}
diff --git a/plugins/python-build/test/test_helper.bash b/plugins/python-build/test/test_helper.bash
index f4adba9c..1aced34a 100644
--- a/plugins/python-build/test/test_helper.bash
+++ b/plugins/python-build/test/test_helper.bash
@@ -115,6 +115,10 @@ assert_output() {
 
 assert_output_contains() {
   local expected="$1"
+  if [ -z "$expected" ]; then
+    echo "assert_output_contains needs an argument" >&2
+    return 1
+  fi
   echo "$output" | $(type -p ggrep grep | head -1) -F "$expected" >/dev/null || {
     { echo "expected output to contain $expected"
       echo "actual: $output"