diff --git a/src/snek/service/user_property.py b/src/snek/service/user_property.py
index 5f607ad..49a120d 100644
--- a/src/snek/service/user_property.py
+++ b/src/snek/service/user_property.py
@@ -7,15 +7,15 @@ class UserPropertyService(BaseService):
     mapper_name = "user_property"
 
     async def set(self, user_uid, name, value):
-        prop = await super().get(user_uid=user_uid, name=name)
-        if not prop:
-            prop = await self.new()
-            prop["user_uid"] = user_uid
-            prop["name"] = name
-
-        prop["value"] = json.dumps(value, default=str)
-        return await self.save(prop)
-
+        self.mapper.db["user_property"].upsert(
+            {
+                "user_uid": user_uid, 
+                "name": name, 
+                "value": json.dumps(value, default=str)
+            },
+            ["user_uid", "name"]
+        )
+        
     async def get(self, user_uid, name):
         try:
             return json.loads((await super().get(user_uid=user_uid, name=name))["value"])