simplified and better, needs nanocontrol