changed implementation