diff --git a/examples/objective-c/helloworld/main.m b/examples/objective-c/helloworld/main.m
index b67380812b4dc6da2ef63ad4839ba1188731ddfe..755dce33df9dd09dc3dbbb417239c4c7467999fd 100644
--- a/examples/objective-c/helloworld/main.m
+++ b/examples/objective-c/helloworld/main.m
@@ -43,7 +43,7 @@ static NSString * const kHostAddress = @"localhost:50051";
 int main(int argc, char * argv[]) {
   @autoreleasepool {
     [GRPCCall useInsecureConnectionsForHost:kHostAddress];
-    [GRPCCall setUserAgentPrefix:@"HelloWorld/1.0"];
+    [GRPCCall setUserAgentPrefix:@"HelloWorld/1.0" forHost:kHostAddress];
 
     HLWGreeter *client = [[HLWGreeter alloc] initWithHost:kHostAddress];
 
diff --git a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h
index ec1557df7fadf2842b587fe9f6cb00a03b701555..bd6b064f166b07d7399312602deff3c513952c9d 100644
--- a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h
+++ b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.h
@@ -38,10 +38,9 @@
 @interface GRPCCall (ChannelArg)
 
 /**
- * Use the provided @c userAgentPrefix at the beginning of the HTTP User Agent string for all calls.
+ * Use the provided @c userAgentPrefix at the beginning of the HTTP User Agent string for all calls
+ * to the specified @c host.
  */
-+ (void)setUserAgentPrefix:(NSString *)userAgentPrefix;
-
-+ (NSString *)userAgentPrefix;
++ (void)setUserAgentPrefix:(NSString *)userAgentPrefix forHost:(NSString *)host;
 
 @end
diff --git a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.m b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.m
index 32244c3d313da3fc7bb4826dab9c11cc617c0ece..f2821f6abc05791c1adcb2e9b9fc71dd2985d900 100644
--- a/src/objective-c/GRPCClient/GRPCCall+ChannelArg.m
+++ b/src/objective-c/GRPCClient/GRPCCall+ChannelArg.m
@@ -39,16 +39,13 @@
 
 static NSString *_userAgentPrefix;
 
-+ (void)setUserAgentPrefix:(NSString *)userAgentPrefix {
-  @synchronized(self) {
-    _userAgentPrefix = userAgentPrefix;
-  }
-}
-
-+ (NSString *)userAgentPrefix {
-  @synchronized(self) {
-    return _userAgentPrefix;
++ (void)setUserAgentPrefix:(NSString *)userAgentPrefix forHost:(NSString *)host {
+  if (!host) {
+    [NSException raise:NSInvalidArgumentException
+                format:@"host and userAgentPrefix must be provided."];
   }
+  GRPCHost *hostConfig = [GRPCHost hostWithAddress:host];
+  hostConfig.userAgentPrefix = userAgentPrefix;
 }
 
 @end
diff --git a/src/objective-c/GRPCClient/private/GRPCHost.h b/src/objective-c/GRPCClient/private/GRPCHost.h
index 6b4f98746d0caa4382d89885ac6194029d151e60..69a115e88cf92bc137775b49094023a1be4f6a5a 100644
--- a/src/objective-c/GRPCClient/private/GRPCHost.h
+++ b/src/objective-c/GRPCClient/private/GRPCHost.h
@@ -39,6 +39,7 @@ struct grpc_call;
 @interface GRPCHost : NSObject
 
 @property(nonatomic, readonly) NSString *address;
+@property(nonatomic, copy) NSString *userAgentPrefix;
 
 /** The following properties should only be modified for testing: */
 
diff --git a/src/objective-c/GRPCClient/private/GRPCHost.m b/src/objective-c/GRPCClient/private/GRPCHost.m
index 8fb9d9172273cd1e1cdc7e35d9dbeec9a7268ccd..5b1ca16e120f6ea7335795c372e43736db53a5c9 100644
--- a/src/objective-c/GRPCClient/private/GRPCHost.m
+++ b/src/objective-c/GRPCClient/private/GRPCHost.m
@@ -109,9 +109,8 @@
 
   if (!_channel) {
     NSMutableDictionary *args = [NSMutableDictionary dictionary];
-    NSString *userAgentPrefix = [[GRPCCall userAgentPrefix] copy];
-    if (userAgentPrefix) {
-      args[@GRPC_ARG_PRIMARY_USER_AGENT_STRING] = userAgentPrefix;
+    if (_userAgentPrefix) {
+      args[@GRPC_ARG_PRIMARY_USER_AGENT_STRING] = _userAgentPrefix;
     }
 
     if (_secure) {