diff --git a/src/service.c b/src/service.c
index 9f6e28d34be4..ee78caf9e0cc 100644
--- a/src/service.c
+++ b/src/service.c
@@ -78,6 +78,25 @@ struct connman_stats_counter {
 	struct connman_stats stats_roaming;
 };
 
+/**
+ *  IP configuration type-specific "online" HTTP-based Internet
+ *  reachability check state.
+ *
+ */
+struct online_check_state {
+	/**
+	 *  The current GLib main loop timer identifier.
+	 *
+	 */
+	guint timeout;
+
+	/**
+	 *  The current "online" reachability check sequence interval.
+	 *
+	 */
+	unsigned int interval;
+};
+
 struct connman_service {
 	int refcount;
 	char *identifier;
@@ -141,10 +160,8 @@ struct connman_service {
 	char *pac;
 	bool wps;
 	bool wps_advertizing;
-	guint online_timeout_ipv4;
-	guint online_timeout_ipv6;
-	unsigned int online_check_interval_ipv4;
-	unsigned int online_check_interval_ipv6;
+	struct online_check_state online_check_state_ipv4;
+	struct online_check_state online_check_state_ipv6;
 	bool do_split_routing;
 	bool new_service;
 	bool hidden_service;
@@ -1591,8 +1608,8 @@ static void cancel_online_check(struct connman_service *service,
 		"online_timeout_ipv4 %d online_timeout_ipv6 %d",
 		service, connman_service_get_identifier(service),
 		type, __connman_ipconfig_type2string(type),
-		service->online_timeout_ipv4,
-		service->online_timeout_ipv6);
+		service->online_check_state_ipv4.timeout,
+		service->online_check_state_ipv6.timeout);
 
 	/*
 	 * First, ensure that the reachability check is cancelled in the
@@ -1608,9 +1625,9 @@ static void cancel_online_check(struct connman_service *service,
 	 * this module.
 	 */
 	if (type == CONNMAN_IPCONFIG_TYPE_IPV4 &&
-		service->online_timeout_ipv4) {
-		g_source_remove(service->online_timeout_ipv4);
-		service->online_timeout_ipv4 = 0;
+		service->online_check_state_ipv4.timeout) {
+		g_source_remove(service->online_check_state_ipv4.timeout);
+		service->online_check_state_ipv4.timeout = 0;
 
 		/*
 		 * This balances the retained referece made when
@@ -1619,9 +1636,9 @@ static void cancel_online_check(struct connman_service *service,
 		 */
 		connman_service_unref(service);
 	} else if (type == CONNMAN_IPCONFIG_TYPE_IPV6 &&
-		service->online_timeout_ipv6) {
-		g_source_remove(service->online_timeout_ipv6);
-		service->online_timeout_ipv6 = 0;
+		service->online_check_state_ipv6.timeout) {
+		g_source_remove(service->online_check_state_ipv6.timeout);
+		service->online_check_state_ipv6.timeout = 0;
 
 		/*
 		 * This balances the retained referece made when
@@ -1770,7 +1787,7 @@ static gboolean redo_wispr_ipv4(gpointer user_data)
 {
 	struct connman_service *service = user_data;
 
-	service->online_timeout_ipv4 = 0;
+	service->online_check_state_ipv4.timeout = 0;
 
 	redo_wispr(service, CONNMAN_IPCONFIG_TYPE_IPV4);
 
@@ -1803,7 +1820,7 @@ static gboolean redo_wispr_ipv6(gpointer user_data)
 {
 	struct connman_service *service = user_data;
 
-	service->online_timeout_ipv6 = 0;
+	service->online_check_state_ipv6.timeout = 0;
 
 	redo_wispr(service, CONNMAN_IPCONFIG_TYPE_IPV6);
 
@@ -1820,40 +1837,48 @@ static gboolean redo_wispr_ipv6(gpointer user_data)
  *  configuration type with the provided interval and timeout
  *  identifier.
  *
- *  @param[in,out]  service   A pointer to the mutable network service
- *                            for which to reschedule the "online"
- *                            reachability check. On success, the
- *                            service will have a reference retained
- *                            that must be elsewhere released.
- *  @param[in]      type      The IP configuration type for which the
- *                            "online" reachability check is to be
- *                            rescheduled.
- *  @param[in,out]  interval  A pointer to the current mutable "online"
- *                            reachability check sequence interval. On
- *                            success, this will be incremented by one
- *                            (1) if it is less than the value of the
- *                            @a OnlineCheckMaxInterval configuration
- *                            setting.
- *  @param[in,out]  timeout   A pointer to the current GLib main loop
- *                            timer identifier. On success, this will
- *                            be updated with the GLib main loop timer
- *                            identifier associated with the
- *                            rescheduled "online" HTTP-based Internet
- *                            reachability check request.
+ *  @param[in,out]  service             A pointer to the mutable
+ *                                      network service for which to
+ *                                      reschedule the "online"
+ *                                      reachability check. On
+ *                                      success, the service will have
+ *                                      a reference retained that must
+ *                                      be elsewhere released.
+ *  @param[in]      type                The IP configuration type for
+ *                                      which the "online"
+ *                                      reachability check is to be
+ *                                      rescheduled.
+ *  @param[in,out]  online_check_state  A pointer to the mutable IP
+ *                                      configuration type-specific
+ *                                      "online" reachability check
+ *                                      state associated with @a
+ *                                      service and @a type. On
+ *                                      success, the 'interval' field
+ *                                      will be incremented by one (1)
+ *                                      if it is less than the value
+ *                                      of the @a
+ *                                      OnlineCheckMaxInterval
+ *                                      configuration setting and the
+ *                                      'timeout' field this will be
+ *                                      updated with the GLib main
+ *                                      loop timer identifier
+ *                                      associated with the
+ *                                      rescheduled "online"
+ *                                      HTTP-based Internet
+ *                                      reachability check request.
  *
  *  @sa redo_wispr_ipv4
  *  @sa redo_wispr_ipv6
  *
  */
 static void reschedule_online_check(struct connman_service *service,
-					enum connman_ipconfig_type type,
-					unsigned int *interval,
-					guint *timeout)
+				enum connman_ipconfig_type type,
+				struct online_check_state *online_check_state)
 {
 	GSourceFunc redo_func;
 	guint seconds;
 
-	if (!service || !interval || !timeout)
+	if (!service || !online_check_state)
 		return;
 
 	DBG("service %p (%s) type %d (%s) interval %u timeout %u",
@@ -1861,7 +1886,8 @@ static void reschedule_online_check(struct connman_service *service,
 		connman_service_get_identifier(service),
 		type,
 		__connman_ipconfig_type2string(type),
-		*interval, *timeout);
+		online_check_state->interval,
+		online_check_state->timeout);
 
 	if (type == CONNMAN_IPCONFIG_TYPE_IPV4)
 		redo_func = redo_wispr_ipv4;
@@ -1870,22 +1896,25 @@ static void reschedule_online_check(struct connman_service *service,
 
 	DBG("updating online checkout timeout period");
 
-	seconds = online_check_timeout_compute_func(*interval);
+	seconds = online_check_timeout_compute_func(
+				online_check_state->interval);
 
 	DBG("service %p (%s) type %d (%s) interval %u style \"%s\" seconds %u",
 		service,
 		connman_service_get_identifier(service),
 		type, __connman_ipconfig_type2string(type),
-		*interval, online_check_timeout_interval_style, seconds);
+		online_check_state->interval,
+		online_check_timeout_interval_style,
+		seconds);
 
-	*timeout = g_timeout_add_seconds(seconds,
+	online_check_state->timeout = g_timeout_add_seconds(seconds,
 				redo_func, connman_service_ref(service));
 
 	/* Increment the interval for the next time, limiting to a maximum
 	 * interval of @a online_check_max_interval.
 	 */
-	if (*interval < online_check_max_interval)
-		(*interval)++;
+	if (online_check_state->interval < online_check_max_interval)
+		online_check_state->interval++;
 }
 
 /**
@@ -1940,8 +1969,7 @@ static void complete_online_check(struct connman_service *service,
 					bool success,
 					int err)
 {
-	unsigned int *interval;
-	guint *timeout;
+	struct online_check_state *online_check_state;
 
 	DBG("service %p (%s) type %d (%s) success %d err %d (%s)\n",
 		service,
@@ -1954,13 +1982,10 @@ static void complete_online_check(struct connman_service *service,
 		return;
 	}
 
-	if (type == CONNMAN_IPCONFIG_TYPE_IPV4) {
-		interval = &service->online_check_interval_ipv4;
-		timeout = &service->online_timeout_ipv4;
-	} else {
-		interval = &service->online_check_interval_ipv6;
-		timeout = &service->online_timeout_ipv6;
-	}
+	if (type == CONNMAN_IPCONFIG_TYPE_IPV4)
+		online_check_state = &service->online_check_state_ipv4;
+	else
+		online_check_state = &service->online_check_state_ipv6;
 
 	if (success) {
 		__connman_service_ipconfig_indicate_state(service,
@@ -1973,17 +1998,18 @@ static void complete_online_check(struct connman_service *service,
 		goto reschedule;
 
 	if (success) {
-		*interval = online_check_max_interval;
+		online_check_state->interval = online_check_max_interval;
 	} else {
 		if (service_downgrade_online_state(service))
-			*interval = online_check_initial_interval;
+			online_check_state->interval =
+				online_check_initial_interval;
 		if (service != connman_service_get_default()) {
 			return;
 		}
 	}
 
 reschedule:
-	reschedule_online_check(service, type, interval, timeout);
+	reschedule_online_check(service, type, online_check_state);
 }
 
 /**
@@ -2051,10 +2077,10 @@ void __connman_service_wispr_start(struct connman_service *service,
 		type, __connman_ipconfig_type2string(type));
 
 	if (type == CONNMAN_IPCONFIG_TYPE_IPV4)
-		service->online_check_interval_ipv4 =
+		service->online_check_state_ipv4.interval =
 					online_check_initial_interval;
 	else
-		service->online_check_interval_ipv6 =
+		service->online_check_state_ipv6.interval =
 					online_check_initial_interval;
 
 	__connman_wispr_start(service, type,
