Added all classes and appropriate implentations and extensions