Merged everything from basic functional
1