AppJS overhaul