+ fixed put_new(), adopt to different interface