moved struct element to own class
struct element is fully separated
moved map out to own class
map is fully separated