all feature impletemented, TODO:unittest, improve container