diff --git a/src/warden-server/sh/update.sh b/src/warden-server/sh/update.sh
index 220e7e04e5f5f309f1caaa5f69cd784e7484a420..822088f135369a97dffc59bcffb95e0e34ffcfbe 100755
--- a/src/warden-server/sh/update.sh
+++ b/src/warden-server/sh/update.sh
@@ -2,7 +2,7 @@
 #
 # update.sh
 #
-# Copyright (C) 2011-2013 Cesnet z.s.p.o
+# Copyright (C) 2011-2014 Cesnet z.s.p.o
 #
 # Use of this source is governed by a BSD-style license, see LICENSE file.
 
@@ -10,19 +10,18 @@
 VERSION="2.2"
 
 #-------------------------------------------------------------------------------
-#				FUNCTIONS
+#				Script functions
 #-------------------------------------------------------------------------------
 usage()
 {
-	echo "Usage: `basename $0` [-d <directory>] [-hV]"
-	echo "-d <directory>            destination directory (default: /opt)"
+	echo "Usage: ${0##*/} -d <directory> [-hV]"
+	echo "-d <directory>            destination directory of Warden server"
 	echo "-h                        print this help"
 	echo "-V                        print script version number and exit"
 	echo
-	echo "Example: # ./`basename $0` -d /opt"
+	echo "Example: $ ./${0##*/} -d /opt/warden-server"
 	echo
-	echo "Note: You must be root for running this script."
-	echo "      For more information about update process, see README file (section Update)."
+	echo "For more information about update process, see README file (section Update)."
 	echo
 	exit 0
 }
@@ -30,7 +29,7 @@ usage()
 
 version()
 {
-	echo "`basename ${0}` - current version is $VERSION"
+	echo "${0##*/} - current version is $VERSION"
 	exit 0
 }
 
@@ -38,9 +37,9 @@ version()
 err()
 {
 	echo "FAILED!"
-	cat $err
-	rm -rf $err
-	rm -rf $backup_dir
+	cat "$err"
+	rm -f "$backup"
+	rm -f "$err"
 	echo
 	echo "Update from $old_package_version to $package_version package FAILED!!!"
 	exit 1
@@ -54,44 +53,42 @@ errClean()
 	rm -rf ${server_path}/* > /dev/null 2>&1
 	cp -R ${backup_dir}/* $server_path
 	cat $err
-	rm -rf $err $backup_dir
+	rm -rf $err $backup
 	echo
 	echo "Update from $old_package_version to $package_version package FAILED!!!"
 	exit 1
 }
 
 
-rootChck()
-{
-	if [ $UID -ne 0 ]; then
-		echo "You must be root for running this script!"
-		exit 1
-	fi
-}
-
-
 paramsChck()
 {
-	if [ -z $prefix ]; then
+	if [ -z "$basedir" ]; then
 		echo "Parameter -d <directory> is not set!"
 		exit 1
 	fi
 }
 
 
-obtainPackageVersion()
+#-------------------------------------------------------------------------------
+#                               Installation functions
+#-------------------------------------------------------------------------------
+
+oldPackageChck()
 {
-	if [ -f $old_package_version_file ]; then 
-		old_package_version=`cat $old_package_version_file`
+	echo -n "Checking previous Warden server installation ... "
+	old_package_version_file=$(find "$basedir" -name package_version)
+	if [ -f "$old_package_version_file" ]; then 
+		old_package_version=$(<"$old_package_version_file")
 		if [ "$old_package_version" == "$package_version" ]; then
 			echo "Sorry, but $package_version package is already installed!"
 			exit 1
 		fi
 	else
-		echo "Sorry, but Warden server package is not installed!"
-		echo "For installation of Warden server package please use install.sh script."
+		echo "Sorry, but Warden server package is not yet installed!"
+		echo "For installation of Warden server package please use install.sh"
 		exit 1
 	fi
+	echo "OK"
 }
 
 
@@ -102,68 +99,42 @@ perlChck()
 		echo "OK"
 	else
 		echo "FAILED!"
+		echo
 		echo "Error: Perl interpreter is not installed!" 
 		exit 1
 	fi
 }
 
 
-rsyncChck()
-{
-	echo -n "Checking Rsync ... "
-	if which rsync 1> /dev/null; then
-		echo "OK"
-	else
-		echo "FAILED!"
-		echo "Error: Rsync is not installed!" 
-		exit 1
-	fi
-}
-
-
 modulesChck()
 {
-	for module in ${modules[@]};
+	sed '/^use [A-Z]/!d; /Warden/d' $(find "${dirname}" -type f) 2>/dev/null | cut -f 2 -d " " | sed 's/;//' | sort -u | \
+	while read module;
 	do
 		echo -n "Checking $module module ... "
-		if perl -e "use $module" 2> $err; then
-			echo "OK"
-		else
-			err
-		fi
+		perl -e "use $module" 2> "$err" && echo "OK" || err
 	done
 }
 
 
 wardenDirChck()
 {
-	echo -n "Checking Warden server directory ... "
-	if [ ! -d $server_path ]; then
-		echo "FAILED!"
-		ls $server_path
-		exit 1
-	else
-		echo "OK"
-	fi
+        echo -n "Checking Warden server directory ... "
+        if [[ ! -d "$basedir" ]] && [[ ! -w "$basedir" ]]; then
+                echo "FAILED!"
+                echo "No version of Warden server is not installed!"
+                exit 1
+        else
+                echo "OK"
+        fi  
 }
 
 
 backup()
 {
-	echo -n "Backing-up Warden server directory ... "
-	mkdir $backup_dir
-	if cp -R ${server_path}/* $backup_dir 2> $err; then
-		echo "OK"
-	else
-		err
-	fi
-}
-
-
-obtainWardenUser()
-{
-	echo -n "Obtaining Warden server directory owner ... "
-	if user=`stat -c %U $server_conf_file` 2> $err; then
+	echo -n "Making Warden server backup ... "
+	mkdir $backup
+	if cp -R "${basedir}/"* "$backup" 2> "$err"; then
 		echo "OK"
 	else
 		err
@@ -173,14 +144,8 @@ obtainWardenUser()
 
 updateWardenDir()
 { 
-	echo -n "Updating Warden server directory ... "
-	if rsync -q --recursive --archive --delete --exclude='etc' --exclude='sh' ${dirname}/warden-server $prefix 2> $err; then
-		echo "OK"
-	else
-		errClean
-	fi
-	cp ${dirname}/warden-server/etc/package_version $etc
-	cp ${dirname}/uninstall.sh $server_path
+	echo -n "Updating Warden server ... "
+
 }
 
 
@@ -328,65 +293,61 @@ $valid_strings" > $server_conf_file 2> $err; ret_val=`echo $?`
 #				MAIN
 #-------------------------------------------------------------------------------
 
-# list of used Perl modules
-modules=(SOAP::Lite SOAP::Transport::HTTP DBI DBD::mysql Format::Human::Bytes Sys::Syslog File::Basename Net::CIDR::Lite DateTime Getopt::Std Switch IO::Socket::SSL MIME::Base64 Crypt::X509 Carp FindBin)
-
 # read input
 while getopts "d:Vh" options; do
-	case $options in
-		d ) prefix=$OPTARG;;
+	case "$options" in
+		d ) basedir="$OPTARG";;
 		h ) usage;;
 		V ) version;;
 		* ) usage;;
 	esac
 done
 
-# root test
-rootChck
+# remove last char (slash) from name of directories
+[[ "$basedir" == */ ]] && basedir="${basedir%?}"
 
 # params test
 paramsChck
 
