This class could be little more abstract.