* The module has a lot of overlap with combination/ some of the functions could be abstracted out.
