Since you use the generic list, why do you still need a "next" pointer? Shouldn't HostProperties and Host be the same now, and then you operate over a list of hosts?