diff --git a/glib_utils.cc b/glib_utils.cc
index 3371da4..625d8d1 100644
--- a/glib_utils.cc
+++ b/glib_utils.cc
@@ -24,5 +24,14 @@
   return message;
 }
 
+gchar** StringVectorToGStrv(const std::vector<string> &vec_str) {
+  GPtrArray *p = g_ptr_array_new();
+  for (const string& str : vec_str) {
+    g_ptr_array_add(p, g_strdup(str.c_str()));
+  }
+  g_ptr_array_add(p, nullptr);
+  return reinterpret_cast<gchar**>(g_ptr_array_free(p, FALSE));
+}
+
 }  // namespace utils
 }  // namespace chromeos_update_engine
diff --git a/glib_utils.h b/glib_utils.h
index 0c941ca..97020cb 100644
--- a/glib_utils.h
+++ b/glib_utils.h
@@ -6,6 +6,7 @@
 #define UPDATE_ENGINE_GLIB_UTILS_H_
 
 #include <string>
+#include <vector>
 
 #include <glib.h>
 
@@ -16,6 +17,29 @@
 // object and resets error to null.
 std::string GetAndFreeGError(GError** error);
 
+// Converts a vector of strings to a NUL-terminated array of
+// strings. The resulting array should be freed with g_strfreev()
+// when are you done with it.
+gchar** StringVectorToGStrv(const std::vector<std::string>& vec_str);
+
+// A base::FreeDeleter that frees memory using g_free(). Useful when
+// integrating with GLib since it can be used with std::unique_ptr to
+// automatically free memory when going out of scope.
+struct GLibFreeDeleter {
+  inline void operator()(void* ptr) const {
+    g_free(static_cast<gpointer>(ptr));
+  }
+};
+
+// A base::FreeDeleter that frees memory using g_strfreev(). Useful
+// when integrating with GLib since it can be used with std::unique_ptr to
+// automatically free memory when going out of scope.
+struct GLibStrvFreeDeleter {
+  inline void operator()(void* ptr) const {
+    g_strfreev(static_cast<gchar**>(ptr));
+  }
+};
+
 }  // namespace utils
 }  // namespace chromeos_update_engine
 
diff --git a/p2p_manager.cc b/p2p_manager.cc
index 8d519fa..c1a2738 100644
--- a/p2p_manager.cc
+++ b/p2p_manager.cc
@@ -245,7 +245,7 @@
   may_be_running_ = true;  // Unless successful, we must be conservative.
 
   vector<string> args = configuration_->GetInitctlArgs(should_be_running);
-  unique_ptr<gchar*, GLibStrvFreeDeleter> argv(
+  unique_ptr<gchar*, utils::GLibStrvFreeDeleter> argv(
       utils::StringVectorToGStrv(args));
   if (!g_spawn_sync(nullptr,  // working_directory
                     argv.get(),
@@ -260,7 +260,8 @@
                << ": " << utils::GetAndFreeGError(&error);
     return false;
   }
-  unique_ptr<gchar, GLibFreeDeleter> standard_error_deleter(standard_error);
+  unique_ptr<gchar, utils::GLibFreeDeleter> standard_error_deleter(
+      standard_error);
 
   if (!WIFEXITED(exit_status)) {
     LOG(ERROR) << "Error spawning '" << utils::StringVectorToString(args)
diff --git a/utils.cc b/utils.cc
index 03f642a..f36cbec 100644
--- a/utils.cc
+++ b/utils.cc
@@ -40,7 +40,6 @@
 #include <chromeos/data_encoding.h>
 #include <chromeos/key_value_store.h>
 #include <chromeos/message_loops/message_loop.h>
-#include <glib.h>
 
 #include "update_engine/clock_interface.h"
 #include "update_engine/constants.h"
@@ -676,7 +675,7 @@
 
     TEST_AND_RETURN_FALSE_ERRNO(errno == EBUSY &&
                                 num_retries < kUnmountMaxNumOfRetries);
-    g_usleep(kUnmountRetryIntervalInMicroseconds);
+    usleep(kUnmountRetryIntervalInMicroseconds);
   }
   return true;
 }
@@ -1503,15 +1502,6 @@
   return Time::UnixEpoch() + TimeDelta::FromMicroseconds(us);
 }
 
-gchar** StringVectorToGStrv(const vector<string> &vec_str) {
-  GPtrArray *p = g_ptr_array_new();
-  for (const string& str : vec_str) {
-    g_ptr_array_add(p, g_strdup(str.c_str()));
-  }
-  g_ptr_array_add(p, nullptr);
-  return reinterpret_cast<gchar**>(g_ptr_array_free(p, FALSE));
-}
-
 string StringVectorToString(const vector<string> &vec_str) {
   string str = "[";
   for (vector<string>::const_iterator i = vec_str.begin();
diff --git a/utils.h b/utils.h
index f33c011..bd3fda6 100644
--- a/utils.h
+++ b/utils.h
@@ -19,7 +19,6 @@
 #include <base/posix/eintr_wrapper.h>
 #include <base/time/time.h>
 #include <chromeos/secure_blob.h>
-#include <glib.h>
 #include "metrics/metrics_library.h"
 
 #include "update_engine/action.h"
@@ -41,11 +40,6 @@
 // down.
 base::Time TimeFromStructTimespec(struct timespec *ts);
 
-// Converts a vector of strings to a NUL-terminated array of
-// strings. The resulting array should be freed with g_strfreev()
-// when are you done with it.
-gchar** StringVectorToGStrv(const std::vector<std::string> &vec_str);
-
 // Formats |vec_str| as a string of the form ["<elem1>", "<elem2>"].
 // Does no escaping, only use this for presentation in error messages.
 std::string StringVectorToString(const std::vector<std::string> &vec_str);
@@ -577,24 +571,6 @@
   DISALLOW_COPY_AND_ASSIGN(ScopedActionCompleter);
 };
 
-// A base::FreeDeleter that frees memory using g_free(). Useful when
-// integrating with GLib since it can be used with std::unique_ptr to
-// automatically free memory when going out of scope.
-struct GLibFreeDeleter : public base::FreeDeleter {
-  inline void operator()(void *ptr) const {
-    g_free(reinterpret_cast<gpointer>(ptr));
-  }
-};
-
-// A base::FreeDeleter that frees memory using g_strfreev(). Useful
-// when integrating with GLib since it can be used with std::unique_ptr to
-// automatically free memory when going out of scope.
-struct GLibStrvFreeDeleter : public base::FreeDeleter {
-  inline void operator()(void *ptr) const {
-    g_strfreev(reinterpret_cast<gchar**>(ptr));
-  }
-};
-
 }  // namespace chromeos_update_engine
 
 #define TEST_AND_RETURN_FALSE_ERRNO(_x)                                        \
