introduced vistor pattern with pipelines.
rename package name