Some work for dividing base and specific parts, some redesign with enums, output implementation beginned