-# create variables
-dirname=`dirname $0`
-package_version=`cat ${dirname}/warden-server/etc/package_version`
-[[ $prefix == */ ]] && prefix="${prefix%?}" # remove last char (slash) from prefix
-server_path="${prefix}/warden-server"
-etc="${server_path}/etc"
-doc="${server_path}/doc"
-old_package_version_file="${etc}/package_version"
-apache_conf_file="${etc}/warden-apache.conf"
-server_conf_file="${etc}/warden-server.conf"
+# set variables
 err="/tmp/warden-err"
-backup_dir="/tmp/warden-server-backup"
+backup="/tmp/warden-server-backup"
+hostname=$(hostname -f || echo "unspecified.server")
+dirname=${0%/*}
+doc="${basedir}/doc"
+etc="${basedir}/etc"
+server_conf="${etc}/warden-server.conf"
+apache_conf="${etc}/warden-apache.conf"
+watchdog_conf="${etc}/warden-watchdog.conf"
+server_conf_tmpl="${dirname}/etc/warden-server.conf.tmpl"
+apache_conf_tmpl="${dirname}/etc/warden-apache.conf.tmpl"
+watchdog_conf_tmpl="${dirname}/etc/warden-watchdog.conf.tmpl"
+package_version=$(<"${dirname}/etc/package_version")
+manifest="${dirname}/doc/MANIFEST"
 
-# obtain version of old warden server
-obtainPackageVersion
 
 echo
 echo "------------------------- Dependencies check-in -------------------------"
 
+# check warden server directory
+wardenDirChck
+
+# 
+oldPackageChck
+
 # Perl interpreter test
 perlChck
 
-# Rsync availability test
-rsyncCheck
-
 # Perl modules test
 modulesChck
 
 echo
 echo "------------------------- Update process --------------------------------"
 
-# check warden server directory
-wardenDirChck
 
 # backup old warden server installation
 backup
 
-# obtain current warden server user
-obtainWardenUser
-
 # make warden server directory
 updateWardenDir
 
@@ -406,6 +367,6 @@ echo "Please follow post-update steps in ${doc}/UPDATE!"
 echo
 
 # cleanup section
-rm -rf $err $backup_dir
+rm -rf $err $backup
 
 exit 0