shorter version, with less bugs
update