adding functional