more explanation in sample program