change some inheritances to delegate