Implementation part 4

many TODO to see