I don't like the class name very much but I haven't come up with anything better yet :)