add functional approach