what I have so far (still broken)