re-design attribute factory