must derive Default