nHibernate has always used lazy loading for collections (one-to-many and many-to-many relationships) but you can now use lazy loading for one-to-one and many-to-one relationships (from v0.6.0.0).
For example, let's say you map a Department/Proffesor relationship where the Department class will have a collection of Proffesor objects and the Proffesor class will have a Department property which returns a Department instance. In previous versions of nHibernate, when you load a Proffesor object, it's Department object will be loaded automatically, whether you're gonna use it or not. But now with proxies, it will not load the department until the first time you access it.
nHibernate actually generates IL dynamically to achieve this, which I think is pretty cool.
The only catch is that you must either use an interface for your Department class or all the methods and properties on the class must be declared “virtual”, which shouldn't be a big problem.
Bottom line - How cool is nHibernate!!!!!! If you're coding an OO system with a relational DB, do yourself a huge favour and check it out.