diff --git a/bin/epm b/bin/epm
index 1e6cac6d4f22860208d29820af564b6550953c78..be04c4e42b02f5f38c2fe00cfb703df018e41158 100755
--- a/bin/epm
+++ b/bin/epm
@@ -297,7 +297,8 @@ check_option()
 check_filenames()
 {
     local opt="$1"
-    if [ -f "$opt" ] && echo $opt | grep -q "\." ; then
+    # files can be with full path or have extension via .
+    if [ -f "$opt" ] && echo "$opt" | grep -q "[/\.]" ; then
         pkg_files="$pkg_files $opt"
     else
         pkg_names="$pkg_names $opt"
diff --git a/bin/epm-Install b/bin/epm-Install
index 85de4dd2bb339e0fcea2be9911b9d787db735529..8e176c990e31710d8b2f6c86b38c111bf4651182 100644
--- a/bin/epm-Install
+++ b/bin/epm-Install
@@ -26,7 +26,7 @@ epm_Install()
     local names="$(echo $pkg_names | filter_out_installed_packages)"
     local files="$(echo $pkg_files | filter_out_installed_packages)"
 
-    [ -z "$files$names" ] && echo "Skip empty install list" && return 22
+    [ -z "$files$names" ] && info "Install: Skip empty install list." && return 22
 
 	# do update only if really need install something
 	case $PMTYPE in
diff --git a/bin/epm-addrepo b/bin/epm-addrepo
index 17db3d75f2d0cdd51c4b5c63418b1c4f4938141e..499a9076bbeb92c8a11068fbe14f22d2b572325b 100644
--- a/bin/epm-addrepo
+++ b/bin/epm-addrepo
@@ -25,10 +25,10 @@ case $PMTYPE in
 		sudocmd apt-repo add $pkg_filenames
 		;;
 	apt-dpkg|aptitude-dpkg)
-		echo "You need manually add repo to /etc/apt/sources.list"
+		info "You need manually add repo to /etc/apt/sources.list"
 		;;
 	yum-rpm)
-		echo "You need manually add repo to /etc/yum.repos.d/"
+		info "You need manually add repo to /etc/yum.repos.d/"
 		;;
 	urpm-rpm)
 		sudocmd urpmi.addmedia $pkg_filenames
@@ -40,7 +40,7 @@ case $PMTYPE in
 		sudocmd layman -a $pkg_filenames
 		;;
 	pacman)
-		echo "You need manually add repo to /etc/pacman.conf"
+		info "You need manually add repo to /etc/pacman.conf"
 		# Only for alone packages:
 		#sudocmd repo-add $pkg_filenames
 		;;
@@ -48,7 +48,7 @@ case $PMTYPE in
 		sudocmd npackdcl add-repo --url=$pkg_filenames
 		;;
 	slackpkg)
-		echo "You need manually add repo to /etc/slackpkg/mirrors"
+		info "You need manually add repo to /etc/slackpkg/mirrors"
 		;;
 	*)
 		fatal "Have no suitable command for $PMTYPE"
diff --git a/bin/epm-assure b/bin/epm-assure
index a13a5fd062c9043c8ea47f7d016f219054454e2b..b78ed3125b47d9b92cc6a8f2e9f51ba938fa3070 100644
--- a/bin/epm-assure
+++ b/bin/epm-assure
@@ -36,14 +36,14 @@ __epm_assure()
     if __check_command_in_path "$1" >/dev/null ; then
         if [ -n "$verbose" ] ; then
             local compath="$(__check_command_in_path "$1")"
-            echo "Command $1 is exists: $compath"
+            info "Command $1 is exists: $compath"
             epm qf "$compath"
         fi
         return
     fi
 
     # TODO: use package name normalization
-    echo "Install appropriate package for $1 command..."
+    info "Installing appropriate package for $1 command..."
 
     local PACKAGE="$2"
     [ -n "$PACKAGE" ] || PACKAGE="$1"
