better decomposition