remove redundant destructor
add slightly strict type checking
add slightly strict type checking