Add some more options, decompose functions further