completely re do most methods and method_missings