some new and complete redesign function