First working version with demo.