complete adapter pattern