put everything into packages and place data structures into separate packages with all converted to use generics