Modify internal architecture to cleanly separate features

Signed-off-by: Laurent Fazio <laurent.fazio@la-fenouillette.fr>