template implement,

todo:
inner template