Implementation seems to work. Need to test.