Refactoring part2: missing features & random