@@ -58,7 +58,7 @@ __epm_assure()
 
 epm_assure()
 {
-    [ -n "$pkg_filenames" ] || fatal "Run assure without params"
+    [ -n "$pkg_filenames" ] || fatal "Assure: Missing params. Check $0 --help for info."
 
     # use helper func for extract separate params
     __epm_assure $pkg_filenames
diff --git a/bin/epm-autoremove b/bin/epm-autoremove
index c806fd39d2448199d42a2da05884a2ad58e356fe..e970c2ef5c54e182ef09e052cf3d8a109ce17270 100644
--- a/bin/epm-autoremove
+++ b/bin/epm-autoremove
@@ -22,8 +22,8 @@ __epm_autoremove_altrpm()
 	local pkg
 	local flag=
 	load_helper epm-packages
-	echo
-	echo "Just remove all non -devel libs packages not need by anything"
+	info
+	info "Just removing all non -devel libs packages not need by anything"
 	for pkg in $(short=1 pkg_filenames= epm_packages | grep -- "^lib" | grep -v -- "-devel$" | grep -v -- ^libreoffice ) ; do
 		sudocmd rpm -v -e $pkg && flag=1
 	done
diff --git a/bin/epm-changelog b/bin/epm-changelog
index 7f2c1d394576b53b4c3f22f510911834316b57d3..b5d00535732f32b6d2a9f6b41dbd0e27e9762e74 100644
--- a/bin/epm-changelog
+++ b/bin/epm-changelog
@@ -104,7 +104,7 @@ __epm_changelog_unlocal_names()
 
 epm_changelog()
 {
-	[ -n "$pkg_filenames" ] || fatal "Run changelog without params"
+	[ -n "$pkg_filenames" ] || fatal "Changelog: Missing package(s) name"
 
 	__epm_changelog_files $pkg_files
 
diff --git a/bin/epm-check_updated_repo b/bin/epm-check_updated_repo
index 85b6a2bc8338a65659e0ee8077715df742be098e..ac4238b14b5a57b233bea71553c75d97d66e69d5 100644
--- a/bin/epm-check_updated_repo
+++ b/bin/epm-check_updated_repo
@@ -21,7 +21,10 @@ __is_repo_info_download()
 {
     case $PMTYPE in
         apt-*)
-            test -r /var/cache/apt/pkgcache.bin || return
+            if [ -r /var/cache/apt ] ; then
+                # FIXME: only if root permissions
+                test -r /var/cache/apt/pkgcache.bin || return
+            fi
             ;;
         *)
             ;;
diff --git a/bin/epm-checkpkg b/bin/epm-checkpkg
index fae14cc186ec8d8b92ea748c8b51aba2e4f4b77c..4e408eb29a1963e7170078fc480ea3763fde50e4 100644
--- a/bin/epm-checkpkg
+++ b/bin/epm-checkpkg
@@ -37,11 +37,8 @@ check_pkg_integrity()
 		true
 		;;
 	*)
+		assure_exists erc
 		docmd erc test "$PKG" && return
-		which erc >/dev/null 2>/dev/null && fatal "Check failed."
-		fatal "Install erc package for file package."
-		# TODO
-		epm install erc
 		;;
 	esac
 }
