diff --git a/CRM/Core/BAO/OpenID.php b/CRM/Core/BAO/OpenID.php
index 34326a7562578ccf60250ec4f8a3b18227ea7f1b..db14b57eec4279d16ec6b20e7b8042dda1881d96 100644
--- a/CRM/Core/BAO/OpenID.php
+++ b/CRM/Core/BAO/OpenID.php
@@ -24,9 +24,16 @@ class CRM_Core_BAO_OpenID extends CRM_Core_DAO_OpenID {
    * Create or update OpenID record.
    *
    * @param array $params
+   *
    * @return CRM_Core_DAO_OpenID
+   *
+   * @throws \API_Exception
+   * @throws \CRM_Core_Exception
    */
   public static function add($params) {
+    if (empty($params['id']) || is_numeric($params['is_primary'] ?? NULL)) {
+      CRM_Core_BAO_Block::handlePrimary($params, __CLASS__);
+    }
     return self::writeRecord($params);
   }
 
@@ -38,6 +45,7 @@ class CRM_Core_BAO_OpenID extends CRM_Core_DAO_OpenID {
    *   Input parameters to find object.
    *
    * @return mixed
+   * @throws \CRM_Core_Exception
    */
   public static function &getValues($entityBlock) {
     return CRM_Core_BAO_Block::getValues('openid', $entityBlock);
diff --git a/tests/phpunit/api/v3/OpenIDTest.php b/tests/phpunit/api/v3/OpenIDTest.php
index a3025e805bcc90304bf8b53f5d4acfe7edc0b6f9..5c554ab006d756feac8e4249f59074de764a91a7 100644
--- a/tests/phpunit/api/v3/OpenIDTest.php
+++ b/tests/phpunit/api/v3/OpenIDTest.php
@@ -18,6 +18,13 @@
  */
 class api_v3_OpenIDTest extends CiviUnitTestCase {
 
+  /**
+   * Should location types be checked to ensure primary addresses are correctly assigned after each test.
+   *
+   * @var bool
+   */
+  protected $isLocationTypesOnPostAssert = TRUE;
+
   protected $_params;
   protected $id;
   protected $_entity;