diff --git a/src/store/modules/normalizers.js b/src/store/modules/normalizers.js
index e647a4a78dc4a0d08900551554aa35b5f1d3dd71..ed0d04b84021c7951b2ae4a662e9e0661cb0aa73 100644
--- a/src/store/modules/normalizers.js
+++ b/src/store/modules/normalizers.js
@@ -57,10 +57,18 @@ export const parseNonTuples = (key, value) => {
 // REFACTOR
 export const parseTuples = (tuples, key) => {
   return tuples.reduce((accum, item) => {
-    if (key === ':rate_limit') {
-      accum[item.tuple[0]] = Array.isArray(item.tuple[1])
-        ? item.tuple[1].map(el => el.tuple)
-        : item.tuple[1].tuple
+    if (key === ':rate_limit' ||
+      (key === 'Pleroma.Web.Endpoint.MetricsExporter' && item.tuple[0] === ':auth')) {
+      const getValue = () => {
+        if (typeof item.tuple[1] === 'boolean') {
+          return item.tuple[1]
+        } else if (Array.isArray(item.tuple[1])) {
+          return item.tuple[1].map(el => el.tuple)
+        } else {
+          return item.tuple[1].tuple
+        }
+      }
+      accum[item.tuple[0]] = getValue()
     } else if (item.tuple[0] === ':mascots') {
       accum[item.tuple[0]] = item.tuple[1].reduce((acc, mascot) => {
         return [...acc, { [mascot.tuple[0]]: { ...mascot.tuple[1], id: `f${(~~(Math.random() * 1e8)).toString(16)}` }}]
@@ -237,8 +245,9 @@ const wrapValues = (settings, currentState) => {
       return { 'tuple': [setting, wrapValues(value, currentState)] }
     } else if (prependWithСolon(type, value)) {
       return { 'tuple': [setting, `:${value}`] }
-    } else if (type.includes('tuple') && (type.includes('string') || type.includes('atom'))) {
-      return typeof value === 'string'
+    } else if (type.includes('tuple') &&
+      (type.includes('string') || type.includes('atom') || type.includes('boolean'))) {
+      return typeof value === 'string' || typeof value === 'boolean'
         ? { 'tuple': [setting, value] }
         : { 'tuple': [setting, { 'tuple': value }] }
     } else if (type === 'reversed_tuple') {
diff --git a/src/views/settings/components/inputComponents/BooleanCombinedInput.vue b/src/views/settings/components/inputComponents/BooleanCombinedInput.vue
index 7f7e9d902b7c6d4083fb8bf13faf91ed92e7f5f5..b7e90402e19b9658b2a0fbf9f3a49740fc726e11 100644
--- a/src/views/settings/components/inputComponents/BooleanCombinedInput.vue
+++ b/src/views/settings/components/inputComponents/BooleanCombinedInput.vue
@@ -1,28 +1,39 @@
 <template>
   <div>
     <div v-if="setting.type.includes('string')" :data-search="setting.key || setting.group">
-      <el-switch :value="autoLinkerBooleanValue" @change="processTwoTypeValue($event, setting.key)"/>
+      <el-switch :value="booleanValue" @change="processTwoTypeValue($event, setting.key)"/>
       <el-input
-        v-if="autoLinkerBooleanValue"
-        :value="autoLinkerStringValue"
+        v-if="booleanValue"
+        :value="stringValue"
         @input="processTwoTypeValue($event, setting.key)"/>
     </div>
     <div v-if="setting.type.includes('integer')" :data-search="setting.key || setting.group">
-      <el-switch :value="autoLinkerBooleanValue" @change="processTwoTypeValue($event, setting.key)"/>
+      <el-switch :value="booleanValue" @change="processTwoTypeValue($event, setting.key)"/>
       <el-input-number
-        v-if="autoLinkerBooleanValue"
-        :value="autoLinkerIntegerValue"
+        v-if="booleanValue"
+        :value="integerValue"
         @input="processTwoTypeValue($event, setting.key)"/>
     </div>
     <div v-if="setting.type.includes('atom')" :data-search="setting.key || setting.group">
-      <el-switch :value="autoLinkerBooleanValue" @change="processTwoTypeValue($event, setting.key)"/>
+      <el-switch :value="booleanValue" @change="processTwoTypeValue($event, setting.key)"/>
       <el-input
-        v-if="autoLinkerBooleanValue"
-        :value="autoLinkerAtomValue"
+        v-if="booleanValue"
+        :value="atomValue"
         @input="processTwoTypeValue($event, setting.key)">
         <template slot="prepend">:</template>
       </el-input>
     </div>
+    <div v-if="setting.type.includes('tuple')" :data-search="setting.key || setting.group">
+      <el-switch :value="booleanValue" @change="processTupleTwoTypeValue($event, setting.key)"/>
+      <div v-if="booleanValue" class="tuple-input-container">
+        <el-input
+          v-for="(item, index) in tupleValue"
+          :value="item"
+          :key="index"
+          class="tuple-input"
+          @input="processTupleTwoTypeValue($event, setting.key, index)"/>
+      </div>
+    </div>
   </div>
 </template>
 
@@ -50,24 +61,39 @@ export default {
     }
   },
   computed: {
-    autoLinkerAtomValue() {
+    atomValue() {
       return this.data[this.setting.key] &&
         this.data[this.setting.key][0] === ':' ? this.data[this.setting.key].substr(1) : this.data[this.setting.key]
     },
-    autoLinkerBooleanValue() {
+    booleanValue() {
       const value = this.data[this.setting.key]
-      return typeof value === 'string' || typeof value === 'number'
+      return typeof value !== 'boolean'
     },
-    autoLinkerIntegerValue() {
+    integerValue() {
       const value = this.data[this.setting.key]
       return value || 0
     },
-    autoLinkerStringValue() {
+    stringValue() {
       const value = this.data[this.setting.key]
       return value || ''
+    },
+    tupleValue() {
+      const value = this.data[this.setting.key]
+      return value || ['', '', '']
     }
   },
   methods: {
+    processTupleTwoTypeValue(value, input, _index) {
+      if (value === false) {
+        this.updateSetting(value, this.settingGroup.group, this.settingGroup.key, input, this.setting.type)
+      } else if (value === true) {
+        this.updateSetting(['', '', ''], this.settingGroup.group, this.settingGroup.key, input, this.setting.type)
+      } else {
+        const data = [...this.tupleValue]
+        data[_index] = value
+        this.updateSetting(data, this.settingGroup.group, this.settingGroup.key, input, this.setting.type)
+      }
+    },
     processTwoTypeValue(value, input) {
       if (value === true) {
         const data = input === ':truncate' ? 0 : ''
diff --git a/src/views/settings/styles/main.scss b/src/views/settings/styles/main.scss
index db55ac707aab9e54948b0e4b0aed6e19daa68c59..c55208ad22c33523707066a6970bede0b685e858 100644
--- a/src/views/settings/styles/main.scss
+++ b/src/views/settings/styles/main.scss
@@ -352,6 +352,15 @@
     line-height: 20px;
     margin-right: 15px
   }
+  .tuple-input {
+    margin-right: 15px;
+  }
+  .tuple-input:last-child {
+    margin-right: 0;
+  }
+  .tuple-input-container {
+    display: flex;
+  }
   .upload-container {
     display: flex;
     align-items: baseline;