diff --git a/NEWS b/NEWS
index 928860b..64ae583 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,11 @@ Overview of changes from libfolks 0.3.3 to libfolks 0.3.4
 
 Bugs fixed:
 * Bug 637240 — libfolks-telepathy.so exports private symbols
+* Bug 627397 — Use better interface names
+
+API changes:
+* Rename the HasAvatar interface to AvatarOwner
+* Rename the HasPresence interface to PresenceOwner
 
 Overview of changes from libfolks 0.3.2 to libfolks 0.3.3
 =========================================================
diff --git a/backends/telepathy/lib/tpf-persona.vala b/backends/telepathy/lib/tpf-persona.vala
index ce4e727..e08d5f9 100644
--- a/backends/telepathy/lib/tpf-persona.vala
+++ b/backends/telepathy/lib/tpf-persona.vala
@@ -31,8 +31,8 @@ public class Tpf.Persona : Folks.Persona,
     Aliasable,
     Favouritable,
     Groupable,
-    HasAvatar,
-    HasPresence,
+    AvatarOwner,
+    PresenceOwner,
     IMable
 {
   private HashTable<string, bool> _groups;
@@ -50,21 +50,21 @@ public class Tpf.Persona : Folks.Persona,
   /**
    * An avatar for the Persona.
    *
-   * See {@link Folks.HasAvatar.avatar}.
+   * See {@link Folks.AvatarOwner.avatar}.
    */
   public File avatar { get; set; }
 
   /**
    * The Persona's presence type.
    *
-   * See {@link Folks.HasPresence.presence_type}.
+   * See {@link Folks.PresenceOwner.presence_type}.
    */
   public Folks.PresenceType presence_type { get; private set; }
 
   /**
    * The Persona's presence message.
    *
-   * See {@link Folks.HasPresence.presence_message}.
+   * See {@link Folks.PresenceOwner.presence_message}.
    */
   public string presence_message { get; private set; }
 
diff --git a/folks/Makefile.am b/folks/Makefile.am
index f5be30d..7c17c06 100644
--- a/folks/Makefile.am
+++ b/folks/Makefile.am
@@ -17,8 +17,8 @@ libfolks_la_SOURCES = \
 	backend-store.vala \
 	favouritable.vala \
 	groupable.vala \
-	has-avatar.vala \
-	has-presence.vala \
+	avatar-owner.vala \
+	presence-owner.vala \
 	imable.vala \
 	individual.vala \
 	individual-aggregator.vala \
diff --git a/folks/avatar-owner.vala b/folks/avatar-owner.vala
new file mode 100644
index 0000000..f50868b
--- /dev/null
+++ b/folks/avatar-owner.vala
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2010 Collabora Ltd.
+ *
+ * This library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *       Travis Reitter <travis.reitter@collabora.co.uk>
+ */
+
+using GLib;
+
+/**
+ * Interface for classes which represent contacts which have an avatar
+ * (pictorial representation), such as {@link Persona} and {@link Individual}.
+ */
+public interface Folks.AvatarOwner : Object
+{
+  /**
+   * An avatar for the contact.
+   *
+   * An avatar is a small image file which represents the contact. It may be
+   * `null` if unset.
+   */
+  public abstract File avatar { get; set; }
+}
diff --git a/folks/has-avatar.vala b/folks/has-avatar.vala
deleted file mode 100644
index bda939e..0000000
--- a/folks/has-avatar.vala
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this library.  If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors:
- *       Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-using GLib;
-
-/**
- * Interface for classes which represent contacts which have an avatar
- * (pictorial representation), such as {@link Persona} and {@link Individual}.
- */
-public interface Folks.HasAvatar : Object
-{
-  /**
-   * An avatar for the contact.
-   *
-   * An avatar is a small image file which represents the contact. It may be
-   * `null` if unset.
-   */
-  public abstract File avatar { get; set; }
-}
diff --git a/folks/has-presence.vala b/folks/has-presence.vala
deleted file mode 100644
index 9d88943..0000000
--- a/folks/has-presence.vala
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2010 Collabora Ltd.
- *
- * This library is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 2.1 of the License, or
- * (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this library.  If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors:
- *       Travis Reitter <travis.reitter@collabora.co.uk>
- */
-
-using GLib;
-
-/**
- * The possible presence states an object implementing {@link HasPresence} could
- * be in.
- *
- * These closely follow the
- * [[http://telepathy.freedesktop.org/spec/Connection_Interface_Simple_Presence.html#Connection_Presence_Type|SimplePresence]]
- * interface in the Telepathy specification.
- */
-public enum Folks.PresenceType {
-  /**
-   * never set
-   */
-  UNSET,
-  /**
-   * offline
-   */
-  OFFLINE,
-  /**
-   * available
-   */
-  AVAILABLE,
-  /**
-   * away from keyboard
-   */
-  AWAY,
-  /**
-   * away from keyboard for an extended period of time
-   */
-  EXTENDED_AWAY,
-  /**
-   * also known as "invisible" or "appear offline"
-   */
-  HIDDEN,
-  /**
-   * at keyboard, but too busy to chat
-   */
-  BUSY,
-  /**
-   * presence not received from server
-   */
-  UNKNOWN,
-  /**
-   * an error occurred with fetching the presence
-   */
-  ERROR
-}
-
-/**
- * Interface exposing a {@link Persona}'s or {@link Individual}'s presence;
- * their current availability, such as for chatting.
- *
- * If the {@link Backend} providing the {@link Persona} doesn't support
- * presence, the {@link Persona}'s `presence_type` will be set to
- * {@link PresenceType.UNSET} and their `presence_message` will be an empty
- * string.
- */
-public interface Folks.HasPresence : Object
-{
-  /**
-   * The contact's presence type.
-   *
-   * Each contact can have one and only one presence type at any one time,
-   * representing their availability for communication. The default presence
-   * type is {@link PresenceType.UNSET}.
-   */
-  public abstract Folks.PresenceType presence_type
-    {
-      get; set; default = Folks.PresenceType.UNSET;
-    }
-
-  /**
-   * The contact's presence message.
-   *
-   * This is a short message written by the contact to add detail to their
-   * presence type ({@link Folks.HasPresence.presence_type}). If the contact
-   * hasn't set a message, it will be an empty string.
-   */
-  public abstract string presence_message { get; set; default = ""; }
-
-  /* Rank the presence types for comparison purposes, with higher numbers
-   * meaning more available */
-  private static uint type_availability (PresenceType type)
-    {
-      switch (type)
-        {
-          case PresenceType.UNSET:
-            return 0;
-          case PresenceType.UNKNOWN:
-            return 1;
-          case PresenceType.ERROR:
-            return 2;
-          case PresenceType.OFFLINE:
-            return 3;
-          case PresenceType.HIDDEN:
-            return 4;
-          case PresenceType.EXTENDED_AWAY:
-            return 5;
-          case PresenceType.AWAY:
-            return 6;
-          case PresenceType.BUSY:
-            return 7;
-          case PresenceType.AVAILABLE:
-            return 8;
-          default:
-            return 1;
-        }
-    }
-
-  /**
-   * Compare two {@link PresenceType}s.
-   *
-   * `0` will be returned if the types are equal, a positive number will be
-   * returned if `type_a` is more available than `type_b`, and a negative
-   * number will be returned if the opposite is true.
-   *
-   * @param type_a the first {@link PresenceType} to compare
-   * @param type_b the second {@link PresenceType} to compare
-   * @return a number representing the similarity of the two types
-   * @since 0.1.11
-   */
-  public static int typecmp (PresenceType type_a, PresenceType type_b)
-    {
-      return (int) type_availability (type_a) -
-          (int) type_availability (type_b);
-    }
-
-  /**
-   * Whether the contact is online.
-   *
-   * This will be `true` if the contact's presence type is higher than
-   * {@link PresenceType.OFFLINE}, as determined by {@link HasPresence.typecmp}.
-   *
-   * @return `true` if the contact is online, `false` otherwise
-   */
-  public bool is_online ()
-    {
-      return (typecmp (this.presence_type, PresenceType.OFFLINE) > 0);
-    }
-}
diff --git a/folks/individual.vala b/folks/individual.vala
index bf3d180..d4226d6 100644
--- a/folks/individual.vala
+++ b/folks/individual.vala
@@ -66,8 +66,8 @@ public class Folks.Individual : Object,
     Aliasable,
     Favouritable,
     Groupable,
-    HasAvatar,
-    HasPresence,
+    AvatarOwner,
+    PresenceOwner,
     IMable
 {
   private bool _is_favourite;
@@ -515,11 +515,11 @@ public class Folks.Individual : Object,
       /* Choose the most available presence from our personas */
       this._persona_list.foreach ((p) =>
         {
-          if (p is HasPresence)
+          if (p is PresenceOwner)
             {
-              unowned HasPresence presence = (HasPresence) p;
+              unowned PresenceOwner presence = (PresenceOwner) p;
 
-              if (HasPresence.typecmp (presence.presence_type,
+              if (PresenceOwner.typecmp (presence.presence_type,
                   presence_type) > 0)
                 {
                   presence_type = presence.presence_type;
@@ -655,9 +655,9 @@ public class Folks.Individual : Object,
 
       this._persona_list.foreach ((p) =>
         {
-          if (avatar == null && p is HasAvatar)
+          if (avatar == null && p is AvatarOwner)
             {
-              avatar = ((HasAvatar) p).avatar;
+              avatar = ((AvatarOwner) p).avatar;
               return;
             }
         });
diff --git a/folks/presence-owner.vala b/folks/presence-owner.vala
new file mode 100644
index 0000000..5d91d88
--- /dev/null
+++ b/folks/presence-owner.vala
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2010 Collabora Ltd.
+ *
+ * This library is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ *       Travis Reitter <travis.reitter@collabora.co.uk>
+ */
+
+using GLib;
+
+/**
+ * The possible presence states an object implementing {@link PresenceOwner}
+ * could be in.
+ *
+ * These closely follow the
+ * [[http://telepathy.freedesktop.org/spec/Connection_Interface_Simple_Presence.html#Connection_Presence_Type|SimplePresence]]
+ * interface in the Telepathy specification.
+ */
+public enum Folks.PresenceType {
+  /**
+   * never set
+   */
+  UNSET,
+  /**
+   * offline
+   */
+  OFFLINE,
+  /**
+   * available
+   */
+  AVAILABLE,
+  /**
+   * away from keyboard
+   */
+  AWAY,
+  /**
+   * away from keyboard for an extended period of time
+   */
+  EXTENDED_AWAY,
+  /**
+   * also known as "invisible" or "appear offline"
+   */
+  HIDDEN,
+  /**
+   * at keyboard, but too busy to chat
+   */
+  BUSY,
+  /**
+   * presence not received from server
+   */
+  UNKNOWN,
+  /**
+   * an error occurred with fetching the presence
+   */
+  ERROR
+}
+
+/**
+ * Interface exposing a {@link Persona}'s or {@link Individual}'s presence;
+ * their current availability, such as for chatting.
+ *
+ * If the {@link Backend} providing the {@link Persona} doesn't support
+ * presence, the {@link Persona}'s `presence_type` will be set to
+ * {@link PresenceType.UNSET} and their `presence_message` will be an empty
+ * string.
+ */
+public interface Folks.PresenceOwner : Object
+{
+  /**
+   * The contact's presence type.
+   *
+   * Each contact can have one and only one presence type at any one time,
+   * representing their availability for communication. The default presence
+   * type is {@link PresenceType.UNSET}.
+   */
+  public abstract Folks.PresenceType presence_type
+    {
+      get; set; default = Folks.PresenceType.UNSET;
+    }
+
+  /**
+   * The contact's presence message.
+   *
+   * This is a short message written by the contact to add detail to their
+   * presence type ({@link Folks.PresenceOwner.presence_type}). If the contact
+   * hasn't set a message, it will be an empty string.
+   */
+  public abstract string presence_message { get; set; default = ""; }
+
+  /* Rank the presence types for comparison purposes, with higher numbers
+   * meaning more available */
+  private static uint type_availability (PresenceType type)
+    {
+      switch (type)
+        {
+          case PresenceType.UNSET:
+            return 0;
+          case PresenceType.UNKNOWN:
+            return 1;
+          case PresenceType.ERROR:
+            return 2;
+          case PresenceType.OFFLINE:
+            return 3;
+          case PresenceType.HIDDEN:
+            return 4;
+          case PresenceType.EXTENDED_AWAY:
+            return 5;
+          case PresenceType.AWAY:
+            return 6;
+          case PresenceType.BUSY:
+            return 7;
+          case PresenceType.AVAILABLE:
+            return 8;
+          default:
+            return 1;
+        }
+    }
+
+  /**
+   * Compare two {@link PresenceType}s.
+   *
+   * `0` will be returned if the types are equal, a positive number will be
+   * returned if `type_a` is more available than `type_b`, and a negative
+   * number will be returned if the opposite is true.
+   *
+   * @param type_a the first {@link PresenceType} to compare
+   * @param type_b the second {@link PresenceType} to compare
+   * @return a number representing the similarity of the two types
+   * @since 0.1.11
+   */
+  public static int typecmp (PresenceType type_a, PresenceType type_b)
+    {
+      return (int) type_availability (type_a) -
+          (int) type_availability (type_b);
+    }
+
+  /**
+   * Whether the contact is online.
+   *
+   * This will be `true` if the contact's presence type is higher than
+   * {@link PresenceType.OFFLINE}, as determined by
+   * {@link PresenceOwner.typecmp}.
+   *
+   * @return `true` if the contact is online, `false` otherwise
+   */
+  public bool is_online ()
+    {
+      return (typecmp (this.presence_type, PresenceType.OFFLINE) > 0);
+    }
+}
diff --git a/tests/telepathy/individual-properties.vala b/tests/telepathy/individual-properties.vala
index 578aac8..b301279 100644
--- a/tests/telepathy/individual-properties.vala
+++ b/tests/telepathy/individual-properties.vala
@@ -61,7 +61,7 @@ public class IndividualPropertiesTests : Folks.TestCase
               assert (i.alias == "Olivier");
               assert (i.presence_message == "");
               assert (i.presence_type == PresenceType.AWAY);
-              assert (((HasPresence) i).is_online () == true);
+              assert (((PresenceOwner) i).is_online () == true);
 
               /* Check groups */
               assert (i.groups.size () == 2);
