danger: const_cast
more refactor