This is the result for now; I'll finish it later