@@ -70,12 +67,12 @@ esac
 epm_checkpkg()
 {
 	if [ -n "$pkg_names" ] ; then
-		echo "Suggest $pkg_names are names of installed packages"
+		info "Suggest $pkg_names are name(s) of installed packages"
 		__epm_check_installed_pkg $pkg_names
 		return
 	fi
 
-	[ -n "$pkg_files" ] || fatal "Run without names"
+	[ -n "$pkg_files" ] || fatal "Checkpkg: missing file or package name(s)"
 	local pkg
 	for pkg in $pkg_files ; do
 		check_pkg_integrity $pkg || fatal "Broken package $pkg"
diff --git a/bin/epm-clean b/bin/epm-clean
index d3bc727a091bce3c7e84fc8af13abf24c5f81cf4..4236eed6c89c9fb2b0ac6fb09ec6f6007d88ae34 100644
--- a/bin/epm-clean
+++ b/bin/epm-clean
@@ -51,6 +51,6 @@ case $PMTYPE in
 		fatal "Have no suitable command for $PMTYPE"
 		;;
 esac
-	echo "It is recommend to run 'epm autoremove' also"
+	info "It is recommend to run 'epm autoremove' also"
 
 }
diff --git a/bin/epm-conflicts b/bin/epm-conflicts
index cebece7dd45c9eeecc4431d5bf5a699b3548fdf6..2da50dfb2bae9d2d137b4694008eac1ec77e66ba 100644
--- a/bin/epm-conflicts
+++ b/bin/epm-conflicts
@@ -98,7 +98,7 @@ docmd $CMD $pkg_names
 
 epm_conflicts()
 {
-	[ -n "$pkg_filenames" ] || fatal "Run query without names"
+	[ -n "$pkg_filenames" ] || fatal "Conflicts: Missing package(s) name"
 	epm_conflicts_files
 	epm_conflicts_names
 }
diff --git a/bin/epm-filelist b/bin/epm-filelist
index eadf0396c6b2b0241707973e82b08dc895539e60..b6bf0338ab00adb25ee08147de4f057c3f62a45a 100644
--- a/bin/epm-filelist
+++ b/bin/epm-filelist
@@ -135,7 +135,7 @@ __epm_filelist_name()
 
 epm_filelist()
 {
-	[ -n "$pkg_filenames" ] || fatal "Run query without names"
+	[ -n "$pkg_filenames" ] || fatal "Filelist: missing package(s) name"
 
 
 	__epm_filelist_file $pkg_files || return
diff --git a/bin/epm-info b/bin/epm-info
index eff2cca8a8e2c4bebcaf381700309b69f0f988fd..d1d6d9533ba0d1912515b664169098e7352a4004 100644
--- a/bin/epm-info
+++ b/bin/epm-info
@@ -33,7 +33,7 @@ __epm_info_rpm_low()
 epm_info()
 {
 
-[ -n "$pkg_filenames" ] || fatal "Run info without names"
+[ -n "$pkg_filenames" ] || fatal "Info: missing package(s) name"
 
 case $PMTYPE in
 	apt-rpm)
diff --git a/bin/epm-install b/bin/epm-install
index ba8fc08e6137074e0df3355b59c61217e78c2031..2ab947075dd2315cf7315931a6d533f4935760ed 100644
--- a/bin/epm-install
+++ b/bin/epm-install
@@ -152,7 +152,7 @@ epm_install_names()
 			__separate_sudocmd "guix package -i" "guix package -i" $@
 			return ;;
 		android)
-			warning "We have no idea how to use package repository, ever if it is F-Droid."
+			fatal "We still have no idea how to use package repository, ever if it is F-Droid."
 			return ;;
 		*)
 			fatal "Have no suitable install command for $PMTYPE"
@@ -369,12 +369,12 @@ epm_install()
         return
     fi
 
-    [ -n "$pkg_files$pkg_names" ] || { echo "Skip empty install list" ; return 22 ; }
+    [ -z "$pkg_files$pkg_names" ] && info "Skip empty install list" && return 22
 
     local names="$(echo $pkg_names | filter_out_installed_packages)"
     local files="$(echo $pkg_files | filter_out_installed_packages)"
 
-    [ -z "$files$names" ] && echo "Skip empty install list" && return 22
+    [ -z "$files$names" ] && info "Skip empty install list" && return 22
 
     # it is useful for first time running
     update_repo_if_needed
