diff --git a/Dockerfile.synchronizer b/Dockerfile.synchronizer
index 411c3b0..4af9e45 100644
--- a/Dockerfile.synchronizer
+++ b/Dockerfile.synchronizer
@@ -15,7 +15,7 @@
 # docker build -t xosproject/kubernetes-synchronizer:candidate -f Dockerfile.synchronizer .
 
 # xosproject/kubernetes-synchronizer
-FROM xosproject/xos-synchronizer-base:2.1.22
+FROM xosproject/xos-synchronizer-base:2.1.24
 
 COPY xos/synchronizer /opt/xos/synchronizers/kubernetes
 COPY VERSION /opt/xos/synchronizers/kubernetes/
diff --git a/VERSION b/VERSION
index 524cb55..45a1b3f 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.1.1
+1.1.2
diff --git a/xos/synchronizer/pull_steps/pull_pods.py b/xos/synchronizer/pull_steps/pull_pods.py
index 65b657f..36562b3 100644
--- a/xos/synchronizer/pull_steps/pull_pods.py
+++ b/xos/synchronizer/pull_steps/pull_pods.py
@@ -94,7 +94,9 @@
                 continue
             owner = self.read_obj_kind(owner_reference.kind, owner_reference.name, trust_domain)
             if not owner:
-                log.warning("failed to fetch owner", owner_reference=owner_reference)
+                # Failed to fetch the owner, probably because the owner's kind is something we do not understand. An
+                # example is the etcd-cluser pod, which is owned by a deployment of kind "EtcdCluster".
+                log.debug("failed to fetch owner", owner_reference=owner_reference)
                 continue
             controller = self.get_controller_from_obj(owner, trust_domain, depth+1)
             if controller:
@@ -244,7 +246,9 @@
                 if not k in xos_pods_by_name:
                     trust_domain = self.get_trustdomain_from_pod(pod, owner_service=kubernetes_service)
                     if not trust_domain:
-                        log.warning("Unable to determine trust_domain for %s" % k)
+                        # All kubernetes pods should belong to a namespace. If we can't find the namespace, then
+                        # something is very wrong in K8s.
+                        log.warning("Unable to determine trust_domain for pod %s. Ignoring." % k)
                         continue
 
                     principal = self.get_principal_from_pod(pod, trust_domain)
@@ -252,7 +256,10 @@
                     image = self.get_image_from_pod(pod)
 
                     if not slice:
-                        log.warning("Unable to determine slice for %s" % k)
+                        # We could get here if the pod doesn't have a controller, or if the controller is of a kind
+                        # that we don't understand (such as the Etcd controller). If so, the pod is not something we
+                        # are interested in.
+                        log.debug("Unable to determine slice for pod %s. Ignoring." % k)
                         continue
 
                     xos_pod = KubernetesServiceInstance(name=k,
diff --git a/xos/synchronizer/steps/sync_service.py b/xos/synchronizer/steps/sync_service.py
index 500f0d9..230a0f4 100644
--- a/xos/synchronizer/steps/sync_service.py
+++ b/xos/synchronizer/steps/sync_service.py
@@ -62,11 +62,14 @@
         if (not deletion):
             for model in models[:]:
                 if not self.get_trust_domain(model):
-                    log.info("Unable to determine Trust Domain for service %s. Ignoring." % model.name)
+                    # If this happens, then either the Service has no Slices, or it does have slices but none of
+                    # those slices are associated with a TrustDomain. Assume the developer has done this on purpose
+                    # and ignore the Service.
+                    log.debug("Unable to determine Trust Domain for service %s. Ignoring." % model.name)
                     models.remove(model)
                 elif not model.serviceports.exists():
                     # If there are not ServicePorts, then there's not much for us to do at this time...
-                    log.info("Service %s is not interesting. Ignoring." % model.name)
+                    log.debug("Service %s has no serviceports. Ignoring." % model.name)
                     models.remove(model)
 
         return models
