diff --git a/plugins/hcht.plugin.bash b/plugins/hcht.plugin.bash
deleted file mode 100644
index cdab44f..0000000
--- a/plugins/hcht.plugin.bash
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/bin/bash
-# hcht.plugin.bash: the handmade commandline history tool
-# Copyright: (C) 2010 Florian Baumann <flo@noqqe.de>
-# License: GPL-3 <http://www.gnu.org/licenses/gpl-3.0.txt>
-# Date: Dienstag 2010-11-30
-
-### readme 
-# basiclly the handmade commandline history tool was made for storing
-# informations. yeah, you're right. sounds a bit boring. many other
-# applications can do this much better. but storing things from commandline? 
-# 
-# hcht was fitted to work at your terminal. 
-# your daily stuff like notices, todos, commands or output from a command. 
-# all these things will be stored without complex syntax. 
-# 
-# once you defined your storing-directory you will be able to easily
-# save all the stuff listed above. 
-#
-
-### create a file
-# the basic feature. open a file, do stuff and save.
-#
-# $ hcht evilcommand.hch
-#
-# this will create a new file or edit a existing one. 
-# paste your command or notice in your favorite editor
-
-### show all stored informations
-# to get an overview of your storedir:
-#
-# $ hcht
-
-### todo with a whole sentence
-# you can give hcht a bunch of parameters
-#
-# $ hcht this is a long reminder about a anything
-
-### save last executed command
-# lets say you did a great hack at your system and you
-# want to save it without complicated use of coping:
-#
-# $ hcht !! 
-#
-# the "!!" will repeat the _last_ command you executed at 
-# your terminal. after asking you about a name the hch file 
-# will be saved.  
-
-### read from stdin
-# hcht is also able to read anything from stdin. 
-#
-# $ cat any_important_logfile | hcht anylog 
-#
-# "anylog" will be the name of the saved file.  
-
-hcht() {
-    # configured?
-    if [ -z $hchtstoredir ]; then
-        echo "ERROR: handmade commandline history tool isn't configured."
-        return 1
-    else
-        hchtstoredir=$(echo $hchtstoredir | sed -e 's/\/$//')
-    fi
-
-    # dir available?
-    if [ ! -d $hchtstoredir ]; then
-        echo "ERROR: No such directory: $hchtstoredir"
-        return 1
-    fi
-
-    # get favorite editor
-    if [ -z $EDITOR ]; then
-        EDITOR=$(which vim || which nano)
-    fi
-
-    # check if stdin-data is present and save content
-    if [ "$(tty)" = "not a tty" ]; then
-        hchname=$(echo $1 | sed -e 's/\ //g')
-        if [ -z $hchname ]; then
-            cat < /dev/stdin >> $hchtstoredir/$(date +%Y%m%d%H%M%S).hch
-        else
-            cat < /dev/stdin >> $hchtstoredir/$hchname.hch
-        fi
-        return 0
-    fi
-
-    # list all hch files if no parameter is given
-    if [ $# -eq 0 ]; then
-        for file in $(ls $hchtstoredir); do
-            echo $file
-        done
-        return 0
-    fi
-
-    # if a *.hch file is given start editing or creating it
-    if [ "$#" -eq "1" ]; then 
-        if echo "$1" | grep -q -e ".*.hch$" ; then
-            $EDITOR ${hchtstoredir}/${1}
-            return 0
-        else 
-            $EDITOR ${hchtstoredir}/${1}.hch
-            return 0
-        fi
-    fi
-
-    # autocreate a new hch  
-    if [ "$#" -gt "1" ]; then
-        echo -n "define a name: " ; read hchname
-        hchname=$(echo $hchname | sed -e 's/\ /_/g')
-        if [ -z "$hchname" ]; then
-            echo "$*" > $hchtstoredir/${1}-$(date +%Y%m%d%H%M%S).hch
-        else
-            echo "$*" > ${hchtstoredir}/${hchname}.hch
-        fi
-        return 0
-    fi    
-}
diff --git a/template/bash_profile.template.bash b/template/bash_profile.template.bash
index 6f86712..30ab0fc 100644
--- a/template/bash_profile.template.bash
+++ b/template/bash_profile.template.bash
@@ -47,9 +47,6 @@
 
 export TODO="t"
 
-# Set store directory for handmade commandline history tool 
-export hchtstoredir="$HOME/.hcht"
-
 # Set vcprompt executable path for scm advance info in prompt (demula theme)
 # https://github.com/xvzf/vcprompt
 #export VCPROMPT_EXECUTABLE=~/.vcprompt/bin/vcprompt
