added more implementation