diff --git a/src/ip_utils.cpp b/src/ip_utils.cpp
index 25e1f40..42d2230 100644
--- a/src/ip_utils.cpp
+++ b/src/ip_utils.cpp
@@ -100,7 +100,7 @@
     // Cycle through available interfaces.
     for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) {
         // Skip loopback, point-to-point and down interfaces.
-        // except don't skip down interfaces if we're trying to get
+        // except don't skip down interfaces if we're attempting to get
         // a list of configurable interfaces.
         if ((ifa->ifa_flags & IFF_LOOPBACK) || (!(ifa->ifa_flags & IFF_UP))) {
             continue;
@@ -155,7 +155,7 @@
         strncpy(ifReq.ifr_name, pifReq->ifr_name, sizeof(ifReq.ifr_name));
         ioctl(localSock, SIOCGIFFLAGS, &ifReq);
         // Skip loopback, point-to-point and down interfaces.
-        // except don't skip down interfaces if we're trying to get
+        // except don't skip down interfaces if we're attempting to get
         // a list of configurable interfaces.
         if ((ifReq.ifr_flags & IFF_LOOPBACK) || (!(ifReq.ifr_flags & IFF_UP))) {
             continue;
@@ -205,7 +205,7 @@
     char localHostBuf[INET_ADDRSTRLEN];
     auto hostInfo = ip_utils::getHostName();
     if (hostInfo.address.empty()) {
-        // JAMI_WARN("Couldn't find local host");
+        // JAMI_WARN("Unable to find local host");
         return {};
     } else {
         return IpAddr(ip_utils::getGateway(hostInfo.address, ip_utils::subnet_mask::prefix_24bit));
@@ -270,14 +270,14 @@
     if (status == PJ_SUCCESS) {
         return ip_addr;
     }
-    // JAMI_WARN("Could not get preferred address familly (%s)",
+    // JAMI_WARN("Unable to get preferred address family (%s)",
     //           (family == pj_AF_INET6()) ? "IPv6" : "IPv4");
     family = (family == pj_AF_INET()) ? pj_AF_INET6() : pj_AF_INET();
     status = pj_gethostip(family, ip_addr.pjPtr());
     if (status == PJ_SUCCESS) {
         return ip_addr;
     }
-    // JAMI_ERR("Could not get local IP");
+    // JAMI_ERR("Unable to get local IP");
     return ip_addr;
 }
 
@@ -294,14 +294,14 @@
 
     int fd = socket(unix_family, SOCK_DGRAM, 0);
     if (fd < 0) {
-        // JAMI_ERR("Could not open socket: %m");
+        // JAMI_ERR("Unable to open socket: %m");
         return addr;
     }
 
     if (unix_family == AF_INET6) {
         int val = family != pj_AF_UNSPEC();
         if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void*) &val, sizeof(val)) < 0) {
-            // JAMI_ERR("Could not setsockopt: %m");
+            // JAMI_ERR("Unable to setsockopt: %m");
             close(fd);
             return addr;
         }
