renamed semantic to syntactic
checked all NPE
changed all model object to immutable