HMC implementation. As of yet untested.