should be function for flexibility
new version