further implementation (not finished)