Started on required, there are some minor issues left though...