add issue #17
add cover for issue #18
add cover for issue #19
add cover for issue #20
add cover #21
add cover 22
add issue #23
add issue #24
add issue #25
add cover for issue #26
add cover for issue #27
add cover for issue #28