semantic checking (kinda) done