moved all prototype extensions into objects to add them later to save bytes