def group_create(self, group_name, description, creator, owner, url=None, forward=None):
        """ This method creates a new VirtHome group.
        NOTE: Some group name formats are reserved for specific applications!
        This method WILL allow creation of reserved group names.

        @type group_name: str
        @param group_name: The name of the new group

        @type description: str
        @param description: The group description

        @type creator: self.account_class
        @param creator: The account object of the creator of this group.

        @type owner: self.account_class
        @param owner: The account object of the owner of this group.

        @type url: str
        @param url: A url resource associated with the group

        @type forward: str
        @param forward: A url resource to an external app that uses this group
        """
        gr = self.group_class(self.db)

        if self.vhutils.group_exists(group_name):
            raise CerebrumError("Group name '%s' already exists" % group_name)

        # TBD: Verify owner.np_type is FEDaccount? Must it be?

        try:
            gr.populate(creator.entity_id, group_name, description)
            gr.write_db()
            gr.set_group_resource(url)
        except (ValueError, AssertionError):
            raise CerebrumError(str(sys.exc_info()[1]))

        forward = self.vhutils.whitelist_url(forward)
        if forward:
            gr.populate_trait(self.co.trait_group_forward, strval=forward)

        for spread in getattr(cereconf, "BOFHD_NEW_GROUP_SPREADS", ()):
            gr.add_spread(self.co.human2constant(spread, self.co.Spread))

        gr.write_db()
        roles = GroupRoles(self.db)
        roles.add_admin_to_group(owner.entity_id, gr.entity_id)
        return gr