Complete with demo and examples