Implementation for #11,#12,#13,#15