Ugly and incomplete, but with basic functionality.