diff --git a/bin/epm-kernel_update b/bin/epm-kernel_update
index a0f237c348d6eac406f38f7605fdd31aeab05222..b4d2e508b13cec31109860592b74eb128cbfdd81 100644
--- a/bin/epm-kernel_update
+++ b/bin/epm-kernel_update
@@ -19,7 +19,7 @@
 
 epm_kernel_update()
 {
-	echo "Start update system kernel to the latest version"
+	info "Starting update system kernel to the latest version"
 
 	case $DISTRNAME in
 	ALTLinux)
diff --git a/bin/epm-provides b/bin/epm-provides
index e29848961c48e17d75d5a7e7b7da8a8e44fcaca8..2a777d110623066bec9c1929998e84674218a5ac 100644
--- a/bin/epm-provides
+++ b/bin/epm-provides
@@ -73,7 +73,7 @@ case $PMTYPE in
 	apt-dpkg)
 		# FIXME: need fix for a few names case
 		if is_installed $pkg_names ; then
-			echo "Please inform the author how to get provides from dpkg"
+			info "Please inform the author how to get provides from dpkg"
 		fi
 		#	CMD="rpm -q --provides"
 		#else
@@ -93,7 +93,8 @@ docmd $CMD $pkg_names
 
 epm_provides()
 {
-	[ -n "$pkg_filenames" ] || fatal "Run query without names"
+	[ -n "$pkg_filenames" ] || fatal "Provides: missing package(s) name"
+
 	epm_provides_files
 	epm_provides_names
 }
diff --git a/bin/epm-query b/bin/epm-query
index d4021a3023cbb057b186a97719b7200825f30f25..0e0452ea6b7598e796e9faca2bda9f07ca0031b4 100644
--- a/bin/epm-query
+++ b/bin/epm-query
@@ -176,7 +176,7 @@ separate_installed()
 
 epm_query()
 {
-	[ -n "$pkg_filenames" ] || fatal "Run query without names"
+	[ -n "$pkg_filenames" ] || fatal "Query: missing package(s) name"
 
 	__epm_query_file $pkg_files || return
 
diff --git a/bin/epm-query_file b/bin/epm-query_file
index dabda4724c22ecd3b91a4aae0741f2133e5a7a69..ad098f4014df9ecb397a4cb27d261a022d7ea105 100644
--- a/bin/epm-query_file
+++ b/bin/epm-query_file
@@ -33,7 +33,7 @@ __do_query_real_file()
 	else
 		TOFILE=`which $1 2>/dev/null || echo $1`
 		if [ "$TOFILE" != "$1" ] ; then
-		echo "Note: $1 is placed as $TOFILE"
+			info "Note: $1 is placed as $TOFILE"
 		fi
 	fi
 	
@@ -41,10 +41,11 @@ __do_query_real_file()
 	if [ -L "$TOFILE" ] ; then
 		__do_query $TOFILE
 		LINKTO=`readlink "$TOFILE"`
-		echo "Note: $TOFILE is link to $LINKTO"
+		info "Note: $TOFILE is link to $LINKTO"
 		__do_query_real_file "$LINKTO"
 	fi
-	FULLFILEPATH=`realpath $TOFILE`
+
+	FULLFILEPATH="$TOFILE"
 }
 
 dpkg_print_name_version()
