First run at full implementation