diff --git a/deployment.sh b/deployment.sh
index fdbb2b0..3a2068c 100755
--- a/deployment.sh
+++ b/deployment.sh
@@ -2228,20 +2228,40 @@ puppet_install_from_git () {
   umount -f "${PUPPET_RESCUE_PATH}"
   rmdir "${PUPPET_RESCUE_PATH}"
 
-  echo "Initializing Hiera config..."
-  grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" \
-        -e "include puppet::hiera" 2>&1 | tee -a /tmp/puppet.log
-  check_puppet_rc "${PIPESTATUS[0]}" "2"
+  while $repeat ; do
+    repeat=false
+
+    echo "Initializing Hiera config..."
+    grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" \
+          -e "include puppet::hiera" 2>&1 | tee -a /tmp/puppet.log
+    check_puppet_rc "${PIPESTATUS[0]}" "2"
+
+    echo "Running Puppet core deployment..."
+    grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" --tags core,apt \
+          "${PUPPET_CODE_PATH}/manifests/site.pp" 2>&1 | tee -a /tmp/puppet.log
+    check_puppet_rc "${PIPESTATUS[0]}" "2"
 
-  echo "Running Puppet core deployment..."
-  grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" --tags core,apt \
-        "${PUPPET_CODE_PATH}/manifests/site.pp" 2>&1 | tee -a /tmp/puppet.log
-  check_puppet_rc "${PIPESTATUS[0]}" "2"
+    echo "Running Puppet deployment..."
+    grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" \
+          "${PUPPET_CODE_PATH}/manifests/site.pp" 2>&1 | tee -a /tmp/puppet.log
+    check_puppet_rc "${PIPESTATUS[0]}" "2"
 
-  echo "Running Puppet deployment..."
-  grml-chroot $TARGET puppet apply --test --modulepath="${PUPPET_CODE_PATH}/modules" \
-        "${PUPPET_CODE_PATH}/manifests/site.pp" 2>&1 | tee -a /tmp/puppet.log
-  check_puppet_rc "${PIPESTATUS[0]}" "2"
+    if ! checkBootParam nopuppetrepeat && [ "$(get_deploy_status)" = "error" ] ; then
+      echo "Do you want to [r]epeat puppet run? (Press any other key to continue without repeating.)"
+      read a
+      case "$a" in
+        r)
+          echo "Repeating puppet run."
+          repeat=true
+          set_deploy_status "puppet"
+          ;;
+        *)
+          echo "Continue without repeating puppet run."
+          ;;
+      esac
+      unset a
+    fi
+  done
 
   # We want to keep the folder itself (because some day it may be 'production' env passed as pappetenv which
   # folder should be existent for normal puppet server startup) but just delete all puppet code from there
@@ -2270,6 +2290,7 @@ puppet_install_from_puppet () {
         r)
           echo "Repeating puppet run."
           repeat=true
+          set_deploy_status "puppet"
           ;;
         *)
           echo "Continue without repeating puppet run."