diff --git a/README.md b/README.md
index 2fb51e5cbd2e87b708ef2f625e5e0e3c0e57d34b..0a4b17459bac921bd954c3cea10ed567a9a971fb 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[PACKAGE]: ../../raw/master/mkp/freeradius-0.1.1-20240430.mkp "freeradius-0.1.1-20240430.mkp"
+[PACKAGE]: ../../raw/master/mkp/freeradius-0.1.2-20240501.mkp "freeradius-0.1.2-20240501.mkp"
 [PYRADLIB]: ../../raw/master/mkp/pyrad-2.4.0-240421.mkp "pyrad-2.4.0-240421.mkp"
 # FreeRADIUS
 
diff --git a/mkp/freeradius-0.1.2-20240501.mkp b/mkp/freeradius-0.1.2-20240501.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..e1126acb7ff7ad17bfe26de117e3073fa80814d4
Binary files /dev/null and b/mkp/freeradius-0.1.2-20240501.mkp differ
diff --git a/source/gui/wato/check_parameters/freeradius.py b/source/gui/wato/check_parameters/freeradius.py
new file mode 100644
index 0000000000000000000000000000000000000000..646f71e01321b7c5a47505d3dafa3f338a4a259b
--- /dev/null
+++ b/source/gui/wato/check_parameters/freeradius.py
@@ -0,0 +1,343 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# License: GNU General Public License v2
+#
+# Author: thl-cmk[at]outlook[dot]com
+# URL   : https://thl-cmk.hopto.org
+# Date  : 2024-04-29
+# File  : freeradius.py (WATO)
+
+from cmk.gui.i18n import _
+from cmk.gui.plugins.wato.utils import (
+    CheckParameterRulespecWithoutItem,
+    RulespecGroupCheckParametersApplications,
+    rulespec_registry,
+)
+from cmk.gui.valuespec import (
+    Alternative,
+    Dictionary,
+    FixedValue,
+    Integer,
+    ListOf,
+    Tuple,
+    ValueSpec,
+)
+
+_list_attributes = (
+    'list_attributes',
+    FixedValue(
+        True, title=_('List response attributes in service details'), totext=_('yes'),
+    ))
+
+
+def _parameter_valuespec_freeradius():
+    return Dictionary(
+        title=_('FreeRADIUS queue'),
+        optional_keys=True,
+        elements=[
+            _list_attributes,
+        ],
+        required_keys=['attributes']
+    )
+
+
+def _attributes(_attribute_list, _attribute_type) -> ValueSpec:
+    return ('attributes',
+            ListOf(
+                Alternative(
+                    orientation='horizontal',
+                    elements=[
+                        _attribute_values(attribute, name) for attribute, name in _attribute_list
+                    ]
+                ),
+                title=_(f'{_attribute_type} Attributes'),
+                add_label=_('add attribute'),
+            ))
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithoutItem(
+        title=lambda: _('FreeRADIUS'),
+        check_group_name='freeradius',
+        group=RulespecGroupCheckParametersApplications,
+        parameter_valuespec=_parameter_valuespec_freeradius,
+        match_type='dict',
+    )
+)
+
+# names
+_Accepts = 'Accepts'
+_Accounting = 'Accounting'
+_Authentication = 'Authentication'
+_Challenges = 'Challenges'
+_Conflicts = 'Conflicts'
+_Detail = 'Detail'
+_Dropped = 'Dropped'
+_Duplicate = 'Duplicate'
+_Internal = 'Internal'
+_Invalid = 'Invalid'
+_Malformed = 'Malformed'
+_PPS_In = 'PPS In'
+_PPS_Out = 'PSS Out'
+_Proxy = 'Proxy'
+_Rejects = 'Rejects'
+_Requests = 'Requests'
+_Responses = 'Responses'
+_Unknown_Types = 'Unknown Types'
+
+# Internal Attributes
+_FreeRADIUS_Queue_Len_Internal = 'FreeRADIUS-Queue-Len-Internal'
+_FreeRADIUS_Queue_Len_Proxy = 'FreeRADIUS-Queue-Len-Proxy'
+_FreeRADIUS_Queue_Len_Auth = 'FreeRADIUS-Queue-Len-Auth'
+_FreeRADIUS_Queue_Len_Acct = 'FreeRADIUS-Queue-Len-Acct'
+_FreeRADIUS_Queue_Len_Detail = 'FreeRADIUS-Queue-Len-Detail'
+_FreeRADIUS_Queue_PPS_In = 'FreeRADIUS-Queue-PPS-In'
+_FreeRADIUS_Queue_PPS_Out = 'FreeRADIUS-Queue-PPS-Out'
+
+_FreeRADIUS_Queue = [
+    (_FreeRADIUS_Queue_Len_Acct, _Accounting),
+    (_FreeRADIUS_Queue_Len_Auth, _Authentication),
+    (_FreeRADIUS_Queue_Len_Detail, _Detail),
+    (_FreeRADIUS_Queue_Len_Internal, _Internal),
+    (_FreeRADIUS_Queue_Len_Proxy, _Proxy),
+    (_FreeRADIUS_Queue_PPS_In, _PPS_In),
+    (_FreeRADIUS_Queue_PPS_Out, _PPS_Out),
+]
+
+
+def _attribute_values(attribute, name):
+    return Tuple(
+        title=name,
+        elements=[
+            FixedValue(attribute, totext=name),
+            Dictionary(
+                # title=_('Settings'),
+                elements=[
+                    ('upper',
+                     Tuple(
+                         title='Upper Levels',
+                         orientation='horizontal',
+                         elements=[
+                             Integer(title='Warning at'),
+                             Integer(title='Critical at'),
+                         ])),
+                    ('lower',
+                     Tuple(
+                         title='Lower Levels',
+                         orientation='horizontal',
+                         elements=[
+                             Integer(title='Warning below', unit='count'),
+                             Integer(title='Critical below', unit='count'),
+                         ])),
+                    ('info_line',
+                     FixedValue(False, title='Show on info line', totext='yes')
+                     )
+                ],
+            )])
+
+
+def _parameter_valuespec_freeradius_queue():
+    return Dictionary(
+        title=_('FreeRADIUS queue'),
+        optional_keys=True,
+        elements=[
+            _list_attributes,
+            _attributes(_FreeRADIUS_Queue, 'Queue'),
+        ],
+        required_keys=['attributes']
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithoutItem(
+        title=lambda: _('FreeRADIUS queue'),
+        check_group_name='freeradius_queue',
+        group=RulespecGroupCheckParametersApplications,
+        parameter_valuespec=_parameter_valuespec_freeradius_queue,
+        match_type='dict',
+    )
+)
+
+_FreeRADIUS_Total_Access_Requests = 'FreeRADIUS-Total-Access-Requests'
+_FreeRADIUS_Total_Access_Accepts = 'FreeRADIUS-Total-Access-Accepts'
+_FreeRADIUS_Total_Access_Rejects = 'FreeRADIUS-Total-Access-Rejects'
+_FreeRADIUS_Total_Access_Challenges = 'FreeRADIUS-Total-Access-Challenges'
+_FreeRADIUS_Total_Auth_Responses = 'FreeRADIUS-Total-Auth-Responses'
+_FreeRADIUS_Total_Auth_Duplicate_Requests = 'FreeRADIUS-Total-Auth-Duplicate-Requests'
+_FreeRADIUS_Total_Auth_Malformed_Requests = 'FreeRADIUS-Total-Auth-Malformed-Requests'
+_FreeRADIUS_Total_Auth_Invalid_Requests = 'FreeRADIUS-Total-Auth-Invalid-Requests'
+_FreeRADIUS_Total_Auth_Dropped_Requests = 'FreeRADIUS-Total-Auth-Dropped-Requests'
+_FreeRADIUS_Total_Auth_Unknown_Types = 'FreeRADIUS-Total-Auth-Unknown-Types'
+_FreeRADIUS_Total_Auth_Conflicts = 'FreeRADIUS-Total-Auth-Conflicts'
+
+_FreeRADIUS_Total_Authentication = [
+    (_FreeRADIUS_Total_Access_Accepts, _Accepts),
+    (_FreeRADIUS_Total_Access_Challenges, _Challenges),
+    (_FreeRADIUS_Total_Auth_Conflicts, _Conflicts),
+    (_FreeRADIUS_Total_Auth_Dropped_Requests, _Dropped),
+    (_FreeRADIUS_Total_Auth_Duplicate_Requests, _Duplicate),
+    (_FreeRADIUS_Total_Auth_Invalid_Requests, _Invalid),
+    (_FreeRADIUS_Total_Auth_Malformed_Requests, _Malformed),
+    (_FreeRADIUS_Total_Access_Rejects, _Rejects),
+    (_FreeRADIUS_Total_Access_Requests, _Requests),
+    (_FreeRADIUS_Total_Auth_Responses, _Responses),
+    (_FreeRADIUS_Total_Auth_Unknown_Types, _Unknown_Types),
+]
+
+
+def _parameter_valuespec_freeradius_total_authentication():
+    return Dictionary(
+        title=_('FreeRADIUS authentication'),
+        optional_keys=True,
+        elements=[
+            _list_attributes,
+            _attributes(_FreeRADIUS_Total_Authentication, 'Authentication'),
+        ],
+        required_keys=['attributes']
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithoutItem(
+        title=lambda: _('FreeRADIUS authentication'),
+        check_group_name='freeradius_total_authentication',
+        group=RulespecGroupCheckParametersApplications,
+        parameter_valuespec=_parameter_valuespec_freeradius_total_authentication,
+        match_type='dict',
+    )
+)
+
+# Accounting attributes
+_FreeRADIUS_Total_Accounting_Requests = 'FreeRADIUS-Total-Accounting-Requests'
+_FreeRADIUS_Total_Accounting_Responses = 'FreeRADIUS-Total-Accounting-Responses'
+_FreeRADIUS_Total_Acct_Duplicate_Requests = 'FreeRADIUS-Total-Acct_Duplicate-Requests'
+_FreeRADIUS_Total_Acct_Malformed_Requests = 'FreeRADIUS-Total-Acct-Malformed-Requests'
+_FreeRADIUS_Total_Acct_Invalid_Requests = 'FreeRADIUS-Total-Acct-Invalid-Requests'
+_FreeRADIUS_Total_Acct_Dropped_Requests = 'FreeRADIUS-Total-Acct-Dropped-Requests'
+_FreeRADIUS_Total_Acct_Unknown_Types = 'FreeRADIUS-Total-Acct-Unknown-Types'
+_FreeRADIUS_Total_Acct_Conflicts = 'FreeRADIUS-Total-Acct-Conflicts'
+
+_FreeRADIUS_Total_Accounting = [
+    (_FreeRADIUS_Total_Accounting_Requests, _Requests),
+    (_FreeRADIUS_Total_Accounting_Responses, _Responses),
+    (_FreeRADIUS_Total_Acct_Duplicate_Requests, _Duplicate),
+    (_FreeRADIUS_Total_Acct_Malformed_Requests, _Malformed),
+    (_FreeRADIUS_Total_Acct_Invalid_Requests, _Invalid),
+    (_FreeRADIUS_Total_Acct_Dropped_Requests, _Dropped),
+    (_FreeRADIUS_Total_Acct_Unknown_Types, _Unknown_Types),
+    (_FreeRADIUS_Total_Acct_Conflicts, _Conflicts),
+]
+
+
+def _parameter_valuespec_freeradius_total_accounting():
+    return Dictionary(
+        title=_('FreeRADIUS accounting'),
+        optional_keys=True,
+        elements=[
+            _list_attributes,
+            _attributes(_FreeRADIUS_Total_Accounting, 'Accounting'),
+        ],
+        required_keys=['attributes']
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithoutItem(
+        title=lambda: _('FreeRADIUS acconting'),
+        check_group_name='freeradius_total_accounting',
+        group=RulespecGroupCheckParametersApplications,
+        parameter_valuespec=_parameter_valuespec_freeradius_total_accounting,
+        match_type='dict',
+    )
+)
+
+# Proxy-Authentication
+_FreeRADIUS_Total_Proxy_Access_Requests = 'FreeRADIUS-Total-Proxy-Access-Requests'
+_FreeRADIUS_Total_Proxy_Access_Accepts = 'FreeRADIUS-Total-Proxy-Access-Accepts'
+_FreeRADIUS_Total_Proxy_Access_Rejects = 'FreeRADIUS-Total-Proxy-Access-Rejects'
+_FreeRADIUS_Total_Proxy_Access_Challenges = 'FreeRADIUS-Total-Proxy-Access-Challenges'
+_FreeRADIUS_Total_Proxy_Auth_Responses = 'FreeRADIUS-Total-Proxy-Auth-Responses'
+_FreeRADIUS_Total_Proxy_Auth_Duplicate_Requests = 'FreeRADIUS-Total-Proxy-Auth-Duplicate-Requests'
+_FreeRADIUS_Total_Proxy_Auth_Malformed_Requests = 'FreeRADIUS-Total-Proxy-Auth-Malformed-Requests'
+_FreeRADIUS_Total_Proxy_Auth_Invalid_Requests = 'FreeRADIUS-Total-Proxy-Auth-Invalid-Requests'
+_FreeRADIUS_Total_Proxy_Auth_Dropped_Requests = 'FreeRADIUS-Total-Proxy-Auth-Dropped-Requests'
+_FreeRADIUS_Total_Proxy_Auth_Unknown_Types = 'FreeRADIUS-Total-Proxy-Auth-Unknown-Types'
+
+_FreeRADIUS_Total_Proxy_Authentication = [
+    (_FreeRADIUS_Total_Proxy_Access_Accepts, _Accepts),
+    (_FreeRADIUS_Total_Proxy_Access_Challenges, _Challenges),
+    (_FreeRADIUS_Total_Proxy_Auth_Dropped_Requests, _Dropped),
+    (_FreeRADIUS_Total_Proxy_Auth_Duplicate_Requests, _Duplicate),
+    (_FreeRADIUS_Total_Proxy_Auth_Invalid_Requests, _Invalid),
+    (_FreeRADIUS_Total_Proxy_Auth_Malformed_Requests, _Malformed),
+    (_FreeRADIUS_Total_Proxy_Access_Rejects, _Rejects),
+    (_FreeRADIUS_Total_Proxy_Access_Requests, _Requests),
+    (_FreeRADIUS_Total_Proxy_Auth_Responses, _Responses),
+    (_FreeRADIUS_Total_Proxy_Auth_Unknown_Types, _Unknown_Types),
+]
+
+
+def _parameter_valuespec_freeradius_total_proxy_authentication():
+    return Dictionary(
+        title=_('FreeRADIUS proxy authentication'),
+        optional_keys=True,
+        elements=[
+            _list_attributes,
+            _attributes(_FreeRADIUS_Total_Proxy_Authentication, 'Proxy Authentication'),
+        ],
+        required_keys=['attributes']
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithoutItem(
+        title=lambda: _('FreeRADIUS proxy authentication'),
+        check_group_name='freeradius_total_proxy_authentication',
+        group=RulespecGroupCheckParametersApplications,
+        parameter_valuespec=_parameter_valuespec_freeradius_total_proxy_authentication,
+        match_type='dict',
+    )
+)
+
+# Proxy-Accounting
+_FreeRADIUS_Total_Proxy_Accounting_Requests = 'FreeRADIUS-Total-Proxy-Accounting-Requests'
+_FreeRADIUS_Total_Proxy_Accounting_Responses = 'FreeRADIUS-Total-Proxy-Accounting-Responses'
+_FreeRADIUS_Total_Proxy_Acct_Duplicate_Requests = 'FreeRADIUS-Total-Proxy-Acct-Duplicate-Requests'
+_FreeRADIUS_Total_Proxy_Acct_Malformed_Requests = 'FreeRADIUS-Total-Proxy-Acct-Malformed-Requests'
+_FreeRADIUS_Total_Proxy_Acct_Invalid_Requests = 'FreeRADIUS-Total-Proxy-Acct-Invalid-Requests'
+_FreeRADIUS_Total_Proxy_Acct_Dropped_Requests = 'FreeRADIUS-Total-Proxy-Acct-Dropped-Requests'
+_FreeRADIUS_Total_Proxy_Acct_Unknown_Types = 'FreeRADIUS-Total-Proxy-Acct-Unknown-Types'
+
+_FreeRADIUS_Total_Proxy_Accounting = [
+    (_FreeRADIUS_Total_Proxy_Acct_Dropped_Requests, _Dropped),
+    (_FreeRADIUS_Total_Proxy_Acct_Duplicate_Requests, _Duplicate),
+    (_FreeRADIUS_Total_Proxy_Acct_Invalid_Requests, _Invalid),
+    (_FreeRADIUS_Total_Proxy_Acct_Malformed_Requests, _Malformed),
+    (_FreeRADIUS_Total_Proxy_Accounting_Requests, _Requests),
+    (_FreeRADIUS_Total_Proxy_Accounting_Responses, _Responses),
+    (_FreeRADIUS_Total_Proxy_Acct_Unknown_Types, _Unknown_Types),
+]
+
+
+def _parameter_valuespec_freeradius_total_proxy_accounting():
+    return Dictionary(
+        title=_('FreeRADIUS proxy accounting'),
+        optional_keys=True,
+        elements=[
+            _list_attributes,
+            _attributes(_FreeRADIUS_Total_Proxy_Accounting, 'Proxy Accounting'),
+        ],
+        required_keys=['attributes']
+    )
+
+
+rulespec_registry.register(
+    CheckParameterRulespecWithoutItem(
+        title=lambda: _('FreeRADIUS proxy accounting'),
+        check_group_name='freeradius_total_proxy_accounting',
+        group=RulespecGroupCheckParametersApplications,
+        parameter_valuespec=_parameter_valuespec_freeradius_total_proxy_accounting,
+        match_type='dict',
+    )
+)
diff --git a/source/lib/python3/cmk/special_agents/agent_freeradius.py b/source/lib/python3/cmk/special_agents/agent_freeradius.py
index cfdda6f76b9dd4e1ebace1204e263b8506dd5116..3540153bbb224d8291ce6aa7c8bcd6fed476100c 100644
--- a/source/lib/python3/cmk/special_agents/agent_freeradius.py
+++ b/source/lib/python3/cmk/special_agents/agent_freeradius.py
@@ -32,13 +32,10 @@
 
 import socket
 import pyrad.client