@@ -141,6 +142,7 @@ epm_query_file()
 {
     # in short mode print handle only real names and do short output
     # TODO: move to separate command?
+    # FIXME: it is possible use query
     if [ -n "$short" ] ; then
         [ -n "$pkg_files" ] || fatal "Run query without file names (needed path to files)"
         __do_short_query $pkg_files
diff --git a/bin/epm-reinstall b/bin/epm-reinstall
index 0b413983e6ac524fb15d59becb74e511fdc6a88c..eb778e31e03bfef6b384ba9d58553b95fd0c2650 100644
--- a/bin/epm-reinstall
+++ b/bin/epm-reinstall
@@ -66,7 +66,7 @@ epm_reinstall_files()
 
 epm_reinstall()
 {
-    [ -n "$pkg_filenames" ] || fatal "Run install without packages"
+    [ -n "$pkg_filenames" ] || fatal "Reinstall: missing package(s) name."
 
     epm_reinstall_names $pkg_names
     epm_reinstall_files $pkg_files
diff --git a/bin/epm-release-upgrade b/bin/epm-release-upgrade
index 477b36060e8213a0508ca39c74b4ec28f9c9af44..d21f1436c58e3a69670234cf0eeff544ed03530f 100644
--- a/bin/epm-release-upgrade
+++ b/bin/epm-release-upgrade
@@ -19,8 +19,8 @@
 
 epm_release_upgrade()
 {
-	echo "Start upgrade whole system to the next release"
-	echo "Check also http://wiki.etersoft.ru/Admin/UpdateLinux"
+	info "Starting upgrade whole system to the next release"
+	info "Check also http://wiki.etersoft.ru/Admin/UpdateLinux"
 
 	case $PMTYPE in
 	apt-rpm)
diff --git a/bin/epm-remove b/bin/epm-remove
index 6e4b85081f86d5aceda58599f15e2ab23ccf8048..1c237d4992066d16060dceeda9643be8fa2a91c1 100644
--- a/bin/epm-remove
+++ b/bin/epm-remove
@@ -197,7 +197,7 @@ epm_remove()
 	# get full package name(s) from the package file(s)
 	[ -n "$pkg_files" ] && pkg_names="$pkg_names $(epm query $pkg_files)"
 
-	[ -n "$pkg_names" ] || fatal "Run remove without args"
+	[ -n "$pkg_names" ] || fatal "Remove: missing package(s) name."
 	epm_remove_low $pkg_names && return
 
 	# get package name for hi level package management command (with version if supported and if possible)
diff --git a/bin/epm-removerepo b/bin/epm-removerepo
index 6512bc05a5aed84379264a7658faf890054d9d40..3d5b622e14e624a4d85d2c6602a8cb48beeef29a 100644
--- a/bin/epm-removerepo
+++ b/bin/epm-removerepo
@@ -25,10 +25,10 @@ case $PMTYPE in
 		sudocmd apt-repo rm $pkg_filenames
 		;;
 	apt-dpkg|aptitude-dpkg)
-		echo "You need remove repo from /etc/apt/sources.list"
+		info "You need remove repo from /etc/apt/sources.list"
 		;;
 	yum-rpm)
-		echo "You need remove repo from /etc/yum.repos.d/"
+		info "You need remove repo from /etc/yum.repos.d/"
 		;;
 	urpm-rpm)
 		sudocmd urpmi.removemedia $pkg_filenames
@@ -40,13 +40,13 @@ case $PMTYPE in
 		sudocmd layman -d$pkg_filenames
 		;;
 	pacman)
-		echo "You need remove repo from /etc/pacman.conf"
+		info "You need remove repo from /etc/pacman.conf"
 		;;
 	npackd)
 		sudocmd npackdcl remove-repo --url=$pkg_filenames
 		;;
 	slackpkg)
-		echo "You need remove repo from /etc/slackpkg/mirrors"
+		info "You need remove repo from /etc/slackpkg/mirrors"
 		;;
 	*)
 		fatal "Have no suitable command for $PMTYPE"
diff --git a/bin/epm-requires b/bin/epm-requires
index cbe51858c58d4078c6bd24fb27cec86307056ffb..94749534fff6848cd469f98c662271de4d3154f2 100644
--- a/bin/epm-requires
+++ b/bin/epm-requires
@@ -23,7 +23,9 @@ epm_requires_files()
 {
 	[ -n "$pkg_files" ] || return
 
-	case $(get_package_type $pkg_files) in
+	local PKGTYPE="$(case $(get_package_type $pkg_files))"
+
+	case "$PKGTYPE" in
 		rpm)
 			docmd rpm -q --requires -p $pkg_files
 			;;
