diff --git a/prompt_fresh_setup b/prompt_fresh_setup
index 60904ba..1cc5a41 100644
--- a/prompt_fresh_setup
+++ b/prompt_fresh_setup
@@ -1,8 +1,35 @@
+prompt_fresh_help() {
+  echo "\
+options:
+        -a      enable almostontop like behaviour"
+}
+
 prompt_fresh_setup() {
-  compile_git_prompt
+  fresh_compile_git_prompt
+
+  # Parse options
+  local almostontop=0
+  while getopts 'a' opt; do
+    case $opt in
+      a) local almostontop=1 ;;
+      *) prompt -h fresh; return 1 ;;
+    esac
+  done
 
   autoload -U add-zsh-hook
-  add-zsh-hook precmd fresh_precmd
+
+  # Hook to print the first line of the "two line" prompt, this line is not
+  # actually part of the prompt so does not get redrawn which can sometimes
+  # cause lines before the prompt to disappear.
+  add-zsh-hook precmd fresh_line_one
+
+  if [ $almostontop -eq 1 ]; then
+    # Hook to clear the screen then prints the prompt with previous command at
+    # the top of the screen.
+    add-zsh-hook preexec fresh_almostontop
+  else
+    add-zsh-hook -d preexec fresh_almostontop
+  fi
 
   if [ "$USERNAME" = "root" ]; then
     local user="%{%F{9}%}%n%{%f%}"
@@ -14,7 +41,7 @@ prompt_fresh_setup() {
     local user="%{%F{35}%}$user%{%f%}@%{%F{244}%}%M%{%f%}"
   fi
 
-  local length=`visible_length "$user"`
+  local length=`fresh_visible_length "$user"`
 
   PS1="«$user» "
   PS2="${(l:$length + 1:: :)}» "
@@ -28,7 +55,7 @@ prompt_cleanup() {
   if [ -f ~/.cache/zsh/git-prompt ]; then rm ~/.cache/zsh/git-prompt; fi
 }
 
-fresh_precmd() {
+fresh_line_one() {
   # First get the last commands exit code before doing anything
   local exit_code=$?
 
@@ -99,7 +126,7 @@ fresh_precmd() {
   else
     # The last command failed, display its error code at the right
     local result="%{%B%F{1}%}$exit_code%{%f%b%}"
-    local length=`visible_length "$line$result"`
+    local length=`fresh_visible_length "$line$result"`
     print -P "$line${(l:COLUMNS - $length - 1:: :)}$result"
   fi
 }
@@ -115,11 +142,17 @@ fresh_rprompt() {
   echo $rprompt
 }
 
-visible_length() {
+fresh_almostontop() {
+  clear
+  fresh_line_one
+  print -P "$PROMPT"'$1'
+}
+
+fresh_visible_length() {
   echo $(( ${#${(S%%)1//(\%(KF1]|)\{*\}|\%[Bbkf])}} ))
 }
 
-compile_git_prompt() {
+fresh_compile_git_prompt() {
   # Compile a simple C executable which parses the output of `git status
   # --procelain` to greatly decrease the time taken to render the prompt
   local cache=~/.cache/zsh