adding big chunk of functionality