more work on decompose