add adapter pattern