many changes here