maybe a brief explanation what `smw` stands for
also we may want to privatize these functions with leading underscore.
They don't have a good name as public function