added some more implementation