rework, add original functional, without validation, unstable