decompose this method