Refining the code. Todo: testing