Big update... but needs optimization bad