a struct at some stage will demand its own freeing up function at some stage .. here it is