fully implemented saving