advanced with specs and type manipulation