@@ -31,7 +33,7 @@ epm_requires_files()
 			a= docmd dpkg -I $pkg_files | grep "^ *Depends:" | sed "s|^ *Depends:||g"
 			;;
 		*)
-			fatal "Have no suitable command for $PMTYPE"
+			fatal "Have no suitable command for $PKGTYPE"
 			;;
 	esac
 }
@@ -92,7 +94,7 @@ docmd $CMD $pkg_names
 
 epm_requires()
 {
-	[ -n "$pkg_filenames" ] || fatal "Run query without names"
+	[ -n "$pkg_filenames" ] || fatal "Requires: missing package(s) name"
 	epm_requires_files
 	epm_requires_names
 }
diff --git a/bin/epm-search b/bin/epm-search
index 30e811ec835a565869e0076bf9109a9e05b60b02..e117922d86e30229bcf45278d6ba5516e3099972 100644
--- a/bin/epm-search
+++ b/bin/epm-search
@@ -148,7 +148,7 @@ __epm_search_make_grep()
 
 epm_search()
 {
-	[ -n "$pkg_filenames" ] || fatal "Please, use search with some argument"
+	[ -n "$pkg_filenames" ] || fatal "Search: missing search argument(s)"
 
 	# it is useful for first time running
 	update_repo_if_needed
diff --git a/bin/epm-search_file b/bin/epm-search_file
index 1419af59194012e28cba855c5dccb14db6f69cb5..a2ab09ff9e77899d95afc29d4e3644450caa990d 100644
--- a/bin/epm-search_file
+++ b/bin/epm-search_file
@@ -21,10 +21,12 @@
 # https://bugzilla.altlinux.org/show_bug.cgi?id=14449
 local_content_search()
 {
+    # TODO: use global get_sysarch function
     local SYSARCH
     SYSARCH=$(uname -m)
     [ "$SYSARCH" = "x86_64" ] || SYSARCH=i586
 
+    # FIXME: use config or/and web url
     local REPODIR=/var/ftp/pub/ALTLinux/Sisyphus
     local CI=$REPODIR/$SYSARCH/base/contents_index
     local CINOA=$REPODIR/noarch/base/contents_index
@@ -43,7 +45,7 @@ local_content_search()
 epm_search_file()
 {
 	local CMD
-	[ -n "$pkg_filenames" ] || fatal "Run search without names"
+	[ -n "$pkg_filenames" ] || fatal "Search file: missing file name(s)"
 
 case $PMTYPE in
 	apt-rpm)
diff --git a/bin/epm-sh-functions b/bin/epm-sh-functions
index cd9d6a385b5345d3e17d9e32e27879c4abd76aad..48f351ad016667f03d4885fe03e82c97448a30b8 100644
--- a/bin/epm-sh-functions
+++ b/bin/epm-sh-functions
@@ -1,7 +1,7 @@
 #!/bin/sh
 #
-# Copyright (C) 2012  Etersoft
-# Copyright (C) 2012  Vitaly Lipatov <lav@etersoft.ru>
+# Copyright (C) 2012, 2014  Etersoft
+# Copyright (C) 2012, 2014  Vitaly Lipatov <lav@etersoft.ru>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU Affero General Public License as published by
@@ -96,18 +96,12 @@ echon()
 # Used DISTRNAME
 set_target_pkg_env()
 {
-	[ -n "$DISTRNAME" ] || fatal "Run set_target_pkg_env without DISTRNAME"
+	[ -n "$DISTRNAME" ] || fatal "Missing DISTRNAME in set_target_pkg_env."
 	PKGFORMAT=$($DISTRVENDOR -p "$DISTRNAME")
 	PKGVENDOR=$($DISTRVENDOR -s "$DISTRNAME")
 	RPMVENDOR=$($DISTRVENDOR -n "$DISTRNAME")
 }
 
-# for systems without realpath command
-realpath()
-{
-        readlink -f "$@"
-}
-
 # Print command line and run command line
 showcmd()
 {
@@ -237,6 +231,19 @@ warning()
 	fi
 }
 
+info()
+{
+	[ -n "$quiet" ] && return
+
+	# print message to stderr if stderr forwarded to (a file)
+	if isatty2 ; then
+		isatty || return 0
+		echo "$@"
+	else
+		echo "$@" >&2
+	fi
+}
+
 set_sudo()
 {
 	SUDO=""
@@ -261,33 +268,29 @@ set_eatmydata()
 	# use if possible
 	which eatmydata >/dev/null 2>/dev/null || return
 	SUDO="$SUDO eatmydata"
-	isatty && echo "Uwaga! eatmydata is installed, we will use it for disable all sync operations." >&2
+	info "Uwaga! eatmydata is installed, we will use it for disable all sync operations."
 	return 0
 }
 
-assure_exists()
+# 
+__get_package_for_command()
 {
-	PATH=$PATH:/sbin:/usr/sbin which $1 2>/dev/null >/dev/null && return
-	echo "Install appropriate package for $1 command..."
-	case $1 in
+	case "$1" in
 		equery|revdep-rebuild)
-			epm install gentoolkit
-			;;
-		apt-repo)
-			epm install apt-repo
-			;;
-		apt-file)
-			epm install apt-file
+			echo 'gentoolkit'
 			;;
 		update-kernel|remove-old-kernels)
