reorganise PowerOp to be dynamic