def add_filter_rule(
            self, name, condition, filters, actions, active=1, way='in'):
        """
        :param: name filter name
        :param: condition allof or anyof
        :param: filters dict of filters
        :param: actions dict of actions
        :param: way string discribing if filter is for 'in' or 'out' messages
        :returns: list of user's zobjects.FilterRule
        """

        filters['condition'] = condition

        new_rule = {
            'name': name,
            'active': active,
            'filterTests': filters,
            'filterActions': actions
        }

        new_rules = [zobjects.FilterRule.from_dict(new_rule)]

        prev_rules = self.get_filter_rules(way=way)

        # if there is already some rules
        if prev_rules:
            for rule in prev_rules:
                # don't add rule if it already exist
                if rule.name == new_rules[0].name:
                    raise ZimSOAPException(
                        'filter %s already exists' % rule.name)
            new_rules = new_rules + prev_rules

        content = {
            'filterRules': {
                'filterRule': [r._full_data for r in new_rules]
            }
        }
        if way == 'in':
            self.request('ModifyFilterRules', content)
        elif way == 'out':
            self.request('ModifyOutgoingFilterRules', content)
        return new_rules