@SuppressWarnings("unchecked")
  @Override
  public ChronoDateTimeImpl<C> with(WithAdjuster adjuster) {

    if (adjuster instanceof ChronoLocalDate) {
      // The Chrono is checked in with(date,time)
      return with((ChronoLocalDate<C>) adjuster, this.time);
    } else if (adjuster instanceof LocalTime) {
      return with(this.date, (LocalTime) adjuster);
    } else if (adjuster instanceof ChronoDateTimeImpl) {
      return this.date.getChrono().ensureChronoLocalDateTime((ChronoDateTimeImpl<?>) adjuster);
    }
    return this.date.getChrono().ensureChronoLocalDateTime(adjuster.doWithAdjustment(this));
  }