@Override
 public <D extends Document<?>> D remove(
     D document, PersistTo persistTo, ReplicateTo replicateTo, long timeout, TimeUnit timeUnit) {
   return Blocking.blockForSingle(
       asyncBucket.remove(document, persistTo, replicateTo).singleOrDefault(null),
       timeout,
       timeUnit);
 }
 @Override
 public <D extends Document<?>> D remove(
     String id,
     PersistTo persistTo,
     ReplicateTo replicateTo,
     Class<D> target,
     long timeout,
     TimeUnit timeUnit) {
   return Blocking.blockForSingle(
       asyncBucket.remove(id, persistTo, replicateTo, target).singleOrDefault(null),
       timeout,
       timeUnit);
 }
 @Override
 public JsonDocument remove(String id, ReplicateTo replicateTo, long timeout, TimeUnit timeUnit) {
   return Blocking.blockForSingle(
       asyncBucket.remove(id, replicateTo).singleOrDefault(null), timeout, timeUnit);
 }
 @Override
 public <D extends Document<?>> D remove(D document, long timeout, TimeUnit timeUnit) {
   return Blocking.blockForSingle(
       asyncBucket.remove(document).singleOrDefault(null), timeout, timeUnit);
 }