Working on modes, probably breaks horribly as is