much cleaner, will make update accordingly