adding new features
refacoring