<< DestinationEndpoint.address().to_string()
            << ": cancel timer" << endl;
     IcmpPacketReceiveTimer.cancel();
-    IcmpPingerItem icmp_item = boost::static_pointer_cast<IcmpPinger>( get_myself().lock() );
 
     GlobalLogger.debug()
            << DestinationEndpoint.address().to_string()
            << ": unregister" << endl;
-    PacketDistributor->unregister_pinger( icmp_item );
+
+    IcmpPingerItem icmp_item = boost::static_pointer_cast<IcmpPinger>( get_myself().lock() );
+    if ( icmp_item )
+    {
+        PacketDistributor->unregister_pinger( icmp_item );
+    } else
+    {
+        GlobalLogger.warning()
+            << DestinationEndpoint.address().to_string()
+            << ": weak pointer to pinger broken is empty. Huh?" << endl;
+    }
 }