diff --git a/src/components/Article.vue b/src/components/Article.vue
index 22af1d5738b48521c8306731522133fc2fa44971..58b5da6e9c31901d4c92dba5662ebbe386011d5e 100644
--- a/src/components/Article.vue
+++ b/src/components/Article.vue
@@ -87,10 +87,10 @@ export default {
       return this.article.dictionary
     },
     def_label: function() {
-      return this.dictionary == 'bm' ? 'Betydning og bruk' : 'Tyding og bruk'
+      return this.dictionary == 'bob' ? 'Betydning og bruk' : 'Tyding og bruk'
     },
     example_label: function() {
-      return this.dictionary == 'bm' ? 'Eksempel' : 'Døme'
+      return this.dictionary == 'bob' ? 'Eksempel' : 'Døme'
     },
     sub_articles: function() {
       return this.article.body.definitions.reduce((acc, val) => acc.concat(find_sub_articles(val)), []).sort((s1, s2) => s1.lemmas[0].localeCompare(s2.lemmas[0]))
diff --git a/src/components/ArticleFooter.vue b/src/components/ArticleFooter.vue
index 42809f683c065381a4224f511fb0eaa735413200..6d5beb55343fef6b90086d946a7a62882c1ad5e2 100644
--- a/src/components/ArticleFooter.vue
+++ b/src/components/ArticleFooter.vue
@@ -38,8 +38,8 @@ export default {
     computed: {
       dict_label: function() { // TODO: reuse code used in header
       return {
-        'bm': 'Fra bokmålsordboka',
-        'nn': 'Frå nynorskordboka'
+        'bob': 'Fra bokmålsordboka',
+        'nob': 'Frå nynorskordboka'
       }[this.article.dictionary] + ': ' + this.article.lemmas[0].lemma || ''
     },
     webShareApiSupported() {
diff --git a/src/components/Autocomplete.vue b/src/components/Autocomplete.vue
index fbabe1bfc33ec9dc71ec86d012a68acbf93c5a4a..20dc33a53146100766b00bfd655dc53f7a6aa7c1 100644
--- a/src/components/Autocomplete.vue
+++ b/src/components/Autocomplete.vue
@@ -31,10 +31,7 @@
       <span class="search-hit">
         {{data.item.label}}
       </span>
-        <span v-if="(get_lang()=='bm,nn')">
-            ({{{"b": "bm", "n": "nn", "bn": "bm, nn" }[data.item.lang] || 
-            ["søker...","ingen treff","avansert søk"][data.item.search]}})
-        </span>
+        <span v-if="get_lang()=='bob,nob'">({{{"b": "bm", "n": "nn", "bn": "bm, nn" }[data.item.lang] || ["søker...","ingen treff","avansert søk"][data.item.search]}})</span>
       </template>
       <template slot="no-data">
         <div></div>
diff --git a/src/components/DictionaryView.vue b/src/components/DictionaryView.vue
index 9d71d86cefd3b5cae7a1d2f7cf6b00781b8c9a99..b8d07ce23f8fbcd467bff0a6fc6c1f5d22986d7f 100644
--- a/src/components/DictionaryView.vue
+++ b/src/components/DictionaryView.vue
@@ -6,21 +6,21 @@
           <template v-slot:label tabindex="1">
             <span aria-label="Vis resultat i begge ordbøkene eller bruk radioknapp for bokmålsordboka eller radioknapp for nynorskordboka">VIS</span>
           </template>
-          <v-radio value="bm,nn" color="primary">
+          <v-radio value="bob,nob" color="primary">
             <template v-slot:label>
               <span>
                 begge{{$vuetify.breakpoint.smAndDown ? '' : ' ordbøkene'}}
               </span>
             </template>
           </v-radio>
-          <v-radio value="bm" color="primary">
+          <v-radio value="bob" color="primary">
             <template v-slot:label>
               <span>
                 {{$vuetify.breakpoint.xs ? 'bm' :  'bokmål (bm)'}}
               </span>
             </template>
           </v-radio>
-          <v-radio value="nn" color="primary">
+          <v-radio value="nob" color="primary">
             <template v-slot:label>
               <span>
                 {{$vuetify.breakpoint.xs ? 'nn' :  'nynorsk (nn)'}}
@@ -44,7 +44,7 @@
     <div id="single_article_container" v-if="article">
         <div class="return_to_results" v-if="search_results && search_results.length">
           <router-link :to="article.source" @click.native="return_to_results()">
-            <v-icon class="nav_arrow">arrow_left</v-icon>Tilbake til {{article.dictionary == 'bm' ? 'søkeresultater' : 'søkjeresultat'}}
+            <v-icon class="nav_arrow">arrow_left</v-icon>Tilbake til {{article.dictionary == 'bob' ? 'søkeresultater' : 'søkjeresultat'}}
           </router-link>
         </div>
       <Article :key="article_key" :article="article" @article-click="article_link_click" />
@@ -79,9 +79,9 @@ import { setup } from 'axios-cache-adapter'
 const SEARCH_ENDPOINT = process.env.VUE_APP_SEARCH_ENDPOINT
 const ARTICLE_ENDPOINT= process.env.VUE_APP_ARTICLE_ENDPOINT
 
-const dicts = {'nn': 'Nynorskorboka',
-               'bm': 'Bokmålsordboka',
-               'bm,nn': 'ordbøkene'}
+const dicts = {'nob': 'Nynorskorboka',
+               'bob': 'Bokmålsordboka',
+               'bob,nob': 'ordbøkene'}
 
 const api = setup({
   baseURL: SEARCH_ENDPOINT,
@@ -105,15 +105,9 @@ function navigate_to_article(self, source) {
   if ((self.$route.query.nocache || '').toLowerCase() == 'true') {
     config.headers.cachebuster = Date.now()
   }*/
-
-  // Map bob and nob to bm and nn
-  const lang = {"bob,nob": "bm,nn",
-                "bob": "bm",
-                "nob": "nn"}[self.$route.params.lang] || self.$route.params.lang
-
-  axios.get(ARTICLE_ENDPOINT + lang + '/article/' + self.$route.params.id + ".json")
+  axios.get(ARTICLE_ENDPOINT + self.$route.params.lang + '/article/' + self.$route.params.id + ".json")
   .then(function(response){
-    self.article = Object.assign(response.data, {'dictionary': lang, results: self.search_results})
+    self.article = Object.assign(response.data, {'dictionary': self.$route.params.lang, results: self.search_results})
     self.search_results = []
     self.error = null
   })
@@ -122,8 +116,8 @@ function navigate_to_article(self, source) {
       self.error = ["Vi har ingen artikkel med id " + self.$route.params.id]
     } else {
       self.error = []
-      if (self.lang !== 'bm') self.error.push(`Noko gjekk gale...`)
-      if (self.lang !== 'nn') self.error.push(`Noe gikk galt...`)
+      if (self.lang !== 'bob') self.error.push(`Noko gjekk gale...`)
+      if (self.lang !== 'nob') self.error.push(`Noe gikk galt...`)
     }
   })
   .then(function(response){
@@ -193,18 +187,18 @@ function navigate_to_query(self, word) {
               if (! self.search_results.length) {
                 if (query.match) {
                   self.error = []
-                  if (self.lang !== 'bm') {
+                  if (self.lang !== 'bob') {
                     self.error.push(`Ordet «${query.match}» finst ikkje i Nynorskordboka. Bruk knappen «bokmål (bm)» om du har søkt i feil ordbok.`)
                   }
-                  if (self.lang !== 'nn') self.error.push(`Ordet «${query.match}» finnes ikke i Bokmålsordboka. Bruk knappen «nynorsk (nn)» om du har søkt i feil ordbok.`)
+                  if (self.lang !== 'nob') self.error.push(`Ordet «${query.match}» finnes ikke i Bokmålsordboka. Bruk knappen «nynorsk (nn)» om du har søkt i feil ordbok.`)
                 } else {
                   self.error = [`Søk på «${query.q}» gir ingen treff i ${dicts[self.lang]}.`]
 
                   // If not advanced search
                   if (query.search != 2) self.error[0] += " Søk med * eller % dersom du er usikker på skrivemåten. Søketips kan du finne i «OM ORDBØKENE»."
 
-                  if (self.lang == "bm") self.error[0] += ` Bruk knappen «nynorsk (nn)» om du har søkt i feil ordbok.`
-                  if (self.lang == "nn") self.error[0] += ` Bruk knappen «bokmål (bm)» om du har søkt i feil ordbok.`
+                  if (self.lang == "bob") self.error[0] += ` Bruk knappen «nynorsk (nn)» om du har søkt i feil ordbok.`
+                  if (self.lang == "nob") self.error[0] += ` Bruk knappen «bokmål (bm)» om du har søkt i feil ordbok.`
                 }
 
               }
@@ -230,24 +224,13 @@ function navigate_to_query(self, word) {
         })
 }
 
-function map_language(lang) {
-  if (lang) {
-    return {"bob,nob":"bm,nn",
-            "bob": "bm",
-            "nob": "nn"}[lang] || lang
-  } else {
-    return 'bm,nn'
-  }
-
-}
-
 export default {
   name: 'DictionaryView',
   data: function() {
     return {
       article_key: 0,
       search_results: [],
-      lang: 'bm,nn',
+      lang: 'bob,nob',
       waiting_for_articles: true,
       waiting_for_metadata: true,
       article: null,
@@ -275,12 +258,12 @@ export default {
       this.search_results = []
       if (error.response) {
         this.error = []
-        if (this.lang !== 'bm') this.error.push(`Noko gjekk gale på serversida`)
-        if (this.lang !== 'nn') this.error.push(`Noe gikk galt på serversiden"`)
+        if (this.lang !== 'bob') this.error.push(`Noko gjekk gale på serversida`)
+        if (this.lang !== 'nob') this.error.push(`Noe gikk galt på serversiden"`)
       } else {
         this.error = []
-        if (this.lang !== 'bm') this.error.push(`Nettverksproblem, prøv igjen`)
-        if (this.lang !== 'nn') this.error.push(`Nettverksproblemer, prøv igjen`)
+        if (this.lang !== 'bob') this.error.push(`Nettverksproblem, prøv igjen`)
+        if (this.lang !== 'nob') this.error.push(`Nettverksproblemer, prøv igjen`)
       }
     },
     select_result: function (event) {
@@ -333,48 +316,48 @@ export default {
   },
   mounted: function(){
     let self = this
-    this.lang = 'bm,nn'
+    this.lang = 'bob,nob'
+
     Promise.all([
-      axios.get(ARTICLE_ENDPOINT + 'bm/concepts.json').then(function(response){
+      axios.get(ARTICLE_ENDPOINT + 'bob/concepts.json').then(function(response){
         let concepts = response.data.concepts
-        entities.bm = concepts
+        entities.bob = concepts
       }),
-      axios.get(ARTICLE_ENDPOINT + 'nn/concepts.json').then(function(response){
+      axios.get(ARTICLE_ENDPOINT + 'nob/concepts.json').then(function(response){
         let concepts = response.data.concepts
-        entities.nn = concepts
+        entities.nob = concepts
       })
     ]).then(function(_) {
       self.waiting_for_metadata = false
       if(self.$route.name == 'search') {
-        self.lang = map_language(self.$route.params.lang)
-        map_language(self.$route.params.lang)
+        self.lang = self.$route.params.lang
         navigate_to_query(self, self.$route.params.query)
       } 
       else if(self.$route.name == 'word') {
-        self.lang = map_language(self.$route.params.lang)
+        self.lang = self.$route.params.lang
         navigate_to_query(self, self.$route.params.word)
       }
       else if(self.$route.name == 'lookup'){
         navigate_to_article(self, self.$route.path)
       }
       else {
-        self.lang = map_language(self.$route.params.lang)
+        self.lang = self.$route.params.lang || 'bob,nob'
         self.waiting_for_articles = false
         history.replaceState({article: self.article, search_results: self.search_results, lang: self.lang, error: self.error}, '')
       }
 
       // words of the month
-      axios.get(ARTICLE_ENDPOINT + 'bm/article/5607.json').then(function(response){
-        self.monthly_bm = Object.assign(response.data, {dictionary: 'bm'})
+      axios.get(ARTICLE_ENDPOINT + 'bob/article/5607.json').then(function(response){
+        self.monthly_bm = Object.assign(response.data, {dictionary: 'bob'})
       })
 
-      axios.get(ARTICLE_ENDPOINT + 'nn/article/78569.json').then(function(response){
-        self.monthly_nn = Object.assign(response.data, {dictionary: 'nn'})
+      axios.get(ARTICLE_ENDPOINT + 'nob/article/78569.json').then(function(response){
+        self.monthly_nn = Object.assign(response.data, {dictionary: 'nob'})
       })
     }).catch(function(_){
       self.error = []
-      if (self.lang !== 'bm') self.error.push(`Eit nettverksproblem hindra lasting av sida. Prøv å laste sida på nytt`)
-      if (self.lang !== 'nn') self.error.push(`Et nettverksproblem hindret lasting av siden. Prøv å laste siden på nytt`)
+      if (self.lang !== 'bob') self.error.push(`Eit nettverksproblem hindra lasting av sida. Prøv å laste sida på nytt`)
+      if (self.lang !== 'nob') self.error.push(`Et nettverksproblem hindret lasting av siden. Prøv å laste siden på nytt`)
       self.waiting_for_metadata = false
       self.waiting_for_articles = false
     })
@@ -448,11 +431,11 @@ div.monthly.sm, div.monthly.xs {
   flex-direction: column;
 }
 
-div.monthly article.bm .dict-label::before {
+div.monthly article.bob .dict-label::before {
   content: "fra ";
 }
 
-div.monthly article.nn .dict-label::before {
+div.monthly article.nob .dict-label::before {
   content: "frå ";
 }
 
diff --git a/src/components/Header.vue b/src/components/Header.vue
index 396964f9bf3d2811ea96352a893eafbc762e792b..528ca51700ed20426a292e366314a7ec8e98ce38 100644
--- a/src/components/Header.vue
+++ b/src/components/Header.vue
@@ -59,12 +59,12 @@ export default {
       return a_forms.join(', ')
     },
     inflect_tooltip: function() {
-      return this.dictionary == 'bm' ? 'Klikk for å se bøyinger' : 'Klikk for å sjå bøyingar'
+      return this.dictionary == 'bob' ? 'Klikk for å se bøyinger' : 'Klikk for å sjå bøyingar'
     },
     dict_label: function() {
       return {
-        'bm': 'bokmålsordboka',
-        'nn': 'nynorskordboka'
+        'bob': 'bokmålsordboka',
+        'nob': 'nynorskordboka'
       }[this.dictionary] || ''
     },
     group_list: function() {
@@ -84,7 +84,7 @@ export default {
       )
     },
     lemmas_with_word_class_and_lang: function() {
-      return this.lemmas.map(lemma => Object.assign({language: this.dictionary == 'bm' ? 'nob' : 'nno',
+      return this.lemmas.map(lemma => Object.assign({language: this.dictionary == 'bob' ? 'nob' : 'nno',
                                                      word_class: lemma.paradigm_info[0].inflection_group.split('_')[0]}, lemma))
     },
     inflected: function() {
@@ -191,15 +191,15 @@ article h2.secondary_header {
   margin-right: 3px;
 }
 
-.header details > summary.bm:before {
+.header details > summary.bob:before {
   content: "Se ";
 }
 
-.header details > summary.nn:before {
+.header details > summary.nob:before {
   content: "Sjå ";
 }
 
-.header details[open] > summary.bm:before, details[open] > summary.nn:before {
+.header details[open] > summary.bob:before, details[open] > summary.nob:before {
   content: "Skjul  ";
 }
 
diff --git a/src/components/SearchResults.vue b/src/components/SearchResults.vue
index 18b15f64fa832756942ef2ddaef79347509a55f1..7bc3d9b079d32a349e8b429b79c5865faeacd2df 100644
--- a/src/components/SearchResults.vue
+++ b/src/components/SearchResults.vue
@@ -1,8 +1,8 @@
 <template>
   <section id="search_results">
     <div class="flex-container" :class="$vuetify.breakpoint.name">
-      <ul class="hits" v-if="results_bm.length">
-        <li  class="article_container" v-for="(result, index) in results_bm" :key="index + results_hash" tabindex="-1">
+      <ul class="hits" v-if="results_bob.length">
+        <li  class="article_container" v-for="(result, index) in results_bob" :key="index + results_hash" tabindex="-1">
           <Article
               :article="result"
               @article-click="article_link_click"
@@ -10,8 +10,8 @@
           </Article>
         </li>
       </ul>
-      <ul class="hits" v-if="results_nn.length">
-        <li class="article_container" v-for="(result, index) in results_nn" :key="index + results_hash" tabindex="-1">
+      <ul class="hits" v-if="results_nob.length">
+        <li class="article_container" v-for="(result, index) in results_nob" :key="index + results_hash" tabindex="-1">
           <Article
               :article="result"
               @article-click="article_link_click"
@@ -36,17 +36,17 @@ export default {
   computed: {
     right_col_class_name: function() {
       if (this.$vuetify.breakpoint.mdAndUp) {
-        if (this.results_bm.length) {
+        if (this.results_bob.length) {
           return 'righ_hand_column'
         }
       }
       return ''
     },
-    results_bm: function(){
-      return this.hits.filter(hit => hit.dictionary == 'bm')
+    results_bob: function(){
+      return this.hits.filter(hit => hit.dictionary == 'bob')
     },
-    results_nn: function(){
-      return this.hits.filter(hit => hit.dictionary == 'nn')
+    results_nob: function(){
+      return this.hits.filter(hit => hit.dictionary == 'nob')
     },
     results_hash: function(){
       return this.hits.reduce((hash, hit) => (hash + hit.article_id) % 10000, 0)
diff --git a/src/utils/entities.js b/src/utils/entities.js
index b48438d98f430a4e1576a12eded0dcd75b9d004d..49f37797a00e2e2142efa136c6168cda23d06469 100644
--- a/src/utils/entities.js
+++ b/src/utils/entities.js
@@ -1,7 +1,7 @@
 var entities = {
-  'bm': {
+  'bob': {
   },
-  'nn': {
+  'nob': {
   }
 }
 
diff --git a/src/utils/helpers.js b/src/utils/helpers.js
index 61ef577cb9fde56aba29f108cd2376bcb8887dcb..ba5ce7a6e740b940ccf903ad9258544dbb76d862 100644
--- a/src/utils/helpers.js
+++ b/src/utils/helpers.js
@@ -1,5 +1,5 @@
 var mapping = {
-  "bm": {
+  "bob": {
     "NOUN": "substantiv",
     "VERB": "verb",
     "ADJ": "adjektiv",
@@ -21,7 +21,7 @@ var mapping = {
     "Neuter": "intetkjønn",
     "Uninfl": "ubøyelig"
   },
-  "nn": {
+  "nob": {
     "NOUN": "substantiv",
     "VERB": "verb",
     "ADJ": "adjektiv",