diff --git a/NOTICE b/NOTICE
index c585f50..8ac6452 100644
--- a/NOTICE
+++ b/NOTICE
@@ -13,9 +13,3 @@
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-
-
-This product includes software covered by the following licenses:
-
-   Build Scripts from Erlang Solutions, Ltd. made available
-   under the Apache License, Version 2.0.
diff --git a/util/releaser b/util/releaser
deleted file mode 100755
index 7a8faf9..0000000
--- a/util/releaser
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/bin/sh
-
-##==============================================================================
-## Copyright 2010 Erlang Solutions Ltd.
-## 
-## Licensed under the Apache License, Version 2.0 (the "License");
-## you may not use this file except in compliance with the License.
-## You may obtain a copy of the License at
-##
-## http://www.apache.org/licenses/LICENSE-2.0
-##
-## Unless required by applicable law or agreed to in writing, software
-## distributed under the License is distributed on an "AS IS" BASIS,
-## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-## See the License for the specific language governing permissions and
-## limitations under the License.
-##==============================================================================
-
-NAME=$1
-VSN=$2
-
-yesno() {
-    prompt=$1
-    while true; do
-        read -p "$1 [Y/n] " answer
-        case "x$answer" in
-            "x")
-            return 0
-            ;;
-            "xY")
-            return 0
-            ;;
-            "xy")
-            return 0
-            ;;
-            "xN")
-            return 1
-            ;;
-            "xn")
-            return 1
-            ;;
-            *)
-            ;;
-        esac
-    done
-}
-
-get_version() {
-    while true; do
-        read -p "What is the version of the release? [$VSN] " release_vsn
-
-        if [ "$release_vsn" = "" ]; then
-            release_vsn=$VSN
-        fi
-
-        if $(echo "$TAGS" | grep -q "^$release_vsn\$"); then
-            if yesno "A tag exists for version $release_vsn, is this correct?"; then
-                break
-            fi
-        else
-            if yesno "A tag doesn't exist for version $release_vsn, should one be created?"; then
-                hg tag $release_vsn
-            fi
-            break
-        fi
-    done
-    echo $release_vsn
-}
-
-if ! git branch 1>/dev/null 2>&1; then
-    echo "No git repository here..."
-    exit 1
-fi
-
-if ! [ "$(git branch | grep '^\*' | awk '{print $2};')" = "master" ]; then
-    if ! yesno "Repository is not at master, do you want to continue?"; then
-        exit 1
-    fi
-fi
-
-if ! yesno "Did the compilation run without warnings?"; then
-    echo "Try again..."
-    exit 1
-fi
-
-if ! yesno "Is the changelog up to date?"; then
-    echo "Try again..."
-    exit 1
-fi
-
-if ! yesno "Did dialyzer run without warnings?"; then
-    echo "Try again..."
-    exit 1
-fi
-
-TAGS=$(hg tags | awk '{print $1 };' | grep -v "^tip$")
-LATEST_TAG=$(echo "$TAGS" | head -n 1)
-
-RELEASE_VSN=$(get_version)
-echo "Creating a release for $NAME-$RELEASE_VSN now."
-archive="./$NAME-$RELEASE_VSN.tar.gz"
-if [ -e $archive ]; then
-    echo "$archive exists, giving up."
-    exit 1
-fi
-echo hg archive -t tgz -X ".hg*" $archive
