diff --git a/core-client/src/main/java/org/glassfish/jersey/client/ClientBootstrapBag.java b/core-client/src/main/java/org/glassfish/jersey/client/ClientBootstrapBag.java
index 3c85855..ced406a 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/ClientBootstrapBag.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/ClientBootstrapBag.java
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2018 Payara Foundation and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -17,7 +18,7 @@
 
 
 import org.glassfish.jersey.internal.BootstrapBag;
-import org.glassfish.jersey.client.inject.ParameterInserterProvider;
+import org.glassfish.jersey.client.inject.ParameterUpdaterProvider;
 
 /**
  * {@inheritDoc}
@@ -28,14 +29,14 @@
  */
 public class ClientBootstrapBag extends BootstrapBag {
 
-    private ParameterInserterProvider parameterInserterProvider;
+    private ParameterUpdaterProvider parameterUpdaterProvider;
 
-    public ParameterInserterProvider getParameterInserterProvider() {
-        requireNonNull(parameterInserterProvider, ParameterInserterProvider.class);
-        return parameterInserterProvider;
+    public ParameterUpdaterProvider getParameterUpdaterProvider() {
+        requireNonNull(parameterUpdaterProvider, ParameterUpdaterProvider.class);
+        return parameterUpdaterProvider;
     }
 
-    public void setParameterInserterProvider(ParameterInserterProvider provider) {
-        this.parameterInserterProvider = provider;
+    public void setParameterUpdaterProvider(ParameterUpdaterProvider provider) {
+        this.parameterUpdaterProvider = provider;
     }
 }
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/ClientConfig.java b/core-client/src/main/java/org/glassfish/jersey/client/ClientConfig.java
index bf0e4ee..29089e1 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/ClientConfig.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/ClientConfig.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -35,7 +35,7 @@
 import org.glassfish.jersey.CommonProperties;
 import org.glassfish.jersey.ExtendedConfig;
 import org.glassfish.jersey.client.internal.LocalizationMessages;
-import org.glassfish.jersey.client.internal.inject.ParameterInserterConfigurator;
+import org.glassfish.jersey.client.internal.inject.ParameterUpdaterConfigurator;
 import org.glassfish.jersey.client.spi.Connector;
 import org.glassfish.jersey.client.spi.ConnectorProvider;
 import org.glassfish.jersey.internal.AutoDiscoverableConfigurator;
@@ -416,7 +416,7 @@
             bootstrapBag.setManagedObjectsFinalizer(new ManagedObjectsFinalizer(injectionManager));
             List<BootstrapConfigurator> bootstrapConfigurators = Arrays.asList(new RequestScope.RequestScopeConfigurator(),
                     new ParamConverterConfigurator(),
-                    new ParameterInserterConfigurator(),
+                    new ParameterUpdaterConfigurator(),
                     new RuntimeConfigConfigurator(runtimeCfgState),
                     new ContextResolverFactory.ContextResolversConfigurator(),
                     new MessageBodyFactory.MessageBodyWorkersConfigurator(),
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterInserter.java b/core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterUpdater.java
similarity index 83%
rename from core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterInserter.java
rename to core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterUpdater.java
index 8b94e61..3d2461a 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterInserter.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterUpdater.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -28,12 +28,12 @@
  * @author Marek Potociar (marek.potociar at oracle.com)
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  */
-public interface ParameterInserter<T, R> {
+public interface ParameterUpdater<T, R> {
 
     /**
-     * Name of the parameter to be inserted
+     * Name of the parameter to be udpated
      *
-     * @return name of the inserted parameter.
+     * @return name of the updated parameter.
      */
     String getName();
 
@@ -45,11 +45,11 @@
     String getDefaultValueString();
 
     /**
-     * Insert the value using ParamConverter#toString (and using
+     * Update the value using ParamConverter#toString (and using
      * the configured {@link #getDefaultValueString() default value})
      *
      * @param parameters custom Java type instance value.
      * @return converted value.
      */
-    R insert(T parameters);
+    R update(T parameters);
 }
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterInserterProvider.java b/core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterUpdaterProvider.java
similarity index 75%
rename from core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterInserterProvider.java
rename to core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterUpdaterProvider.java
index 4b29d6a..f52508e 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterInserterProvider.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/inject/ParameterUpdaterProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -20,22 +20,22 @@
 import org.glassfish.jersey.model.Parameter;
 
 /**
- * Provider of parameter inserter.
+ * Provider of parameter updater.
  *
  * @author Paul Sandoz
  * @author Marek Potociar (marek.potociar at oracle.com)
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  */
-public interface ParameterInserterProvider {
+public interface ParameterUpdaterProvider {
 
     /**
-     * Get the inserter configured to insert value of given {@link Parameter parameter}.
+     * Get the updater configured to update value of given {@link Parameter parameter}.
      * <p />
      * If the default value has been set on the parameter, it will be configured
-     * in the inserter.
+     * in the updater.
      *
      * @param parameter client model parameter.
-     * @return inserter for the method parameter.
+     * @return updater for the method parameter.
      */
-    ParameterInserter<?, ?> get(Parameter parameter);
+    ParameterUpdater<?, ?> get(Parameter parameter);
 }
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/AbstractParamValueInserter.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/AbstractParamValueUpdater.java
similarity index 82%
rename from core-client/src/main/java/org/glassfish/jersey/client/internal/inject/AbstractParamValueInserter.java
rename to core-client/src/main/java/org/glassfish/jersey/client/internal/inject/AbstractParamValueUpdater.java
index 28d508b..fb56ed7 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/AbstractParamValueInserter.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/AbstractParamValueUpdater.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -20,19 +20,19 @@
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.ext.ParamConverter;
 
-import org.glassfish.jersey.internal.inject.InserterException;
+import org.glassfish.jersey.internal.inject.UpdaterException;
 import org.glassfish.jersey.internal.util.collection.UnsafeValue;
 import org.glassfish.jersey.internal.util.collection.Values;
 
 /**
- * Abstract base class for implementing parameter value inserter
+ * Abstract base class for implementing parameter value updater
  * logic supplied using {@link ParamConverter parameter converters}.
  *
  * @author Paul Sandoz
  * @author Marek Potociar (marek.potociar at oracle.com)
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  */
-abstract class AbstractParamValueInserter<T> {
+abstract class AbstractParamValueUpdater<T> {
 
     private final ParamConverter<T> paramConverter;
     private final String parameterName;
@@ -40,13 +40,13 @@
     private final UnsafeValue<String, RuntimeException> convertedDefaultValue;
 
     /**
-     * Constructor that initializes parameter inserter.
+     * Constructor that initializes parameter updater.
      *
      * @param converter          parameter converter.
      * @param parameterName      name of the parameter.
      * @param defaultValueString default parameter value string.
      */
-    protected AbstractParamValueInserter(ParamConverter<T> converter, String parameterName, final String defaultValue) {
+    protected AbstractParamValueUpdater(ParamConverter<T> converter, String parameterName, final String defaultValue) {
         this.paramConverter = converter;
         this.parameterName = parameterName;
         this.defaultValue = defaultValue;
@@ -69,7 +69,7 @@
     }
 
     /**
-     * Get the name of the parameter this inserter belongs to.
+     * Get the name of the parameter this updater belongs to.
      *
      * @return parameter name.
      */
@@ -87,17 +87,17 @@
     }
 
     /**
-     * Insert parameter value to string using the configured {@link ParamConverter parameter converter}.
+     * Update parameter value to string using the configured {@link ParamConverter parameter converter}.
      *
      * A {@link WebApplicationException} / {@link IllegalArgumentException} thrown
      * from the converter is propagated unchanged. Any other exception throws by
-     * the converter is wrapped in a new {@link InserterException} before rethrowing.
+     * the converter is wrapped in a new {@link UpdaterException} before rethrowing.
      *
-     * @param value parameter value to be converted/inserted.
-     * @return inserted value of a given Java type.
+     * @param value parameter value to be converted/updated.
+     * @return updated value of a given Java type.
      * @throws WebApplicationException in case the underlying parameter converter throws
      * a {@code WebApplicationException}. The exception is rethrown without a change.
-     * @throws InserterException wrapping any other exception thrown by the parameter converter.
+     * @throws UpdaterException wrapping any other exception thrown by the parameter converter.
      */
     protected final String toString(T value) {
         String result = convert(value);
@@ -113,7 +113,7 @@
         } catch (WebApplicationException | IllegalArgumentException ex) {
             throw ex;
         } catch (Exception ex) {
-            throw new InserterException(ex);
+            throw new UpdaterException(ex);
         }
     }
 
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/CollectionInserter.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/CollectionUpdater.java
similarity index 77%
rename from core-client/src/main/java/org/glassfish/jersey/client/internal/inject/CollectionInserter.java
rename to core-client/src/main/java/org/glassfish/jersey/client/internal/inject/CollectionUpdater.java
index 0902d76..ef1ab8e 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/CollectionInserter.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/CollectionUpdater.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -29,35 +29,35 @@
 import javax.ws.rs.ProcessingException;
 import javax.ws.rs.ext.ParamConverter;
 import org.glassfish.jersey.client.internal.LocalizationMessages;
-import org.glassfish.jersey.client.inject.ParameterInserter;
+import org.glassfish.jersey.client.inject.ParameterUpdater;
 
 /**
- * Insert parameter value as a typed collection.
+ * Update parameter value as a typed collection.
  *
  * @param <T> parameter value type.
  * @author Paul Sandoz
  * @author Marek Potociar (marek.potociar at oracle.com)
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  */
-abstract class CollectionInserter<T> extends AbstractParamValueInserter<T>
-        implements ParameterInserter<Collection<T>, Collection<String>> {
+abstract class CollectionUpdater<T> extends AbstractParamValueUpdater<T>
+        implements ParameterUpdater<Collection<T>, Collection<String>> {
 
     /**
-     * Create new collection parameter inserter.
+     * Create new collection parameter updater.
      *
      * @param converter          parameter converter to be used to convert parameter from a custom Java type.
      * @param parameterName      parameter name.
      * @param defaultValue default parameter String value.
      */
-    protected CollectionInserter(final ParamConverter<T> converter,
-                                  final String parameterName,
-                                  final String defaultValue) {
+    protected CollectionUpdater(final ParamConverter<T> converter,
+                                final String parameterName,
+                                final String defaultValue) {
         super(converter, parameterName, defaultValue);
     }
 
     @Override
     @SuppressWarnings("unchecked")
-    public Collection<String> insert(final Collection<T> values) {
+    public Collection<String> update(final Collection<T> values) {
         Collection<String> results = Collections.EMPTY_LIST;
         if (values != null) {
             results = values
@@ -71,7 +71,7 @@
     }
 
     /**
-     * Get a new collection instance that will be used to store the inserted parameters.
+     * Get a new collection instance that will be used to store the updated parameters.
      * <p/>
      * The method is overridden by concrete implementations to return an instance
      * of a proper collection sub-type.
@@ -80,7 +80,7 @@
      */
     protected abstract Collection<String> newCollection();
 
-    private static final class ListValueOf<T> extends CollectionInserter<T> {
+    private static final class ListValueOf<T> extends CollectionUpdater<T> {
 
         ListValueOf(final ParamConverter<T> converter, final String parameter, final String defaultValue) {
             super(converter, parameter, defaultValue);
@@ -92,7 +92,7 @@
         }
     }
 
-    private static final class SetValueOf<T> extends CollectionInserter<T> {
+    private static final class SetValueOf<T> extends CollectionUpdater<T> {
 
         SetValueOf(final ParamConverter<T> converter, final String parameter, final String defaultValue) {
             super(converter, parameter, defaultValue);
@@ -104,7 +104,7 @@
         }
     }
 
-    private static final class SortedSetValueOf<T> extends CollectionInserter<T> {
+    private static final class SortedSetValueOf<T> extends CollectionUpdater<T> {
 
         SortedSetValueOf(final ParamConverter<T> converter, final String parameter, final String defaultValue) {
             super(converter, parameter, defaultValue);
@@ -117,7 +117,7 @@
     }
 
     /**
-     * Get a new {@code CollectionInserter} instance.
+     * Get a new {@code CollectionUpdater} instance.
      *
      * @param collectionType     raw collection type.
      * @param converter          parameter converter to be used to convert parameter Java type values into
@@ -125,12 +125,12 @@
      * @param parameterName      parameter name.
      * @param defaultValue default parameter string value.
      * @param <T>                converted parameter Java type.
-     * @return new collection parameter inserter instance.
+     * @return new collection parameter updated instance.
      */
-    public static <T> CollectionInserter getInstance(final Class<?> collectionType,
-                                                      final ParamConverter<T> converter,
-                                                      final String parameterName,
-                                                      final String defaultValue) {
+    public static <T> CollectionUpdater getInstance(final Class<?> collectionType,
+                                                    final ParamConverter<T> converter,
+                                                    final String parameterName,
+                                                    final String defaultValue) {
         if (List.class == collectionType) {
             return new ListValueOf<>(converter, parameterName, defaultValue);
         } else if (Set.class == collectionType) {
@@ -138,7 +138,7 @@
         } else if (SortedSet.class == collectionType) {
             return new SortedSetValueOf<>(converter, parameterName, defaultValue);
         } else {
-            throw new ProcessingException(LocalizationMessages.COLLECTION_INSERTER_TYPE_UNSUPPORTED());
+            throw new ProcessingException(LocalizationMessages.COLLECTION_UPDATER_TYPE_UNSUPPORTED());
         }
     }
 }
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterInserterConfigurator.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterUpdaterConfigurator.java
similarity index 75%
rename from core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterInserterConfigurator.java
rename to core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterUpdaterConfigurator.java
index a75a272..ed24fa7 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterInserterConfigurator.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterUpdaterConfigurator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -29,30 +29,30 @@
 import org.glassfish.jersey.internal.util.collection.LazyValue;
 import org.glassfish.jersey.internal.util.collection.Value;
 import org.glassfish.jersey.internal.util.collection.Values;
-import org.glassfish.jersey.client.inject.ParameterInserterProvider;
+import org.glassfish.jersey.client.inject.ParameterUpdaterProvider;
 
 /**
- * Configurator which initializes and register {@link ParameterInserterProvider} instance into
+ * Configurator which initializes and register {@link ParameterUpdaterProvider} instance into
  * {@link InjectionManager}.
  *
  * @author Petr Bouda
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  */
-public class ParameterInserterConfigurator implements BootstrapConfigurator {
+public class ParameterUpdaterConfigurator implements BootstrapConfigurator {
 
     @Override
     public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) {
         ClientBootstrapBag clientBag = (ClientBootstrapBag) bootstrapBag;
 
-        // Param Converters must be initialized Lazy and created at the time of the call on inserter
+        // Param Converters must be initialized Lazy and created at the time of the call on updater
         LazyValue<ParamConverterFactory> lazyParamConverterFactory =
                 Values.lazy((Value<ParamConverterFactory>) () -> new ParamConverterFactory(
                         Providers.getProviders(injectionManager, ParamConverterProvider.class),
                         Providers.getCustomProviders(injectionManager, ParamConverterProvider.class)));
 
-        ParameterInserterFactory parameterInserter = new ParameterInserterFactory(lazyParamConverterFactory);
-        clientBag.setParameterInserterProvider(parameterInserter);
-        injectionManager.register(Bindings.service(parameterInserter)
-                        .to(ParameterInserterProvider.class));
+        ParameterUpdaterFactory parameterUpdaterFactory = new ParameterUpdaterFactory(lazyParamConverterFactory);
+        clientBag.setParameterUpdaterProvider(parameterUpdaterFactory);
+        injectionManager.register(Bindings.service(parameterUpdaterFactory)
+                        .to(ParameterUpdaterProvider.class));
     }
 }
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterInserterFactory.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterUpdaterFactory.java
similarity index 79%
rename from core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterInserterFactory.java
rename to core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterUpdaterFactory.java
index 9fa283a..262bf3d 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterInserterFactory.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/ParameterUpdaterFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -25,7 +25,7 @@
 import javax.ws.rs.ProcessingException;
 import javax.ws.rs.ext.ParamConverter;
 import javax.inject.Singleton;
-import org.glassfish.jersey.internal.inject.InserterException;
+import org.glassfish.jersey.internal.inject.UpdaterException;
 import org.glassfish.jersey.internal.inject.ParamConverterFactory;
 import org.glassfish.jersey.internal.util.ReflectionHelper;
 import org.glassfish.jersey.internal.util.collection.ClassTypePair;
@@ -33,36 +33,36 @@
 import org.glassfish.jersey.client.internal.LocalizationMessages;
 import org.glassfish.jersey.model.Parameter;
 import org.glassfish.jersey.internal.inject.PrimitiveMapper;
-import org.glassfish.jersey.client.inject.ParameterInserter;
-import org.glassfish.jersey.client.inject.ParameterInserterProvider;
+import org.glassfish.jersey.client.inject.ParameterUpdater;
+import org.glassfish.jersey.client.inject.ParameterUpdaterProvider;
 
 /**
- * Implementation of {@link ParameterInserterProvider}. For each
+ * Implementation of {@link ParameterUpdaterProvider}. For each
  * parameter, the implementation obtains a
  * {@link ParamConverter param converter} instance via
  * {@link ParamConverterFactory} and creates the proper
- * {@link ParameterInserter parameter inserter}.
+ * {@link ParameterUpdater parameter updater}.
  *
  * @author Paul Sandoz
  * @author Marek Potociar (marek.potociar at oracle.com)
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  */
 @Singleton
-final class ParameterInserterFactory implements ParameterInserterProvider {
+final class ParameterUpdaterFactory implements ParameterUpdaterProvider {
 
     private final LazyValue<ParamConverterFactory> paramConverterFactory;
 
     /**
-     * Create new parameter inserter factory.
+     * Create new parameter updater factory.
      *
      * @param paramConverterFactory string readers factory.
      */
-    public ParameterInserterFactory(LazyValue<ParamConverterFactory> paramConverterFactory) {
+    public ParameterUpdaterFactory(LazyValue<ParamConverterFactory> paramConverterFactory) {
         this.paramConverterFactory = paramConverterFactory;
     }
 
     @Override
-    public ParameterInserter<?, ?> get(final Parameter p) {
+    public ParameterUpdater<?, ?> get(final Parameter p) {
         return process(
                 paramConverterFactory.get(),
                 p.getDefaultValue(),
@@ -73,7 +73,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    private ParameterInserter<?, ?> process(
+    private ParameterUpdater<?, ?> process(
             final ParamConverterFactory paramConverterFactory,
             final String defaultValue,
             final Class<?> rawType,
@@ -86,8 +86,8 @@
         ParamConverter<?> converter = paramConverterFactory.getConverter(rawType, type, annotations);
         if (converter != null) {
             try {
-                return new SingleValueInserter(converter, parameterName, defaultValue);
-            } catch (final InserterException e) {
+                return new SingleValueUpdater(converter, parameterName, defaultValue);
+            } catch (final UpdaterException e) {
                 throw e;
             } catch (final Exception e) {
                 throw new ProcessingException(LocalizationMessages.ERROR_PARAMETER_TYPE_PROCESSING(rawType), e);
@@ -109,8 +109,8 @@
             }
             if (converter != null) {
                 try {
-                    return CollectionInserter.getInstance(rawType, converter, parameterName, defaultValue);
-                } catch (final InserterException e) {
+                    return CollectionUpdater.getInstance(rawType, converter, parameterName, defaultValue);
+                } catch (final UpdaterException e) {
                     throw e;
                 } catch (final Exception e) {
                     throw new ProcessingException(LocalizationMessages.ERROR_PARAMETER_TYPE_PROCESSING(rawType), e);
@@ -120,9 +120,9 @@
 
         // Check primitive types.
         if (rawType == String.class) {
-            return new SingleStringValueInserter(parameterName, defaultValue);
+            return new SingleStringValueUpdater(parameterName, defaultValue);
         } else if (rawType == Character.class) {
-            return new PrimitiveCharacterInserter(parameterName,
+            return new PrimitiveCharacterUpdater(parameterName,
                     defaultValue,
                     PrimitiveMapper.primitiveToDefaultValueMap.get(rawType));
         } else if (rawType.isPrimitive()) {
@@ -134,12 +134,12 @@
             }
 
             if (wrappedRaw == Character.class) {
-                return new PrimitiveCharacterInserter(parameterName,
+                return new PrimitiveCharacterUpdater(parameterName,
                         defaultValue,
                         PrimitiveMapper.primitiveToDefaultValueMap.get(wrappedRaw));
             }
 
-            return new PrimitiveValueOfInserter(
+            return new PrimitiveValueOfUpdater(
                     parameterName,
                     defaultValue,
                     PrimitiveMapper.primitiveToDefaultValueMap.get(wrappedRaw));
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveCharacterInserter.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveCharacterUpdater.java
similarity index 77%
rename from core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveCharacterInserter.java
rename to core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveCharacterUpdater.java
index 5d80ec7..c7f67d2 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveCharacterInserter.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveCharacterUpdater.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -17,22 +17,22 @@
 
 package org.glassfish.jersey.client.internal.inject;
 
-import org.glassfish.jersey.client.inject.ParameterInserter;
+import org.glassfish.jersey.client.inject.ParameterUpdater;
 
 /**
- * Value inserter for {@link java.lang.Character} and {@code char} parameters.
+ * Value updater for {@link java.lang.Character} and {@code char} parameters.
  *
  * @author Pavel Bucek (pavel.bucek at oracle.com)
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  *
  */
-class PrimitiveCharacterInserter implements ParameterInserter<Character, String> {
+class PrimitiveCharacterUpdater implements ParameterUpdater<Character, String> {
 
     private final String parameter;
     private final String defaultValue;
     private final Object defaultPrimitiveTypeValue;
 
-    public PrimitiveCharacterInserter(String parameter, String defaultValue, Object defaultPrimitiveTypeValue) {
+    public PrimitiveCharacterUpdater(String parameter, String defaultValue, Object defaultPrimitiveTypeValue) {
         this.parameter = parameter;
         this.defaultValue = defaultValue;
         this.defaultPrimitiveTypeValue = defaultPrimitiveTypeValue;
@@ -49,7 +49,7 @@
     }
 
     @Override
-    public String insert(Character value) {
+    public String update(Character value) {
         if (value != null) {
             return value.toString();
         } else if (defaultValue != null) {
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveValueOfInserter.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveValueOfUpdater.java
similarity index 77%
rename from core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveValueOfInserter.java
rename to core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveValueOfUpdater.java
index 9c8b33c..7cef2d0 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveValueOfInserter.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/PrimitiveValueOfUpdater.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018, 2019 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -17,10 +17,10 @@
 
 package org.glassfish.jersey.client.internal.inject;
 
-import org.glassfish.jersey.client.inject.ParameterInserter;
+import org.glassfish.jersey.client.inject.ParameterUpdater;
 
 /**
- * Insert String value using {@code toString()} methods
+ * Update String value using {@code toString()} methods
  * on the primitive Java type wrapper classes.
  *
  * @author Paul Sandoz
@@ -29,23 +29,23 @@
  * @author Patrik Dudits
  *
  */
-final class PrimitiveValueOfInserter implements ParameterInserter<Object, String> {
+final class PrimitiveValueOfUpdater implements ParameterUpdater<Object, String> {
 
     private final String parameter;
     private final String defaultValue;
     private final Object defaultPrimitiveTypeValue;
 
     /**
-     * Create new primitive parameter value inserter.
+     * Create new primitive parameter value updater.
      *
      * @param valueOf {@code valueOf()} method handler.
      * @param parameter string parameter value.
      * @param defaultValue default string value.
      * @param defaultPrimitiveTypeValue default primitive type value.
      */
-    public PrimitiveValueOfInserter(String parameter,
-            String defaultValue,
-            Object defaultPrimitiveTypeValue) {
+    public PrimitiveValueOfUpdater(String parameter,
+                                   String defaultValue,
+                                   Object defaultPrimitiveTypeValue) {
         this.parameter = parameter;
         this.defaultValue = defaultValue;
         this.defaultPrimitiveTypeValue = defaultPrimitiveTypeValue;
@@ -62,7 +62,7 @@
     }
 
     @Override
-    public String insert(Object value) {
+    public String update(Object value) {
         if (value != null) {
             return value.toString();
         } else if (defaultValue != null) {
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleStringValueInserter.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleStringValueUpdater.java
similarity index 77%
rename from core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleStringValueInserter.java
rename to core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleStringValueUpdater.java
index 03973e4..97e98db 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleStringValueInserter.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleStringValueUpdater.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -17,30 +17,30 @@
 
 package org.glassfish.jersey.client.internal.inject;
 
-import org.glassfish.jersey.client.inject.ParameterInserter;
+import org.glassfish.jersey.client.inject.ParameterUpdater;
 
 /**
- * Insert value of the parameter by returning the first string parameter value
+ * Update value of the parameter by returning the first string parameter value
  * found in the list of string parameter values.
  * <p />
- * This class can be seen as a special, optimized, case of {@link SingleValueInserter}.
+ * This class can be seen as a special, optimized, case of {@link SingleValueUpdater}.
  *
  * @author Paul Sandoz
  * @author Marek Potociar (marek.potociar at oracle.com)
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  */
-final class SingleStringValueInserter implements ParameterInserter<String, String> {
+final class SingleStringValueUpdater implements ParameterUpdater<String, String> {
 
     private final String paramName;
     private final String defaultValue;
 
     /**
-     * Create new single string value inserter.
+     * Create new single string value updater.
      *
      * @param parameterName string parameter name.
      * @param defaultValue  default value.
      */
-    public SingleStringValueInserter(String parameterName, String defaultValue) {
+    public SingleStringValueUpdater(String parameterName, String defaultValue) {
         this.paramName = parameterName;
         this.defaultValue = defaultValue;
     }
@@ -63,10 +63,10 @@
      * list will be ignored.
      *
      * @param parameters map of parameters.
-     * @return inserted single string parameter value.
+     * @return updated single string parameter value.
      */
     @Override
-    public String insert(String value) {
+    public String update(String value) {
         return (value != null) ? value : defaultValue;
     }
 }
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleValueInserter.java b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleValueUpdater.java
similarity index 74%
rename from core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleValueInserter.java
rename to core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleValueUpdater.java
index 2ec9640..c2a7cd9 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleValueInserter.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/internal/inject/SingleValueUpdater.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -20,12 +20,12 @@
 import javax.ws.rs.ProcessingException;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.ext.ParamConverter;
-import org.glassfish.jersey.internal.inject.InserterException;
-import org.glassfish.jersey.client.inject.ParameterInserter;
+import org.glassfish.jersey.internal.inject.UpdaterException;
+import org.glassfish.jersey.client.inject.ParameterUpdater;
 
 
 /**
- * Insert value of the parameter using a single parameter value and the underlying
+ * Update value of the parameter using a single parameter value and the underlying
  * {@link ParamConverter param converter}.
  *
  * @param <T> custom Java type.
@@ -33,31 +33,31 @@
  * @author Marek Potociar (marek.potociar at oracle.com)
  * @author Gaurav Gupta (gaurav.gupta@payara.fish)
  */
-final class SingleValueInserter<T> extends AbstractParamValueInserter<T> implements ParameterInserter<T, String> {
+final class SingleValueUpdater<T> extends AbstractParamValueUpdater<T> implements ParameterUpdater<T, String> {
 
     /**
-     * Create new single value inserter.
+     * Create new single value updater.
      *
      * @param converter          string value reader.
      * @param parameterName      string parameter name.
      * @param defaultValue       default value.
      */
-    public SingleValueInserter(final ParamConverter<T> converter, final String parameterName, final String defaultValue) {
+    public SingleValueUpdater(final ParamConverter<T> converter, final String parameterName, final String defaultValue) {
         super(converter, parameterName, defaultValue);
     }
 
     /**
      * {@inheritDoc}
      * <p/>
-     * This implementation inserts the value of the parameter applying the underlying
+     * This implementation updates the value of the parameter applying the underlying
      * {@link ParamConverter param converter} to the first value found in the list of potential multiple
      * parameter values. Any other values in the multi-value list will be ignored.
      *
      * @param parameters map of parameters.
-     * @return inserted single parameter value.
+     * @return updated single parameter value.
      */
     @Override
-    public String insert(final T value){
+    public String update(final T value){
         try {
             if (value == null && isDefaultValueRegistered()) {
                 return getDefaultValueString();
@@ -69,7 +69,7 @@
         } catch (final IllegalArgumentException ex) {
             return defaultValue();
         } catch (final Exception ex) {
-            throw new InserterException(ex);
+            throw new UpdaterException(ex);
         }
     }
 }
diff --git a/core-client/src/main/resources/org/glassfish/jersey/client/internal/localization.properties b/core-client/src/main/resources/org/glassfish/jersey/client/internal/localization.properties
index 43db86d..1a70cb3 100644
--- a/core-client/src/main/resources/org/glassfish/jersey/client/internal/localization.properties
+++ b/core-client/src/main/resources/org/glassfish/jersey/client/internal/localization.properties
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
 #
 # This program and the accompanying materials are made available under the
 # terms of the Eclipse Public License v. 2.0, which is available at
@@ -33,7 +33,7 @@
 client.uri.template.null=URI template of the newly created target must not be null.
 client.uri.null=URI of the newly created target must not be null.
 client.uri.builder.null=URI builder of the newly created target must not be null.
-collection.inserter.type.unsupported=Unsupported collection type.
+collection.updater.type.unsupported=Unsupported collection type.
 digest.filter.qop.unsupported=The 'qop' (quality of protection) = {0} extension requested by the server is not supported by Jersey HttpDigestAuthFilter. Cannot authenticate against the server using Http Digest Authentication.
 error.closing.output.stream=Error when closing the output stream.
 error.committing.output.stream=Error while committing the request output stream.
diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/inject/InserterException.java b/core-common/src/main/java/org/glassfish/jersey/internal/inject/UpdaterException.java
similarity index 84%
rename from core-common/src/main/java/org/glassfish/jersey/internal/inject/InserterException.java
rename to core-common/src/main/java/org/glassfish/jersey/internal/inject/UpdaterException.java
index da80cca..f07691e 100644
--- a/core-common/src/main/java/org/glassfish/jersey/internal/inject/InserterException.java
+++ b/core-common/src/main/java/org/glassfish/jersey/internal/inject/UpdaterException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2017 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018 Payara Foundation and/or its affiliates.
  *
  * This program and the accompanying materials are made available under the
@@ -28,7 +28,7 @@
  * @author Gaurav Gupta
  *
  */
-public class InserterException extends ProcessingException {
+public class UpdaterException extends ProcessingException {
     private static final long serialVersionUID = -4918023257104413981L;
 
     /**
@@ -36,7 +36,7 @@
      *
      * @param message exception message.
      */
-    public InserterException(String message) {
+    public UpdaterException(String message) {
         super(message);
     }
 
@@ -46,7 +46,7 @@
      * @param message exception message.
      * @param cause   exception cause.
      */
-    public InserterException(String message, Throwable cause) {
+    public UpdaterException(String message, Throwable cause) {
         super(message, cause);
     }
 
@@ -55,7 +55,7 @@
      *
      * @param cause exception cause.
      */
-    public InserterException(Throwable cause) {
+    public UpdaterException(Throwable cause) {
         super(cause);
     }
 }
diff --git a/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/InterfaceModel.java b/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/InterfaceModel.java
index 259110c..8422a20 100644
--- a/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/InterfaceModel.java
+++ b/ext/microprofile/mp-rest-client/src/main/java/org/glassfish/jersey/microprofile/restclient/InterfaceModel.java
@@ -28,7 +28,6 @@
 
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.CDI;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
@@ -41,8 +40,8 @@
 import org.eclipse.microprofile.rest.client.ext.AsyncInvocationInterceptor;
 import org.eclipse.microprofile.rest.client.ext.ClientHeadersFactory;
 import org.eclipse.microprofile.rest.client.ext.ResponseExceptionMapper;
-import org.glassfish.jersey.client.inject.ParameterInserter;
-import org.glassfish.jersey.client.inject.ParameterInserterProvider;
+import org.glassfish.jersey.client.inject.ParameterUpdater;
+import org.glassfish.jersey.client.inject.ParameterUpdaterProvider;
 import org.glassfish.jersey.internal.inject.InjectionManager;
 import org.glassfish.jersey.internal.inject.Providers;
 import org.glassfish.jersey.model.Parameter;
@@ -223,13 +222,13 @@
      * @return converted value of argument
      */
     Object resolveParamValue(Object arg, Parameter parameter) {
-        final Iterable<ParameterInserterProvider> parameterInserterProviders
-                = Providers.getAllProviders(injectionManager, ParameterInserterProvider.class);
-        for (final ParameterInserterProvider parameterInserterProvider : parameterInserterProviders) {
-            if (parameterInserterProvider != null) {
-                ParameterInserter<Object, Object> inserter =
-                        (ParameterInserter<Object, Object>) parameterInserterProvider.get(parameter);
-                return inserter.insert(arg);
+        final Iterable<ParameterUpdaterProvider> parameterUpdaterProviders
+                = Providers.getAllProviders(injectionManager, ParameterUpdaterProvider.class);
+        for (final ParameterUpdaterProvider parameterUpdaterProvider : parameterUpdaterProviders) {
+            if (parameterUpdaterProvider != null) {
+                ParameterUpdater<Object, Object> updater =
+                        (ParameterUpdater<Object, Object>) parameterUpdaterProvider.get(parameter);
+                return updater.update(arg);
             }
         }
         return arg;
