diff --git a/examples/example.borg b/examples/example.borg
index 4abc2c0a91575c33dbf1c06ed7719fee376f87f8..5d5212a2fb964ce87f5b90319718fcc6bca18648 100644
--- a/examples/example.borg
+++ b/examples/example.borg
@@ -6,8 +6,8 @@
 ## as the commented out option, uncomment and change when
 ## necessary. Options which are uncommented in this example do not have
 ## defaults, and the settings provided are recommended.
-## 
-## The defaults are useful in most cases, just make sure to configure the 
+##
+## The defaults are useful in most cases, just make sure to configure the
 ## destination host and user.
 ##
 
@@ -82,7 +82,7 @@ exclude = /var/lib/mysql
 ## put the backups under this directory, this must be set!
 ## an example setting would be:
 ## directory = /backups
-## 
+##
 ## Default:
 # directory =
 
@@ -90,6 +90,8 @@ exclude = /var/lib/mysql
 ## an example setting would be:
 ## host = backuphost
 ##
+## set host = localhost for local backups (no ssh)
+##
 ## Default
 # host =
 
@@ -118,4 +120,4 @@ exclude = /var/lib/mysql
 ## for more info see : borg create -h
 ##
 ## Default:
-# compression = lz4
\ No newline at end of file
+# compression = lz4
diff --git a/handlers/borg b/handlers/borg
index 9e2fb2d835dce017172cfd867c6b4df858064d5c..bc6e112789ccb0502fc132a6be1afddb0dafb1c5 100644
--- a/handlers/borg
+++ b/handlers/borg
@@ -44,7 +44,11 @@ fi
 
 # destination specific checks
 [ "$directory" != "" ] || fatal "Destination directory not set"
-execstr_repository="$user@$host:$directory"
+if [ "$host" != "localhost" ]; then
+  execstr_repository="$user@$host:$directory"
+else
+  execstr_repository="$directory"
+fi
 execstr_archive="$archive"
 
 ### INIT IF NEEDED ###
@@ -117,4 +121,4 @@ else
    warning "Failed removing old backups."
 fi
 
-return 0
\ No newline at end of file
+return 0
diff --git a/handlers/borg.in b/handlers/borg.in
new file mode 100644
index 0000000000000000000000000000000000000000..4b7e7168855f6cc02702b30dac564122e7188a44
--- /dev/null
+++ b/handlers/borg.in
@@ -0,0 +1,128 @@
+# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*-
+# vim: set filetype=sh sw=3 sts=3 expandtab autoindent:
+#
+# borg handler script for backupninja
+# requires borgbackup
+#
+# TODO: encryption support
+#
+
+export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
+
+### GET CONFIG ###
+
+getconf testconnect yes
+getconf nicelevel 0
+
+setsection source
+getconf keepdaily 7
+getconf keepweekly 4
+getconf keepmonthly -1
+getconf include
+getconf exclude
+
+setsection dest
+getconf user
+getconf host
+getconf directory
+# strip trailing /
+directory=${directory%/}
+getconf archive {now:%Y-%m-%d}
+getconf compression lz4
+
+### CHECK CONFIG ###
+
+# check the connection at the source and destination
+[ -n "$test" ] || test=0
+if [ "$host" != "localhost" ] && ([ "$testconnect" = "yes" ] || [ "${test}" -eq 1 ]); then
+   debug "ssh -o PasswordAuthentication=no $host -l $user 'echo -n 1'"
+   local ret=`ssh -o PasswordAuthentication=no $host -l $user 'echo -n host is alive'`
+   if echo $ret | grep "host is alive"; then
+      debug "Connected to $host as $user successfully"
+   else
+      fatal "Can't connect to $host as $user."
+   fi
+fi
+
+# destination specific checks
+[ "$directory" != "" ] || fatal "Destination directory not set"
+if [ "$host" != "localhost" ]; then
+  execstr_repository="$user@$host:$directory"
+else
+  execstr_repository="$directory"
+fi
+execstr_archive="$archive"
+
+### INIT IF NEEDED ###
+
+# :TODO:maethor:160509: Manage encryption
+
+initstr="borg init --encryption=none $execstr_repository"
+debug "$initstr"
+
+if [ $test = 0 ]; then
+    output="`su -c "$initstr" 2>&1`"
+    if [ $? = 2 ]; then
+       debug $output
+       info "Repository was already initialized"
+    else
+       warning $output
+       warning "Repository has been initialized"
+    fi
+fi
+
+### EXECUTE ###
+
+execstr="borg create --stats --compression $compression"
+
+set -o noglob
+
+# includes
+SAVEIFS=$IFS
+IFS=$(echo -en "\n\b")
+for i in $include; do
+   includes="${includes} '$i'"
+done
+IFS=$SAVEIFS
+
+# excludes
+SAVEIFS=$IFS
+IFS=$(echo -en "\n\b")
+for i in $exclude; do
+   excludes="${excludes} --exclude '$i'"
+done
+IFS=$SAVEIFS
+
+set +o noglob
+
+# include client-part and server-part
+execstr="${execstr} ${excludes} $execstr_repository::$execstr_archive ${includes}"
+
+debug "$execstr"
+if [ $test = 0 ]; then
+   output=`nice -n $nicelevel su -c "$execstr" 2>&1`
+   if [ $? = 0 ]; then
+      debug $output
+      info "Successfully finished backing up source $label"
+   else
+      error $output
+      fatal "Failed backuping up source $label"
+   fi
+fi
+
+### REMOVE OLD BACKUPS ###
+
+# borg prune
+prunestr="borg prune --keep-daily $keepdaily --keep-weekly $keepweekly --keep-monthly $keepmonthly $execstr_repository"
+
+debug "$prunestr"
+output="`su -c "$prunestr" 2>&1`"
+if [ $? = 0 ]; then
+   debug $output
+   info "Removing old backups succeeded."
+else
+   warning $output
+   warning "Failed removing old backups."
+fi
+
+return 0