public function setPreference( $name, $value, $expires = null, $index = null )
    {
        $pref = $this->loadPreference( $name, $index );

        if( is_int( $expires ) )
            $expires = new \DateTime( date( 'Y-m-d H:i:s', $expires ) );
        elseif( is_string( $expires ) )
            $expires = new \DateTime( $expires );

        if( $pref )
        {
            $pref->setValue( $value );
            $pref->setExpiresAt( $expires );
            $pref->setIx( $index );

            return $this;
        }

        $pref = $this->_createPreferenceEntity( $this );
        $pref->setName( $name );
        $pref->setValue( $value );
        $pref->setCreatedAt( new \DateTime() );
        $pref->setExpiresAt( $expires );
        $pref->setIx( $index );

        \D2EM::persist( $pref );

        return $this;
    }