add functional inheritance