improve impl