Hi David Thank you for your comprehensive report. I've reviewed it and been able to reproduce several of the issues. Due to the short time before the code freeze for the next release we don't plan to work on this for the upcoming code release (4.3.4). We do hope to address it in the release after that (4.3.5) From your mail: Starting from an empty dhcpd.leases, and letting the client run for a few minutes while watching `tail -f dhcpd.leases /var/log/syslog/local7`, I can easily observe all of the following: * inappropriate DHCPOFFER (without ping-checking the address again) when reclaiming an abandoned IP This is due to a check to see if the lease was recently used. I will need to dig into the history to see if there is an explanation as to why - my guess would be an attempt to limit the number of pings sent out due to a faulty client. While this will happen a lot in your and my tests it isn't as big an issue in a real network. Most likely the server won't be trying to constantly reuse an abandoned address and if the lease isn't used for about a minute the ping checks should be happening. * eventually (after enough tries) a DHCPACK on one of these IPs, leading to an IP conflict with the squatter I didn't see this, but didn't try to cause it, I have no reason to doubt it would be an outcome but see above - in a more normal network it is less likely. * abandoned leases mysteriously being set back to free in dhcpd.leases after roughly two minutes From my testing the abandoned leases will be set back to free more quickly than is good. The two minutes you are seeing is an artifact of the default time the server uses for a temporary timer when handing out an offer. ** Having slept on it, this third problem (mysterious freeing of abandoned leases) is actually the one that makes me most nervous, because it can cause trouble even when the pool is not exhausted. 2. Abandoned leases are also mysteriously cleared/discarded upon server startup. This is the same issue as the leases being freed. The server startup triggers the same cleanup as occurs based on the timer.