         type        : String
         validate    : require('../name').validateName
         set         : (value)-> value.toLowerCase()
+      slug_         :
+        type        : String
+        get         : -> @slug
       privacy       :
         type        : String
         enum        : ['invalid privacy type', ['public', 'private']]

      JMembershipPolicy = require './membershippolicy'
      JName = require '../name'
      {delegate} = client.connection
      JName.claim formData.slug, [formData.slug], 'JGroup', 'slug', (err)=>
        if err then callback err
        else
          group                 = new this formData
          permissionSet         = new JPermissionSet
          defaultPermissionSet  = new JPermissionSet
          queue = [
            -> save_ 'group', group, queue, callback
            -> group.addMember delegate, (err)->
                if err then callback err
                else
                  console.log 'member is added'
                  queue.next()
            -> group.addAdmin delegate, (err)->
                if err then callback err
                else
                  console.log 'admin is added'
                  queue.next()
            -> save_ 'permission set', permissionSet, queue, callback
            -> save_ 'default permission set', defaultPermissionSet, queue, 
                      callback
            -> group.addPermissionSet permissionSet, (err)->
                if err then callback err
                else
                  console.log 'permissionSet is added'
                  queue.next()
            -> group.addDefaultPermissionSet defaultPermissionSet, (err)->
                if err then callback err
                else
                  console.log 'permissionSet is added'
                  queue.next()
            -> group.addDefaultRoles (err)->
                if err then callback err
                else
                  console.log 'roles are added'
                  queue.next()
          ]
          if 'private' is group.privacy
            queue.push -> group.createMembershipPolicy -> queue.next()
          queue.push -> callback null, group

          daisy queue

  @findSuggestions = (client, seed, options, callback)->
    {limit, blacklist, skip}  = options

  @trait __dirname, '../../traits/taggable'
  @trait __dirname, '../../traits/protected'
  @trait __dirname, '../../traits/joinable'
  @trait __dirname, '../../traits/slugifiable'

  @share()

  @set
    slugifyFrom     : 'title'
    feedable        : no
    memberRoles     : ['admin','moderator','member','guest']
    permissions     :
