Now I might have everything. Need testing.