complete version without database