diff --git a/front/src/components/About.vue b/front/src/components/About.vue
index 16c58b173bb9d531dfb78c1de0854f60ac06dde1..90cfb76825f339fb760a42d12bb06fd7e0c50a48 100644
--- a/front/src/components/About.vue
+++ b/front/src/components/About.vue
@@ -27,9 +27,9 @@
         <p>{{ instance.short_description.value }}</p>
       </div>
       <div
-        v-if="instance.long_description.value"
+        v-if="markdown && instance.long_description.value"
         class="ui middle aligned stackable text container"
-        v-html="$options.filters.markdown(instance.long_description.value)">
+        v-html="markdown.makeHtml(instance.long_description.value)">
       </div>
     </section>
   </main>
@@ -43,8 +43,17 @@ export default {
   components: {
     Stats
   },
-  created() {
+  data () {
+    return {
+      markdown: null
+    }
+  },
+  created () {
     this.$store.dispatch("instance/fetchSettings")
+    let self = this
+    import('showdown').then(module => {
+      self.markdown = new module.default.Converter()
+    })
   },
   computed: {
     ...mapState({
diff --git a/front/src/components/Sidebar.vue b/front/src/components/Sidebar.vue
index d8029b1bd662ecd1ae75eb30e8e39530254a41e4..5fc0458c9e44c70dd19fba1d50a8674c1e89bbe3 100644
--- a/front/src/components/Sidebar.vue
+++ b/front/src/components/Sidebar.vue
@@ -206,10 +206,8 @@ export default {
     labels() {
       let mainMenu = this.$gettext("Main menu")
       let selectTrack = this.$gettext("Play this track")
-      let pendingRequests = this.$gettext("Pending import requests")
       let pendingFollows = this.$gettext("Pending follow requests")
       return {
-        pendingRequests,
         pendingFollows,
         mainMenu,
         selectTrack
diff --git a/front/src/components/discussion/Comment.vue b/front/src/components/discussion/Comment.vue
deleted file mode 100644
index ee9ce9b1f84c851b0024d243a740cb3807eee5ae..0000000000000000000000000000000000000000
--- a/front/src/components/discussion/Comment.vue
+++ /dev/null
@@ -1,53 +0,0 @@
-<template>
-  <div class="comment">
-    <div class="content">
-      <a class="author">{{ user.username }}</a>
-      <div class="metadata">
-        <div class="date"><human-date :date="date"></human-date></div>
-      </div>
-      <div class="text" v-html="comment"></div>
-      </div>
-      <div class="actions">
-        <span
-          @click="collapsed = false"
-          v-if="truncated && collapsed"
-          class="expand">
-          <translate>Expand</translate>
-        </span>
-        <span
-          @click="collapsed = true"
-          v-if="truncated && !collapsed"
-          class="collapse">
-          <translate>Collapse</translate>
-        </span>
-      </div>
-    </div>
-  </div>
-</template>
-<script>
-  export default {
-    props: {
-      user: {type: Object, required: true},
-      date: {required: true},
-      content: {type: String, required: true}
-    },
-    data () {
-      return {
-        collapsed: true,
-        length: 50
-      }
-    },
-    computed: {
-      comment () {
-        let text = this.content
-        if (this.collapsed) {
-          text = this.$options.filters.truncate(text, this.length)
-        }
-        return this.$options.filters.markdown(text)
-      },
-      truncated () {
-        return this.content.length > this.length
-      }
-    }
-  }
-</script>
diff --git a/front/src/components/requests/Card.vue b/front/src/components/requests/Card.vue
deleted file mode 100644
index 36bbc944e5a6c0d47b4527235f6df2f9259351a3..0000000000000000000000000000000000000000
--- a/front/src/components/requests/Card.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-<template>
-  <div :class="['ui', {collapsed: collapsed}, 'card']">
-    <div class="content">
-      <div class="header">{{ request.artist_name }}</div>
-      <div class="description">
-        <div
-          v-if="request.albums" v-html="$options.filters.markdown(request.albums)"></div>
-        <div class="ui comments">
-          <comment
-            :user="request.user"
-            :content="request.comment || ''"
-            :date="request.creation_date"></comment>
-        </div>
-      </div>
-    </div>
-    <div class="extra content">
-      <span >
-        <i v-if="request.status === 'pending'" class="hourglass start icon"></i>
-        <i v-if="request.status === 'accepted'" class="hourglass half icon"></i>
-        <i v-if="request.status === 'imported'" class="check icon"></i>
-        {{ request.status | capitalize }}
-      </span>
-      <button
-        @click="createImport"
-        v-if="request.status === 'pending' && importAction && $store.state.auth.availablePermissions['library']"
-        class="ui mini basic green right floated button"><translate>Create import</translate></button>
-
-    </div>
-  </div>
-</template>
-
-<script>
-import Comment from '@/components/discussion/Comment'
-
-export default {
-  props: {
-    request: {type: Object, required: true},
-    importAction: {type: Boolean, default: true}
-  },
-  components: {
-    Comment
-  },
-  data () {
-    return {
-      collapsed: true
-    }
-  },
-  methods: {
-    createImport () {
-      this.$router.push({
-        name: 'library.import.launch',
-        query: {request: this.request.id}})
-    }
-  }
-}
-</script>
-
-<!-- Add "scoped" attribute to limit CSS to this component only -->
-<style scoped>
-
-</style>
diff --git a/front/src/components/requests/Form.vue b/front/src/components/requests/Form.vue
deleted file mode 100644
index 667bd5f5acb7b7c6e0c0b00a3e5905d6f127f53c..0000000000000000000000000000000000000000
--- a/front/src/components/requests/Form.vue
+++ /dev/null
@@ -1,127 +0,0 @@
-<template>
-  <div>
-    <form v-if="!over" class="ui form" @submit.prevent="submit">
-      <p><translate>Something's missing in the library? Let us know what you would like to listen!</translate></p>
-      <div class="required field">
-        <label><translate>Artist name</translate></label>
-        <input v-model="currentArtistName" :placeholder="labels.artistNamePlaceholder" required maxlength="200">
-      </div>
-      <div class="field">
-        <label><translate>Albums</translate></label>
-        <p><translate>Leave this field empty if you're requesting the whole discography.</translate></p>
-        <input v-model="currentAlbums" :placeholder="labels.albumTitlePlaceholder" maxlength="2000">
-      </div>
-      <div class="field">
-        <label><translate>Comment</translate></label>
-        <textarea v-model="currentComment" rows="3" :placeholder="labels.commentPlaceholder" maxlength="2000"></textarea>
-      </div>
-      <button class="ui submit button" type="submit"><translate>Submit</translate></button>
-    </form>
-    <div v-else class="ui success message">
-      <div class="header"><translate>Request submitted!</translate></div>
-      <p><translate>We've received your request, you'll get some groove soon ;)</translate></p>
-      <button @click="reset" class="ui button"><translate>Submit another request</translate></button>
-    </div>
-    <div v-if="requests.length > 0">
-      <div class="ui divider"></div>
-      <h3 class="ui header"><translate>Pending requests</translate></h3>
-      <div class="ui list">
-        <div v-for="request in requests" class="item">
-          <div class="content">
-            <div class="header">{{ request.artist_name }}</div>
-            <div v-if="request.albums" class="description">
-              {{ request.albums|truncate }}</div>
-            <div v-if="request.comment" class="description">
-              {{ request.comment|truncate }}</div>
-          </div>
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import $ from 'jquery'
-import axios from 'axios'
-
-import logger from '@/logging'
-
-export default {
-  props: {
-    defaultArtistName: {type: String, default: ''},
-    defaultAlbums: {type: String, default: ''},
-    defaultComment: {type: String, default: ''}
-  },
-  created () {
-    this.fetchRequests()
-  },
-  mounted () {
-    $('.ui.radio.checkbox').checkbox()
-  },
-  data () {
-    return {
-      currentArtistName: this.defaultArtistName,
-      currentAlbums: this.defaultAlbums,
-      currentComment: this.defaultComment,
-      isLoading: false,
-      over: false,
-      requests: []
-    }
-  },
-  computed: {
-    labels () {
-      let artistNamePlaceholder = this.$gettext('The Beatles, Mickael Jackson…')
-      let albumTitlePlaceholder = this.$gettext('The White Album, Thriller…')
-      let commentPlaceholder = this.$gettext('Use this comment box to add details to your request if needed')
-      return {
-        artistNamePlaceholder,
-        albumTitlePlaceholder,
-        commentPlaceholder
-      }
-    }
-  },
-  methods: {
-    fetchRequests () {
-      let self = this
-      let url = 'requests/import-requests/'
-      axios.get(url, {}).then((response) => {
-        self.requests = response.data.results
-      })
-    },
-    submit () {
-      let self = this
-      this.isLoading = true
-      let url = 'requests/import-requests/'
-      let payload = {
-        artist_name: this.currentArtistName,
-        albums: this.currentAlbums,
-        comment: this.currentComment
-      }
-      axios.post(url, payload).then((response) => {
-        logger.default.info('Submitted request!')
-        self.isLoading = false
-        self.over = true
-        self.requests.unshift(response.data)
-      }, (response) => {
-        logger.default.error('error while submitting request')
-        self.isLoading = false
-      })
-    },
-    reset () {
-      this.over = false
-      this.currentArtistName = ''
-      this.currentAlbums = ''
-      this.currentComment = ''
-    },
-    truncate (string, length) {
-      if (string.length > length) {
-        return string.substring(0, length) + '…'
-      }
-      return string
-    }
-  }
-}
-</script>
-
-<style scoped>
-</style>
diff --git a/front/src/filters.js b/front/src/filters.js
index 878b3c9f2813756914afdbe62c8f4459768b61ac..97dd2d5ee3abf93929ca67df2f87dabe56478f1d 100644
--- a/front/src/filters.js
+++ b/front/src/filters.js
@@ -1,7 +1,6 @@
 import Vue from 'vue'
 
 import moment from 'moment'
-import showdown from 'showdown'
 
 export function truncate (str, max, ellipsis) {
   max = max || 100
@@ -14,13 +13,6 @@ export function truncate (str, max, ellipsis) {
 
 Vue.filter('truncate', truncate)
 
-export function markdown (str) {
-  const converter = new showdown.Converter()
-  return converter.makeHtml(str)
-}
-
-Vue.filter('markdown', markdown)
-
 export function ago (date) {
   const m = moment(date)
   return m.fromNow()
diff --git a/front/tests/unit/specs/filters/filters.spec.js b/front/tests/unit/specs/filters/filters.spec.js
index 8ee6b4b710bfe6ce5727a3f8797588551516a227..1464e5c971215df16b7e11848a52af0bf74d62e5 100644
--- a/front/tests/unit/specs/filters/filters.spec.js
+++ b/front/tests/unit/specs/filters/filters.spec.js
@@ -1,6 +1,6 @@
 import {expect} from 'chai'
 
-import {truncate, markdown, ago, capitalize, year} from '@/filters'
+import {truncate, ago, capitalize, year} from '@/filters'
 
 describe('filters', () => {
   describe('truncate', () => {
@@ -20,13 +20,6 @@ describe('filters', () => {
       expect(output).to.equal('Hello pouet')
     })
   })
-  describe('markdown', () => {
-    it('renders markdown', () => {
-      const input = 'Hello world'
-      let output = markdown(input)
-      expect(output).to.equal('<p>Hello world</p>')
-    })
-  })
   describe('ago', () => {
     it('works', () => {
       const input = new Date()