added and changed by Busz