diff -r 7c4f4a1b1313 src/plugins/acl/acl-backend-vfile.c
--- a/src/plugins/acl/acl-backend-vfile.c	Tue Feb 03 12:07:21 2009 -0500
+++ b/src/plugins/acl/acl-backend-vfile.c	Wed Feb 04 18:41:15 2009 +0100
@@ -710,12 +710,24 @@ static void apply_owner_rights(struct ac
 static void apply_owner_rights(struct acl_object *_aclobj)
 {
 	struct acl_rights_update ru;
+	struct mail_namespace *ns;
 	const char *null = NULL;
+
+	ns = mailbox_list_get_namespace(_aclobj->backend->list);
 
 	memset(&ru, 0, sizeof(ru));
 	ru.modify_mode = ACL_MODIFY_MODE_REPLACE;
 	ru.neg_modify_mode = ACL_MODIFY_MODE_REPLACE;
-	ru.rights.id_type = ACL_ID_OWNER;
+	if (ns->owner != NULL) {
+		ru.rights.id_type = ACL_ID_USER;
+		ru.rights.identifier = ns->owner->username;
+	} else {
+		if (_aclobj->backend->debug) {
+			i_info("apply_owner_rights: no namespace owner,"
+			       " falling back to 'owner' acl");
+		}
+		ru.rights.id_type = ACL_ID_OWNER;
+	}
 	ru.rights.rights = _aclobj->backend->default_rights;
 	ru.rights.neg_rights = &null;
 	acl_cache_update(_aclobj->backend->cache, _aclobj->name, &ru);
@@ -739,8 +751,17 @@ static void acl_backend_vfile_cache_rebu
 	ns = mailbox_list_get_namespace(_aclobj->backend->list);
 	memset(&ru2, 0, sizeof(ru2));
 	ru2.modify_mode = ACL_MODIFY_MODE_ADD;
-	ru2.rights.id_type = ACL_ID_OWNER;
 	ru2.rights.rights = admin_rights;
+	if (ns->owner != NULL) {
+		ru2.rights.id_type = ACL_ID_USER;
+		ru2.rights.identifier = ns->owner->username;
+	} else {
+		if (_aclobj->backend->debug) {
+			i_info("acl vfile cache rebuild: no namespace owner,"
+			       " falling back to 'owner' acl");
+		}
+		ru2.rights.id_type = ACL_ID_OWNER;
+	}
 
 	owner_applied = ns->type != NAMESPACE_PRIVATE;
 
@@ -1159,14 +1180,26 @@ acl_backend_vfile_object_list_next(struc
 
 	if (iter->idx == array_count(&aclobj->rights)) {
 		struct acl_backend *backend = iter->aclobj->backend;
+		struct mail_namespace *ns;
 
 		if (iter->returned_owner)
 			return 0;
+
+		ns = mailbox_list_get_namespace(backend->list);
 
 		/* return missing owner based on the default ACLs */
 		iter->returned_owner = TRUE;
 		memset(rights_r, 0, sizeof(*rights_r));
-		rights_r->id_type = ACL_ID_OWNER;
+		if (ns->owner != NULL) {
+			rights_r->id_type = ACL_ID_USER;
+			rights_r->identifier = ns->owner->username;
+		} else {
+			if (backend->debug) {
+				i_info("acl_backend_vfile_object_list_next: no namespace owner,"
+				       " falling back to 'owner' acl");
+			}
+			rights_r->id_type = ACL_ID_OWNER;
+		}
 		rights_r->rights =
 			acl_backend_mask_get_names(backend,
 						   backend->default_aclmask,