-			epm install update-kernel
-			;;
-		*)
-			fatal "Internal error: Unknown binary $1 to check if exists"
+			echo 'update-kernel'
 			;;
 	esac
 }
 
+assure_exists()
+{
+	load_helper epm-assure
+	__epm_assure "$1" $(__get_package_for_command "$1")
+}
+
 # improve
 get_package_type()
 {
diff --git a/bin/epm-simulate b/bin/epm-simulate
index 05c83d8cb11e7000dca53b4ebe31f262a50faa5c..e54186dec7ab26fe80b39c9fc177c511dc2195f5 100644
--- a/bin/epm-simulate
+++ b/bin/epm-simulate
@@ -83,10 +83,9 @@ EOF
     		;;
     	zypper-rpm)
     		if ! __use_zypper_dry_run >/dev/null ; then
-    			echo "zypper is too old: does not support --dry-run"
-    			return
+    			fatal "zypper is too old: does not support --dry-run"
     		fi
-    		CMD="zypper --non-interactive install"
+    		CMD="zypper --non-interactive install --dry-run"
     		;;
     	emerge)
     		local res=0
@@ -117,7 +116,7 @@ EOF
     			pkg_filenames="$pkg-[0-9]" epm_search | grep -E "(installed|upgrade)" && continue
     			pkg_filenames="$pkg" epm_search | grep -E "(installed|upgrade)" && continue
     			res=1
-    			echo "Does not found in repository."
+    			info "Package '$pkg' does not found in repository."
     		done
     		return $res ;;
     	*)
@@ -130,16 +129,16 @@ EOF
 
 epm_simulate()
 {
-    [ -z "$pkg_filenames" ] && echo "Skip empty list" && return 22
+    [ -z "$pkg_filenames" ] && info "Simulate: Skip empty list" && return 22
 
     local filenames="$(echo $pkg_filenames | filter_out_installed_packages)"
 
-    [ -z "$filenames" ] && echo "All packages are already installed" && return 0
+    [ -z "$filenames" ] && info "Simulate: All packages are already installed" && return 0
 
     _epm_do_simulate $filenames
     local RES=$?
     if [ -z "$quiet" ] ; then
-        [ "$RES" = 0 ] && echo "Result: $filenames package(s) CAN BE installed" || echo "Result: There are PROBLEMS with install some package(s)"
+        [ "$RES" = 0 ] && info "Simulate result: $filenames package(s) CAN BE installed" || info "Simulate result: There are PROBLEMS with install some package(s)"
     fi
     return $RES
 }
