basic functionality with demo