-from argparse import (
-    Namespace,
-)
+from argparse import Namespace
 from collections.abc import Mapping, Sequence
 from json import dumps as json_dumps
 from os import environ
-from time import time_ns
 from sys import (
     exit as sys_exit,
     stdout as sys_stdout,
diff --git a/source/packages/freeradius b/source/packages/freeradius
index debc22d7fd924d21a6a7c2682f9fc944e85303ec..9a34140d581540cb0ec9f467383715ef51728dad 100644
--- a/source/packages/freeradius
+++ b/source/packages/freeradius
@@ -13,14 +13,15 @@
  'files': {'agent_based': ['freeradius.py'],
            'agents': ['special/agent_freeradius'],
            'checks': ['agent_freeradius'],
-           'gui': ['metrics/freeradius.py'],
+           'gui': ['metrics/freeradius.py',
+                   'wato/check_parameters/freeradius.py'],
            'lib': ['python3/cmk/special_agents/agent_freeradius.py',
                    'python3/cmk/special_agents/dictionary',
                    'python3/cmk/special_agents/dictionary.freeradius'],
            'web': ['plugins/wato/agent_freeradiusi.py']},
  'name': 'freeradius',
  'title': 'FreeRADIUS special agent',
- 'version': '0.1.1-20240430',
+ 'version': '0.1.2-20240501',
  'version.min_required': '2.2.0b1',
  'version.packaged': '2.2.0p24',
  'version.usable_until': '2.3.0b1'}