diff --git a/bin/epm-update b/bin/epm-update
index ceb7e0b7e19bf3255a0c385e2cde72cbc976c65e..aa975cd68baae0c85680b9d3d6b45c36858298f0 100644
--- a/bin/epm-update
+++ b/bin/epm-update
@@ -21,7 +21,7 @@
 
 epm_update()
 {
-	echo "Run command for update remote package repository database"
+	info "Running command for update remote package repository database"
 
 case $PMTYPE in
 	apt-rpm)
diff --git a/bin/epm-upgrade b/bin/epm-upgrade
index f327f360dce4fe22b6fa72b3789d91ab8bcf23dd..9eb786989dc637a8053a1a1c503734dfa304cf00 100644
--- a/bin/epm-upgrade
+++ b/bin/epm-upgrade
@@ -26,7 +26,7 @@ epm_upgrade()
 	# it is useful for first time running
 	update_repo_if_needed
 
-	echo "Run command for upgrade packages"
+	info "Running command for upgrade packages"
 
 	case $PMTYPE in
 	apt-rpm|apt-dpkg)
diff --git a/bin/epm-whatdepends b/bin/epm-whatdepends
index dbdbc56b3bb53963c0ecf9aea956072dee3a69a1..e1a8673888ab8bb0ea2a488f02ceea332c84c604 100644
--- a/bin/epm-whatdepends
+++ b/bin/epm-whatdepends
@@ -20,7 +20,7 @@
 epm_whatdepends()
 {
 	local CMD
-	[ -n "$pkg_filenames" ] || fatal "Run query without names"
+	[ -n "$pkg_filenames" ] || fatal "Whatdepends: missing package(s) name"
 
 # by package name
 case $PMTYPE in
diff --git a/bin/epm-whatprovides b/bin/epm-whatprovides
index 5658a4950be27260617ded7d4896d920f16fbe86..4d9d100bc287139f832168b7e9b4c27601b5617e 100644
--- a/bin/epm-whatprovides
+++ b/bin/epm-whatprovides
@@ -20,7 +20,7 @@
 epm_whatprovides()
 {
 	local CMD
-	[ -n "$pkg_filenames" ] || fatal "Run query without names"
+	[ -n "$pkg_filenames" ] || fatal "Whatprovides: missing package(s) name"
 
 # by package name
 case $PMTYPE in
diff --git a/eepm.spec b/eepm.spec
index 08e7f891c00273965449f86f6ba837e4b604d354..708d43573d6458829a83071d50c0b436b55ceba8 100644
--- a/eepm.spec
+++ b/eepm.spec
@@ -1,7 +1,7 @@
 # This spec is backported to ALTLinux p7 automatically by rpmbph script. Do not edit it.
 #
 Name: eepm
-Version: 1.5.0
+Version: 1.5.1
 Release: alt0.M70P.1
 
 Summary: Etersoft EPM package manager
@@ -66,9 +66,15 @@ chmod a+x %buildroot%_datadir/%name/{serv-,epm-}*
 %_sysconfdir/bash_completion.d/cerv
 
 %changelog
-* Wed Feb 26 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.0-alt0.M70P.1
+* Wed Mar 05 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.1-alt0.M70P.1
 - backport to ALTLinux p7 (by rpmbph script)
 
+* Wed Mar 05 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.1-alt1
+- epm: check real file detection
+- checkpkg: use assure for erc
+- simulate: add missed --dry-run for zypper
+- epm-check_updated: fix if perms is unsufficient
+
 * Wed Feb 26 2014 Vitaly Lipatov <lav@altlinux.ru> 1.5.0-alt1
 - distr_info: add Android detection
 - add initial android support