diff --git a/local.json b/local.json
deleted file mode 100644
index e9f4df0b..00000000
--- a/local.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "target": "https://aqueous-sea-10253.herokuapp.com/",
-  "staticConfigPreference": false
-}
diff --git a/src/components/settings_modal/tabs/data_import_export_tab.js b/src/components/settings_modal/tabs/data_import_export_tab.js
index 168f89e1..f4b736d2 100644
--- a/src/components/settings_modal/tabs/data_import_export_tab.js
+++ b/src/components/settings_modal/tabs/data_import_export_tab.js
@@ -1,6 +1,7 @@
 import Importer from 'src/components/importer/importer.vue'
 import Exporter from 'src/components/exporter/exporter.vue'
 import Checkbox from 'src/components/checkbox/checkbox.vue'
+import { mapState } from 'vuex'
 
 const DataImportExportTab = {
   data () {
@@ -18,21 +19,26 @@ const DataImportExportTab = {
     Checkbox
   },
   computed: {
-    user () {
-      return this.$store.state.users.currentUser
-    }
+    ...mapState({
+      backendInteractor: (state) => state.api.backendInteractor,
+      user: (state) => state.users.currentUser
+    })
   },
   methods: {
     getFollowsContent () {
-      return this.$store.state.api.backendInteractor.exportFriends({ id: this.$store.state.users.currentUser.id })
+      return this.backendInteractor.exportFriends({ id: this.user.id })
         .then(this.generateExportableUsersContent)
     },
     getBlocksContent () {
-      return this.$store.state.api.backendInteractor.fetchBlocks()
+      return this.backendInteractor.fetchBlocks()
+        .then(this.generateExportableUsersContent)
+    },
+    getMutesContent () {
+      return this.backendInteractor.fetchMutes()
         .then(this.generateExportableUsersContent)
     },
     importFollows (file) {
-      return this.$store.state.api.backendInteractor.importFollows({ file })
+      return this.backendInteractor.importFollows({ file })
         .then((status) => {
           if (!status) {
             throw new Error('failed')
@@ -40,7 +46,15 @@ const DataImportExportTab = {
         })
     },
     importBlocks (file) {
-      return this.$store.state.api.backendInteractor.importBlocks({ file })
+      return this.backendInteractor.importBlocks({ file })
+        .then((status) => {
+          if (!status) {
+            throw new Error('failed')
+          }
+        })
+    },
+    importMutes (file) {
+      return this.backendInteractor.importMutes({ file })
         .then((status) => {
           if (!status) {
             throw new Error('failed')
diff --git a/src/components/settings_modal/tabs/data_import_export_tab.vue b/src/components/settings_modal/tabs/data_import_export_tab.vue
index b5d0f5ed..a406077d 100644
--- a/src/components/settings_modal/tabs/data_import_export_tab.vue
+++ b/src/components/settings_modal/tabs/data_import_export_tab.vue
@@ -36,6 +36,23 @@
         :export-button-label="$t('settings.block_export_button')"
       />
     </div>
+    <div class="setting-item">
+      <h2>{{ $t('settings.mute_import') }}</h2>
+      <p>{{ $t('settings.import_mutes_from_a_csv_file') }}</p>
+      <Importer
+        :submit-handler="importMutes"
+        :success-message="$t('settings.mutes_imported')"
+        :error-message="$t('settings.mute_import_error')"
+      />
+    </div>
+    <div class="setting-item">
+      <h2>{{ $t('settings.mute_export') }}</h2>
+      <Exporter
+        :get-content="getMutesContent"
+        filename="mutes.csv"
+        :export-button-label="$t('settings.mute_export_button')"
+      />
+    </div>
   </div>
 </template>
 
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 8540f551..cf0a7e7c 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -276,6 +276,12 @@
     "block_import": "Block import",
     "block_import_error": "Error importing blocks",
     "blocks_imported": "Blocks imported! Processing them will take a while.",
+    "mute_export": "Mute export",
+    "mute_export_button": "Export your mutes to a csv file",
+    "mute_import": "Mute import",
+    "mute_import_error": "Error importing mutes",
+    "mutes_imported": "Mutes imported! Processing them will take a while.",
+    "import_mutes_from_a_csv_file": "Import mutes from a csv file",
     "blocks_tab": "Blocks",
     "bot": "This is a bot account",
     "btnRadius": "Buttons",
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index da519001..34f86f93 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -3,6 +3,7 @@ import { parseStatus, parseUser, parseNotification, parseAttachment, parseChat,
 import { RegistrationError, StatusCodeError } from '../errors/errors'
 
 /* eslint-env browser */
+const MUTES_IMPORT_URL = '/api/pleroma/mutes_import'
 const BLOCKS_IMPORT_URL = '/api/pleroma/blocks_import'
 const FOLLOW_IMPORT_URL = '/api/pleroma/follow_import'
 const DELETE_ACCOUNT_URL = '/api/pleroma/delete_account'
@@ -710,6 +711,17 @@ const setMediaDescription = ({ id, description, credentials }) => {
   }).then((data) => parseAttachment(data))
 }
 
+const importMutes = ({ file, credentials }) => {
+  const formData = new FormData()
+  formData.append('list', file)
+  return fetch(MUTES_IMPORT_URL, {
+    body: formData,
+    method: 'POST',
+    headers: authHeaders(credentials)
+  })
+    .then((response) => response.ok)
+}
+
 const importBlocks = ({ file, credentials }) => {
   const formData = new FormData()
   formData.append('list', file)
@@ -1280,6 +1292,7 @@ const apiService = {
   getCaptcha,
   updateProfileImages,
   updateProfile,
+  importMutes,
   importBlocks,
   importFollows,
   deleteAccount,