added decomposition functions