add stategy pattern