added new implementation using NHibernate