diff --git a/README.md b/README.md
index 43e08783a8073cf9e51e440ff91dc6e5f50bebdb..55dfe00daea7ad7fea9c5ee9e659bfe6a570f30d 100644
--- a/README.md
+++ b/README.md
@@ -7,13 +7,13 @@ This django app is a toolbox to easily setup news in your projects.
  * easy custom fields
  * optional SEO fields
  * optional publication period
- * optional i18n support via hvad
+ * optional i18n support via parler
  * optional django-cms support
 
 ## Installation
 
 Add newsbox to your ``INSTALLED_APPS``. If you need newsbox_cms and/or 
-newsbox_hvad, add those too.
+newsbox_i18n, add those too.
 
 ## django integration
 
@@ -34,13 +34,13 @@ For basic news, you just have to inherit from NewsboxCMSBase :
         class Meta:
             newsbox_detail_url_name = "news_detail"  # optional
 
-You can create news with i18n via HVAD. Inherit first from NewsboxHVADBase, then
+You can create news with i18n via I18N. Inherit first from NewsboxI18NBase, then
 from NewsboxCMSBase :
 
     from newsbox_cms.models import NewsboxCMSBase
-    from newsbox_hvad.models import NewsboxHVADBase
+    from newsbox_i18n.models import NewsboxI18NBase
     
-    class News(NewsboxHVADBase, NewsboxCMSBase):
+    class News(NewsboxI18NBase, NewsboxCMSBase):
         
         class Meta:
             newsbox_detail_url_name = "news_detail"  # optional
diff --git a/newsbox/admin.py b/newsbox/admin.py
index 2f22edbafb0c58d0665792c234bb7819a2bd29dc..2e98d0b001fa685d878666141277faa0b85e18d2 100644
--- a/newsbox/admin.py
+++ b/newsbox/admin.py
@@ -1,6 +1,7 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 import copy
+import itertools
 
 from django.conf.urls import url, patterns
 from django.contrib import messages, admin
@@ -116,10 +117,11 @@ class NewsboxBaseAdmin(admin.ModelAdmin):
     actions = ['publish', 'unpublish']
     save_as = True
 
-    def __init__(self, *args, **kwargs):
-        # This is a workaround for prepopulated_fields with hvad
-        self.prepopulated_fields = {"newsbox_slug": ("newsbox_title",)}
-        super(NewsboxBaseAdmin, self).__init__(*args, **kwargs)
+    def get_prepopulated_fields(self, request, object=None):
+        prepopulated_fields = super(NewsboxBaseAdmin, self).get_prepopulated_fields(request, object)
+        prepopulated_fields = prepopulated_fields or {}
+        prepopulated_fields.update({"newsbox_slug": ("newsbox_title",)})
+        return prepopulated_fields
 
     def changestatus_link(self, obj):
         if obj.newsbox_published:
@@ -280,6 +282,33 @@ class NewsboxBaseAdmin(admin.ModelAdmin):
     unpublish.short_description = _(
         'Unpublish selected %(verbose_name_plural)s')
 
+    def ensure_slug_uniq_queryset(self, request, obj, slug):
+        queryset = type(obj).objects.all()
+        queryset = queryset.filter(newsbox_date__year=obj.newsbox_date.year)
+        queryset = queryset.filter(newsbox_date__month=obj.newsbox_date.month)
+        queryset = queryset.filter(newsbox_date__day=obj.newsbox_date.day)
+        queryset = queryset.filter(newsbox_slug=slug)
+        if obj.pk:
+            queryset = queryset.exclude(pk=obj.pk)
+        return queryset
+
+    def ensure_slug_uniq(self, request, obj):
+        max_length = 50
+
+        slug = obj.newsbox_slug
+        for x in itertools.count(1):
+            if not self.ensure_slug_uniq_queryset(request, obj, slug).count():
+                break
+            suffix = "-%d" % x
+            slug = "%s%s" % (obj.newsbox_slug[:max_length-len(suffix)], suffix)
+
+        obj.newsbox_slug = slug
+
+    def save_model(self, request, obj, form, change):
+        self.ensure_slug_uniq(request, obj)
+        return super(NewsboxBaseAdmin, self).save_model(request, obj, form, change)
+
+
 class NewsboxAdmin(NewsboxBaseAdmin):
     pass
 
@@ -317,7 +346,7 @@ class NewsboxExpiredAdmin(NewsboxBaseAdmin):
             css_class, title, output)
     newsbox_publication_dates_short.short_description = _('publication')
     newsbox_publication_dates_short.allow_tags = True
-        
+
     def get_fieldsets(self, request, obj=None):
         fieldsets = super(NewsboxExpiredAdmin, self).get_fieldsets(request, obj)
 
diff --git a/newsbox/models.py b/newsbox/models.py
index ce26d9d1cfe7b096e4203ff83dbbbfdd540f3e88..ae522dc9f57494e2c95aac915355b768df3046e0 100644
--- a/newsbox/models.py
+++ b/newsbox/models.py
@@ -21,7 +21,6 @@ def newsbox_mcls_processor(mcls, class_name, class_bases, class_attrs, base, new
     if 'newsbox_slug' not in class_attrs:
         class_attrs['newsbox_slug'] = models.SlugField(
             verbose_name=_('slug'),
-            unique_for_date='newsbox_date',
             help_text=_('The part of the title that is used in the URL'))
         newsbox_opts['trans_fieldnames'].append('newsbox_slug')
     if 'newsbox_summary' not in class_attrs:
@@ -78,7 +77,7 @@ class NewsboxModelBase(models.base.ModelBase):
         parents = [b for b in class_bases if isinstance(b, NewsboxModelBase) and
                 not (b.__name__ == 'NewBase' and b.__mro__ == (b, object))]
 
-        #retrieve newsbox options in Meta class and delete these from the 
+        #retrieve newsbox options in Meta class and delete these from the
         #Meta class to avoid django complain about unsupported keys.
         #We register our meta options in `_newsbox_meta`
         attr_meta = class_attrs.get('Meta', None)
@@ -87,9 +86,9 @@ class NewsboxModelBase(models.base.ModelBase):
         abstract = getattr(attr_meta, 'abstract', False)
         newsbox_opts = {}
         newsbox_opts_keys = [
-            'detail_url_name', 
-            'metaclass_base_processor', 
-            'metaclass_final_processor', 
+            'detail_url_name',
+            'metaclass_base_processor',
+            'metaclass_final_processor',
             'trans_fieldnames']
         for opt in newsbox_opts_keys:
             newsbox_opt = 'newsbox_' + opt
@@ -102,7 +101,7 @@ class NewsboxModelBase(models.base.ModelBase):
 
         # register newsbox_objects manager
         class_attrs['newsbox_objects'] = NewsboxManager()
-        
+
         #Call specific metaclass processor of all bases
         if not abstract :
             for base in class_bases:
diff --git a/newsbox_hvad/admin.py b/newsbox_hvad/admin.py
deleted file mode 100644
index 15817f07856961b5d54a22913fc9f9b5e2c4f930..0000000000000000000000000000000000000000
--- a/newsbox_hvad/admin.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-import copy
-
-from django.conf import settings
-from hvad.admin import TranslatableAdmin
-from hvad.forms import translatable_modelform_factory
-from django.utils.translation import ugettext_lazy as _
-try:
-    from django.contrib.admin.utils import flatten_fieldsets
-except ImportError:
-    # django < 1.7
-    from django.contrib.admin.util import flatten_fieldsets
-from django.utils.functional import curry
-
-
-def edit_translation_links(obj):
-    output = ''
-    for lang in obj.get_available_languages():
-        output += (
-            '<a href="./%s/?language=%s" '
-            'target="_parent" title="Edit this %s in %s">%s'
-            '</a>'
-        ) % (obj.pk, lang, obj._meta.verbose_name, lang.upper(), lang.upper(),)
-    return output
-edit_translation_links.allow_tags = True
-edit_translation_links.short_description = _('translations')
-
-
-
-class NewsboxHVADBaseAdmin(TranslatableAdmin):
-
-    #XXX: hvad TranslatableAdmin doesn't support search_fields
-    # search_fields = ['newsbox_title', 'newsbox_summary', ]
-    # date_hierarchy = 'newsbox_publication_start_date'
-
-    def get_list_display(self, request):
-        list_display = super(NewsboxHVADBaseAdmin, self).get_list_display(request)
-        # prevent modifying class list_display variable
-        list_display = copy.deepcopy(list_display)
-        if settings.LANGUAGES and len(settings.LANGUAGES) > 1:
-            list_display.insert(1, edit_translation_links)
-
-        return list_display
-
-    def get_form(self, request, obj=None, **kwargs):
-        """
-        This function is a workaround to an hvad issue. It doesn't use
-        get_fieldsets function.
-
-        Returns a Form class for use in the admin add view. This is used by
-        add_view and change_view.
-        """
-        fieldsets = self.get_fieldsets(request, obj)
-        if fieldsets:
-            fields = flatten_fieldsets(fieldsets)
-        else:
-            fields = None
-        if self.exclude is None:
-            exclude = []
-        else:
-            exclude = list(self.exclude)
-        exclude.extend(kwargs.get("exclude", []))
-        exclude.extend(self.get_readonly_fields(request, obj))
-        # Exclude language_code, adding it again to the instance is done by
-        # the LanguageAwareCleanMixin (see translatable_modelform_factory)
-        exclude.append('language_code')
-        old_formfield_callback = curry(self.formfield_for_dbfield,
-                                       request=request)
-        defaults = {
-            "form": self.form,
-            "fields": fields,
-            "exclude": exclude,
-            "formfield_callback": old_formfield_callback,
-        }
-        defaults.update(kwargs)
-        language = self._language(request)
-        return translatable_modelform_factory(language, self.model, **defaults)
-
-
-class NewsboxHVADAdmin(NewsboxHVADBaseAdmin):
-    pass
diff --git a/newsbox_hvad/views.py b/newsbox_hvad/views.py
deleted file mode 100644
index 5ebca8611754ecd01921f16a1ede02ecdebb5100..0000000000000000000000000000000000000000
--- a/newsbox_hvad/views.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from newsbox.views import NewsboxDetailView
-
-class NewsboxHVADDetailView(NewsboxDetailView):
-
-    def get_queryset(self):
-        """
-        As slug_field is translated, we need to use translation aware
-        queryset.
-        """
-        return self.model.objects.language()
diff --git a/newsbox_hvad/__init__.py b/newsbox_i18n/__init__.py
similarity index 100%
rename from newsbox_hvad/__init__.py
rename to newsbox_i18n/__init__.py
diff --git a/newsbox_i18n/admin.py b/newsbox_i18n/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..990137f71ffefa547d7b559b28d24aeb797ca062
--- /dev/null
+++ b/newsbox_i18n/admin.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+import copy
+
+from django.conf import settings
+from parler.admin import TranslatableAdmin
+from django.utils.translation import ugettext_lazy as _
+
+
+def edit_translation_links(obj):
+    output = ''
+    for lang in obj.get_available_languages():
+        output += (
+            '<a href="./%s/?language=%s" '
+            'target="_parent" title="Edit this %s in %s">%s'
+            '</a>'
+        ) % (obj.pk, lang, obj._meta.verbose_name, lang.upper(), lang.upper(),)
+    return output
+edit_translation_links.allow_tags = True
+edit_translation_links.short_description = _('translations')
+
+
+class NewsboxI18NBaseAdmin(TranslatableAdmin):
+
+    search_fields = ['newsbox__translation__title', 'newsbox__translation__summary', ]
+    date_hierarchy = 'newsbox_publication_start_date'
+
+    def get_list_display(self, request):
+        list_display = super(NewsboxI18NBaseAdmin, self).get_list_display(request)
+        # prevent modifying class list_display variable
+        list_display = copy.deepcopy(list_display)
+        if settings.LANGUAGES and len(settings.LANGUAGES) > 1:
+            list_display.insert(1, edit_translation_links)
+
+        return list_display
+
+    def ensure_slug_uniq_queryset(self, request, obj, slug):
+        language = self.get_form_language(request, obj)
+        queryset = type(obj).objects.all()
+        queryset = queryset.filter(newsbox_date__year=obj.newsbox_date.year)
+        queryset = queryset.filter(newsbox_date__month=obj.newsbox_date.month)
+        queryset = queryset.filter(newsbox_date__day=obj.newsbox_date.day)
+        queryset = queryset.translated(language, newsbox_slug=slug)
+        if obj.pk:
+            queryset = queryset.exclude(pk=obj.pk)
+        return queryset
+
+
+class NewsboxI18NAdmin(NewsboxI18NBaseAdmin):
+    pass
diff --git a/newsbox_hvad/locale/fr/LC_MESSAGES/django.mo b/newsbox_i18n/locale/fr/LC_MESSAGES/django.mo
similarity index 100%
rename from newsbox_hvad/locale/fr/LC_MESSAGES/django.mo
rename to newsbox_i18n/locale/fr/LC_MESSAGES/django.mo
diff --git a/newsbox_hvad/locale/fr/LC_MESSAGES/django.po b/newsbox_i18n/locale/fr/LC_MESSAGES/django.po
similarity index 100%
rename from newsbox_hvad/locale/fr/LC_MESSAGES/django.po
rename to newsbox_i18n/locale/fr/LC_MESSAGES/django.po
diff --git a/newsbox_hvad/models.py b/newsbox_i18n/models.py
similarity index 74%
rename from newsbox_hvad/models.py
rename to newsbox_i18n/models.py
index be469ce9f70b7636f848fd0208436920ef84d166..43a2c80594de226e3d531d16e4f70cf7661fee43 100644
--- a/newsbox_hvad/models.py
+++ b/newsbox_i18n/models.py
@@ -1,45 +1,42 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
-import sys
 
-from django.db import models
 from django.core.urlresolvers import reverse
 from django.utils.translation import ugettext_lazy as _,  get_language, activate
 from django.utils import six
 from django.utils.encoding import python_2_unicode_compatible
-from hvad.manager import TranslationManager
-from hvad.models import TranslatableModel, TranslatedFields
-from newsbox.models import NewsboxModelBase, NewsboxManager, \
-    NewsboxBase, newsbox_models
+from parler.managers import TranslatableManager
+from parler.models import TranslatableModel, TranslatedFields
+from newsbox.models import NewsboxModelBase, NewsboxManager
 
 
-class NewsboxHVADManager(TranslationManager, NewsboxManager):
+class NewsboxI18NManager(TranslatableManager, NewsboxManager):
     pass
 
-def newsboxhvad_mcls_processor(mcls, class_name, class_bases, class_attrs, base, newsbox_opts):
+def newsboxi18n_mcls_processor(mcls, class_name, class_bases, class_attrs, base, newsbox_opts):
     translatedFields={}
     for trans_field in newsbox_opts['trans_fieldnames']:
         translatedFields[trans_field] = class_attrs.pop(trans_field)
     class_attrs['translations'] = TranslatedFields(**translatedFields)
-    class_attrs['newsbox_objects'] = NewsboxHVADManager()
+    class_attrs['newsbox_objects'] = NewsboxI18NManager()
     #class_attrs['default_manager'] = class_attrs['newsbox_objects']
 
 
-class NewsboxHVADModelBase(NewsboxModelBase):
+class NewsboxI18NModelBase(NewsboxModelBase):
     pass
 
 
 @python_2_unicode_compatible
-class NewsboxHVADBase(six.with_metaclass(NewsboxHVADModelBase, TranslatableModel)):
+class NewsboxI18NBase(six.with_metaclass(NewsboxI18NModelBase, TranslatableModel)):
     """
     Define News which expires in time and will not be displayed in front
     """
 
-    default_manager = NewsboxHVADManager()
+    default_manager = NewsboxI18NManager()
     objects = default_manager
 
     def __str__(self):
-        return self.lazy_translation_getter(
+        return self.safe_translation_getter(
             'newsbox_title',
             _('News #%d') % self.pk)
 
@@ -79,5 +76,5 @@ class NewsboxHVADBase(six.with_metaclass(NewsboxHVADModelBase, TranslatableModel
         abstract = True
         verbose_name = _('news')
         verbose_name_plural = _('news')
-        #newsbox_metaclass_base_processor = 'newsboxhvad_mcls_processor'
-        newsbox_metaclass_final_processor = 'newsboxhvad_mcls_processor'
+        #newsbox_metaclass_base_processor = 'newsboxi18n_mcls_processor'
+        newsbox_metaclass_final_processor = 'newsboxi18n_mcls_processor'
diff --git a/newsbox_hvad/urls.py b/newsbox_i18n/urls.py
similarity index 64%
rename from newsbox_hvad/urls.py
rename to newsbox_i18n/urls.py
index ca160a4bf2d536932ce4cdd34c9502253badc15c..962d8ff4e3a86dca7b9f8e6b1aca8e9b53ef5fa8 100644
--- a/newsbox_hvad/urls.py
+++ b/newsbox_i18n/urls.py
@@ -4,7 +4,7 @@ from __future__ import unicode_literals
 from django.conf.urls import patterns
 from newsbox.urls import get_urls
 
-from .views import NewsboxHVADDetailView
+from .views import NewsboxI18NDetailView
 
-urls = get_urls(detail_view=NewsboxHVADDetailView)
+urls = get_urls(detail_view=NewsboxI18NDetailView)
 urlpatterns = patterns(*urls)
diff --git a/newsbox_i18n/views.py b/newsbox_i18n/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..6c1045ac7f8cb2bfbebe0a577a8c654119169137
--- /dev/null
+++ b/newsbox_i18n/views.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from newsbox.views import NewsboxDetailView
+from django.utils.translation import get_language
+
+
+class NewsboxI18NDetailView(NewsboxDetailView):
+
+    slug_field = "translations__newsbox_slug"
+
+    def get_queryset(self):
+        """
+        As slug_field is translated, we need to use translation aware
+        queryset.
+        """
+        language = get_language()
+        queryset = super(NewsboxI18NDetailView, self).get_queryset()
+        queryset = queryset.translated(language, newsbox_slug=self.kwargs[self.slug_url_kwarg])
+        return queryset
diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt
index 9cec9f618eda058f22b41cbaf04b5620fce6cd9d..66168ab4ee22757339a60af57000184de006f2e0 100644
--- a/test_requirements/django-1.6.txt
+++ b/test_requirements/django-1.6.txt
@@ -1,3 +1,3 @@
 -r requirements_base.txt
 django>=1.6,<1.7
-https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
+django-parler>=1.5
diff --git a/test_requirements/django-1.6_cms-3.0.txt b/test_requirements/django-1.6_cms-3.0.txt
index 8e0776dfbf27f79884f15098f481b5bb96ea5439..f11b1a4a2176831dcc9618a77f04b5354ec52cff 100644
--- a/test_requirements/django-1.6_cms-3.0.txt
+++ b/test_requirements/django-1.6_cms-3.0.txt
@@ -20,7 +20,7 @@ argparse
 dj-database-url
 selenium
 django-debug-toolbar
-https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
+django-parler>=1.5
 -e git+git://github.com/divio/djangocms-admin-style.git#egg=djangocms-admin-style
 -e git+git://github.com/divio/djangocms-text-ckeditor.git#egg=djangocms-text-ckeditor
 pyflakes
diff --git a/test_requirements/django-1.7.txt b/test_requirements/django-1.7.txt
index 767b57ab575c70541041dbc320790f9952082867..9e4e0468dd14efafc7829856ea3fa56650298fa8 100644
--- a/test_requirements/django-1.7.txt
+++ b/test_requirements/django-1.7.txt
@@ -1,3 +1,3 @@
 -r requirements_base.txt
 django>=1.7,<1.8
-https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
+django-parler>=1.5
diff --git a/test_requirements/django-1.8.txt b/test_requirements/django-1.8.txt
index 548f68e0ac5bde6d6327e1c008f796d20df35b2b..7675a922efc3a5dcdd35462c3fea6cbb2e6b23b6 100644
--- a/test_requirements/django-1.8.txt
+++ b/test_requirements/django-1.8.txt
@@ -1,3 +1,3 @@
 -r requirements_base.txt
 django>=1.8,<1.9
-https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
+django-parler>=1.5
diff --git a/test_requirements/django-1.8_cms-3.1.txt b/test_requirements/django-1.8_cms-3.1.txt
index 610547fcd2a07735c75a53bff37f2aa71e49fdbd..f33b782ab25e6bcf456c839cfd88aa50d90b8164 100644
--- a/test_requirements/django-1.8_cms-3.1.txt
+++ b/test_requirements/django-1.8_cms-3.1.txt
@@ -19,7 +19,7 @@ argparse
 dj-database-url
 selenium
 django-debug-toolbar
-https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
+django-parler>=1.5
 -e git+git://github.com/divio/djangocms-admin-style.git#egg=djangocms-admin-style
 -e git+git://github.com/divio/djangocms-text-ckeditor.git#egg=djangocms-text-ckeditor
 pyflakes
diff --git a/tests/myapp_all/admin.py b/tests/myapp_all/admin.py
index 95ff7bb7784ef79cc2ea61b1e867ed6d45a623f8..1598e28612a4a503d4cdea988dce6df78768c9b2 100644
--- a/tests/myapp_all/admin.py
+++ b/tests/myapp_all/admin.py
@@ -5,23 +5,23 @@ from __future__ import unicode_literals
 from django.contrib import admin
 from newsbox_cms.admin import NewsboxCMSAdmin
 from newsbox.admin import NewsboxSEOAdmin, NewsboxExpiredAdmin
-from newsbox_hvad.admin import NewsboxHVADAdmin
+from newsbox_i18n.admin import NewsboxI18NAdmin
 
 from .models import News, NewsComplete, NewsExtended
 
-class NewsAdmin(NewsboxHVADAdmin, NewsboxCMSAdmin):
+class NewsAdmin(NewsboxI18NAdmin, NewsboxCMSAdmin):
     pass
 
 admin.site.register(News, NewsAdmin)
 
 
-class NewsCompleteAdmin(NewsboxHVADAdmin, NewsboxCMSAdmin, NewsboxSEOAdmin, NewsboxExpiredAdmin):
+class NewsCompleteAdmin(NewsboxI18NAdmin, NewsboxCMSAdmin, NewsboxSEOAdmin, NewsboxExpiredAdmin):
     pass
 
 admin.site.register(NewsComplete, NewsCompleteAdmin)
 
 
-class NewsExtendedAdmin(NewsboxHVADAdmin, NewsboxCMSAdmin, NewsboxSEOAdmin, NewsboxExpiredAdmin):
+class NewsExtendedAdmin(NewsboxI18NAdmin, NewsboxCMSAdmin, NewsboxSEOAdmin, NewsboxExpiredAdmin):
     def get_fieldsets(self, request, obj=None):
         fieldsets = super(NewsExtendedAdmin, self).get_fieldsets(request, obj)
         fieldsets[0][1]['fields'].append('general_field')
diff --git a/tests/myapp_all/models.py b/tests/myapp_all/models.py
index 39438d4035a0ff96d2268da1579ef3ba41afb8d0..dd3fc9b71cda69eddcb5a9fb1afa26aee81cdc09 100644
--- a/tests/myapp_all/models.py
+++ b/tests/myapp_all/models.py
@@ -4,28 +4,28 @@ from __future__ import unicode_literals
 from django.db import models
 from newsbox.models import NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase
 from newsbox_cms.models import NewsboxCMSBase, NewsboxPluginBase
-from newsbox_hvad.models import NewsboxHVADBase
+from newsbox_i18n.models import NewsboxI18NBase
 
-class News(NewsboxHVADBase, NewsboxCMSBase, NewsboxBase):
+class News(NewsboxI18NBase, NewsboxCMSBase, NewsboxBase):
     class Meta:
-        verbose_name = 'news - HVADCMS'
-        verbose_name_plural = 'news - HVADCMS'
+        verbose_name = 'news - I18NCMS'
+        verbose_name_plural = 'news - I18NCMS'
         newsbox_detail_url_name = 'news_detail'
 
-class NewsComplete(NewsboxHVADBase, NewsboxCMSBase, NewsboxSEOBase, NewsboxExpiredBase, NewsboxBase):
+class NewsComplete(NewsboxI18NBase, NewsboxCMSBase, NewsboxSEOBase, NewsboxExpiredBase, NewsboxBase):
     class Meta:
-        verbose_name = 'news - CompleteHVADCMS'
-        verbose_name_plural = 'news - CompleteHVADCMS'
+        verbose_name = 'news - CompleteI18NCMS'
+        verbose_name_plural = 'news - CompleteI18NCMS'
         newsbox_detail_url_name = 'newscomplete_detail'
 
-class NewsExtended(NewsboxHVADBase, NewsboxCMSBase, NewsboxSEOBase, NewsboxExpiredBase, NewsboxBase):
+class NewsExtended(NewsboxI18NBase, NewsboxCMSBase, NewsboxSEOBase, NewsboxExpiredBase, NewsboxBase):
     general_field = models.CharField(max_length=50)
     content_field = models.CharField(max_length=50)
     seo_field = models.CharField(max_length=50)
-    
+
     class Meta:
-        verbose_name = 'news - ExtendedHVADCMS'
-        verbose_name_plural = 'news - ExtendedHVADCMS'
+        verbose_name = 'news - ExtendedI18NCMS'
+        verbose_name_plural = 'news - ExtendedI18NCMS'
         newsbox_trans_fieldnames = ['content_field', 'seo_field']
         newsbox_detail_url_name = 'newsextended_detail'
 
diff --git a/tests/myapp_all/urls_news.py b/tests/myapp_all/urls_news.py
index 9cdc95282bb8059d016a0ef7276db3d3c89045a0..63b9c68e259a88ae9bb86b8073a4bc4bec343db9 100644
--- a/tests/myapp_all/urls_news.py
+++ b/tests/myapp_all/urls_news.py
@@ -3,14 +3,14 @@
 from __future__ import unicode_literals
 
 from django.conf.urls import patterns, url
-from newsbox_hvad.views import NewsboxHVADDetailView
+from newsbox_i18n.views import NewsboxI18NDetailView
 
 from .models import News
 
 urlpatterns = patterns(
     '',
     url(
-        r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[0-9a-zA-Z_-]+)/$', 
-        NewsboxHVADDetailView.as_view(model=News,),
+        r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[0-9a-zA-Z_-]+)/$',
+        NewsboxI18NDetailView.as_view(model=News,),
         name='news_detail'),
 )
diff --git a/tests/myapp_hvad/models.py b/tests/myapp_hvad/models.py
deleted file mode 100644
index 84885858e14cc2afdb1d79707f1bcc2eff747353..0000000000000000000000000000000000000000
--- a/tests/myapp_hvad/models.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.db import models
-from newsbox.models import NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase
-from newsbox_hvad.models import NewsboxHVADBase
-
-class News(NewsboxHVADBase, NewsboxBase):
-    class Meta:
-        verbose_name = 'news - HVAD'
-        verbose_name_plural = 'news - HVAD'
-
-class NewsComplete(NewsboxHVADBase, NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase):
-    class Meta:
-        verbose_name = 'news - CompleteHVAD'
-        verbose_name_plural = 'news - CompleteHVAD'
-
-class NewsExtended(NewsboxHVADBase, NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase):
-    general_field = models.CharField(max_length=50)
-    content_field = models.CharField(max_length=50)
-    seo_field = models.CharField(max_length=50)
-    
-    class Meta:
-        verbose_name = 'news - ExtendedHVAD'
-        verbose_name_plural = 'news - ExtendedHVAD'
-        newsbox_trans_fieldnames = ['content_field', 'seo_field']
-
diff --git a/tests/myapp_hvad/__init__.py b/tests/myapp_i18n/__init__.py
similarity index 100%
rename from tests/myapp_hvad/__init__.py
rename to tests/myapp_i18n/__init__.py
diff --git a/tests/myapp_hvad/fixtures/tests_data.json b/tests/myapp_i18n/fixtures/tests_data.json
similarity index 89%
rename from tests/myapp_hvad/fixtures/tests_data.json
rename to tests/myapp_i18n/fixtures/tests_data.json
index 5a5a0f42721443a7eea9bd2ded1c65197a507d5a..46a9d6aa045e3aef94dfbeacda9152fb52bba92e 100644
--- a/tests/myapp_hvad/fixtures/tests_data.json
+++ b/tests/myapp_i18n/fixtures/tests_data.json
@@ -1,7 +1,7 @@
 [
 {
     "pk": 1, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "news-1", 
         "master": 1, 
@@ -13,7 +13,7 @@
 },
 {
     "pk": 2, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "actualite-1", 
         "master": 1, 
@@ -25,7 +25,7 @@
 },
 {
     "pk": 3, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "news-2", 
         "master": 2, 
@@ -37,7 +37,7 @@
 },
 {
     "pk": 4, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "actualite-2", 
         "master": 2, 
@@ -49,7 +49,7 @@
 },
 {
     "pk": 5, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "news-3", 
         "master": 3, 
@@ -61,7 +61,7 @@
 },
 {
     "pk": 6, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "actualite-3", 
         "master": 3, 
@@ -73,7 +73,7 @@
 },
 {
     "pk": 7, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "news-4", 
         "master": 4, 
@@ -85,7 +85,7 @@
 },
 {
     "pk": 8, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "actualite-4", 
         "master": 4, 
@@ -97,7 +97,7 @@
 },
 {
     "pk": 9, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "news-5", 
         "master": 5, 
@@ -109,7 +109,7 @@
 },
 {
     "pk": 10, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "actualite-5", 
         "master": 5, 
@@ -121,7 +121,7 @@
 },
 {
     "pk": 11, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "news-6", 
         "master": 6, 
@@ -133,7 +133,7 @@
 },
 {
     "pk": 12, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "actualite-6", 
         "master": 6, 
@@ -145,7 +145,7 @@
 },
 {
     "pk": 13, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "news-7", 
         "master": 7, 
@@ -157,7 +157,7 @@
 },
 {
     "pk": 14, 
-    "model": "myapp_hvad.newstranslation", 
+    "model": "myapp_i18n.newstranslation", 
     "fields": {
         "newsbox_slug": "actualite-7", 
         "master": 7, 
@@ -169,7 +169,7 @@
 },
 {
     "pk": 1, 
-    "model": "myapp_hvad.news", 
+    "model": "myapp_i18n.news", 
     "fields": {
         "newsbox_creation_date": "2014-03-11T13:53:29.989Z", 
         "newsbox_publication_start_date": "1985-07-02T08:00:00Z", 
@@ -180,7 +180,7 @@
 },
 {
     "pk": 2, 
-    "model": "myapp_hvad.news", 
+    "model": "myapp_i18n.news", 
     "fields": {
         "newsbox_creation_date": "2014-03-11T13:53:30.736Z", 
         "newsbox_publication_start_date": "1985-07-02T09:00:00Z", 
@@ -191,7 +191,7 @@
 },
 {
     "pk": 3, 
-    "model": "myapp_hvad.news", 
+    "model": "myapp_i18n.news", 
     "fields": {
         "newsbox_creation_date": "2014-03-11T13:53:31.496Z", 
         "newsbox_publication_start_date": "2020-01-01T08:00:00Z", 
@@ -202,7 +202,7 @@
 },
 {
     "pk": 4, 
-    "model": "myapp_hvad.news", 
+    "model": "myapp_i18n.news", 
     "fields": {
         "newsbox_creation_date": "2014-03-11T13:53:32.261Z", 
         "newsbox_publication_start_date": "1985-07-02T10:00:00Z", 
@@ -213,7 +213,7 @@
 },
 {
     "pk": 5, 
-    "model": "myapp_hvad.news", 
+    "model": "myapp_i18n.news", 
     "fields": {
         "newsbox_creation_date": "2014-03-11T13:53:33.016Z", 
         "newsbox_publication_start_date": "1985-07-02T11:00:00Z", 
@@ -224,7 +224,7 @@
 },
 {
     "pk": 6, 
-    "model": "myapp_hvad.news", 
+    "model": "myapp_i18n.news", 
     "fields": {
         "newsbox_creation_date": "2014-03-11T13:53:33.752Z", 
         "newsbox_publication_start_date": "1985-07-02T12:00:00Z", 
@@ -235,7 +235,7 @@
 },
 {
     "pk": 7, 
-    "model": "myapp_hvad.news", 
+    "model": "myapp_i18n.news", 
     "fields": {
         "newsbox_creation_date": "2014-03-11T13:53:34.499Z", 
         "newsbox_publication_start_date": "1985-07-02T13:00:00Z", 
@@ -246,7 +246,7 @@
 },
 {
     "pk": 1, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-1", 
         "newsbox_slug": "news-1", 
@@ -260,7 +260,7 @@
 },
 {
     "pk": 2, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-1", 
         "newsbox_slug": "actualite-1", 
@@ -274,7 +274,7 @@
 },
 {
     "pk": 3, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-2", 
         "newsbox_slug": "news-2", 
@@ -288,7 +288,7 @@
 },
 {
     "pk": 4, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-2", 
         "newsbox_slug": "actualite-2", 
@@ -302,7 +302,7 @@
 },
 {
     "pk": 5, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-3", 
         "newsbox_slug": "news-3", 
@@ -316,7 +316,7 @@
 },
 {
     "pk": 6, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-3", 
         "newsbox_slug": "actualite-3", 
@@ -330,7 +330,7 @@
 },
 {
     "pk": 7, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-4", 
         "newsbox_slug": "news-4", 
@@ -344,7 +344,7 @@
 },
 {
     "pk": 8, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-4", 
         "newsbox_slug": "actualite-4", 
@@ -358,7 +358,7 @@
 },
 {
     "pk": 9, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-5", 
         "newsbox_slug": "news-5", 
@@ -372,7 +372,7 @@
 },
 {
     "pk": 10, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-5", 
         "newsbox_slug": "actualite-5", 
@@ -386,7 +386,7 @@
 },
 {
     "pk": 11, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-6", 
         "newsbox_slug": "news-6", 
@@ -400,7 +400,7 @@
 },
 {
     "pk": 12, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-6", 
         "newsbox_slug": "actualite-6", 
@@ -414,7 +414,7 @@
 },
 {
     "pk": 13, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-7", 
         "newsbox_slug": "news-7", 
@@ -428,7 +428,7 @@
 },
 {
     "pk": 14, 
-    "model": "myapp_hvad.newscompletetranslation", 
+    "model": "myapp_i18n.newscompletetranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-7", 
         "newsbox_slug": "actualite-7", 
@@ -442,7 +442,7 @@
 },
 {
     "pk": 1, 
-    "model": "myapp_hvad.newscomplete", 
+    "model": "myapp_i18n.newscomplete", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:53:35.631Z", 
@@ -455,7 +455,7 @@
 },
 {
     "pk": 2, 
-    "model": "myapp_hvad.newscomplete", 
+    "model": "myapp_i18n.newscomplete", 
     "fields": {
         "newsbox_published": false, 
         "newsbox_changed_date": "2014-03-11T13:53:36.378Z", 
@@ -468,7 +468,7 @@
 },
 {
     "pk": 3, 
-    "model": "myapp_hvad.newscomplete", 
+    "model": "myapp_i18n.newscomplete", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:53:37.124Z", 
@@ -481,7 +481,7 @@
 },
 {
     "pk": 4, 
-    "model": "myapp_hvad.newscomplete", 
+    "model": "myapp_i18n.newscomplete", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:53:37.871Z", 
@@ -494,7 +494,7 @@
 },
 {
     "pk": 5, 
-    "model": "myapp_hvad.newscomplete", 
+    "model": "myapp_i18n.newscomplete", 
     "fields": {
         "newsbox_published": false, 
         "newsbox_changed_date": "2014-03-11T13:53:38.660Z", 
@@ -507,7 +507,7 @@
 },
 {
     "pk": 6, 
-    "model": "myapp_hvad.newscomplete", 
+    "model": "myapp_i18n.newscomplete", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:53:39.438Z", 
@@ -520,7 +520,7 @@
 },
 {
     "pk": 7, 
-    "model": "myapp_hvad.newscomplete", 
+    "model": "myapp_i18n.newscomplete", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:53:40.209Z", 
@@ -533,7 +533,7 @@
 },
 {
     "pk": 1, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-1", 
         "content_field": "Extra content of the news 1", 
@@ -549,7 +549,7 @@
 },
 {
     "pk": 2, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-1", 
         "content_field": "Contenu additionnel de l'actualit\u00e9 1", 
@@ -565,7 +565,7 @@
 },
 {
     "pk": 3, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-2", 
         "content_field": "Extra content of the news 2", 
@@ -581,7 +581,7 @@
 },
 {
     "pk": 4, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-2", 
         "content_field": "Contenu additionnel de l'actualit\u00e9 2", 
@@ -597,7 +597,7 @@
 },
 {
     "pk": 5, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-3", 
         "content_field": "Extra content of the news 3", 
@@ -613,7 +613,7 @@
 },
 {
     "pk": 6, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-3", 
         "content_field": "Contenu additionnel de l'actualit\u00e9 3", 
@@ -629,7 +629,7 @@
 },
 {
     "pk": 7, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-4", 
         "content_field": "Extra content of the news 4", 
@@ -645,7 +645,7 @@
 },
 {
     "pk": 8, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-4", 
         "content_field": "Contenu additionnel de l'actualit\u00e9 4", 
@@ -661,7 +661,7 @@
 },
 {
     "pk": 9, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-5", 
         "content_field": "Extra content of the news 5", 
@@ -677,7 +677,7 @@
 },
 {
     "pk": 10, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-5", 
         "content_field": "Contenu additionnel de l'actualit\u00e9 5", 
@@ -693,7 +693,7 @@
 },
 {
     "pk": 11, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-6", 
         "content_field": "Extra content of the news 6", 
@@ -709,7 +709,7 @@
 },
 {
     "pk": 12, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-6", 
         "content_field": "Contenu additionnel de l'actualit\u00e9 6", 
@@ -725,7 +725,7 @@
 },
 {
     "pk": 13, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "keyword1, keyword2, news-7", 
         "content_field": "Extra content of the news 7", 
@@ -741,7 +741,7 @@
 },
 {
     "pk": 14, 
-    "model": "myapp_hvad.newsextendedtranslation", 
+    "model": "myapp_i18n.newsextendedtranslation", 
     "fields": {
         "newsbox_meta_keywords": "motclef1, motclef2, actualite-7", 
         "content_field": "Contenu additionnel de l'actualit\u00e9 7", 
@@ -757,7 +757,7 @@
 },
 {
     "pk": 1, 
-    "model": "myapp_hvad.newsextended", 
+    "model": "myapp_i18n.newsextended", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:53:56.517Z", 
@@ -771,7 +771,7 @@
 },
 {
     "pk": 2, 
-    "model": "myapp_hvad.newsextended", 
+    "model": "myapp_i18n.newsextended", 
     "fields": {
         "newsbox_published": false, 
         "newsbox_changed_date": "2014-03-11T13:53:57.329Z", 
@@ -785,7 +785,7 @@
 },
 {
     "pk": 3, 
-    "model": "myapp_hvad.newsextended", 
+    "model": "myapp_i18n.newsextended", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:53:58.094Z", 
@@ -799,7 +799,7 @@
 },
 {
     "pk": 4, 
-    "model": "myapp_hvad.newsextended", 
+    "model": "myapp_i18n.newsextended", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:53:59.046Z", 
@@ -813,7 +813,7 @@
 },
 {
     "pk": 5, 
-    "model": "myapp_hvad.newsextended", 
+    "model": "myapp_i18n.newsextended", 
     "fields": {
         "newsbox_published": false, 
         "newsbox_changed_date": "2014-03-11T13:53:59.843Z", 
@@ -827,7 +827,7 @@
 },
 {
     "pk": 6, 
-    "model": "myapp_hvad.newsextended", 
+    "model": "myapp_i18n.newsextended", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:54:00.657Z", 
@@ -841,7 +841,7 @@
 },
 {
     "pk": 7, 
-    "model": "myapp_hvad.newsextended", 
+    "model": "myapp_i18n.newsextended", 
     "fields": {
         "newsbox_published": true, 
         "newsbox_changed_date": "2014-03-11T13:54:01.420Z", 
diff --git a/tests/myapp_i18n/models.py b/tests/myapp_i18n/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..332d9e84afc80ff20b4ea69d9a4a61c286b707df
--- /dev/null
+++ b/tests/myapp_i18n/models.py
@@ -0,0 +1,27 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models
+from newsbox.models import NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase
+from newsbox_i18n.models import NewsboxI18NBase
+
+class News(NewsboxI18NBase, NewsboxBase):
+    class Meta:
+        verbose_name = 'news - I18N'
+        verbose_name_plural = 'news - I18N'
+
+class NewsComplete(NewsboxI18NBase, NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase):
+    class Meta:
+        verbose_name = 'news - CompleteI18N'
+        verbose_name_plural = 'news - CompleteI18N'
+
+class NewsExtended(NewsboxI18NBase, NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase):
+    general_field = models.CharField(max_length=50)
+    content_field = models.CharField(max_length=50)
+    seo_field = models.CharField(max_length=50)
+
+    class Meta:
+        verbose_name = 'news - ExtendedI18N'
+        verbose_name_plural = 'news - ExtendedI18N'
+        newsbox_trans_fieldnames = ['content_field', 'seo_field']
+
diff --git a/tests/myapp_hvad/tests.py b/tests/myapp_i18n/tests.py
similarity index 84%
rename from tests/myapp_hvad/tests.py
rename to tests/myapp_i18n/tests.py
index 60e3504cbfaf2899eb7b7bb0246a1de0ab10e9ac..12183fcc7f523401e485a27cb0ab7176b17a4caf 100644
--- a/tests/myapp_hvad/tests.py
+++ b/tests/myapp_i18n/tests.py
@@ -13,7 +13,7 @@ from .models import News, NewsComplete, NewsExtended
 class NewsboxAbstractModelsTests(TestCase):
 
     fixtures = ['tests_data.json',]
-    
+
     def test_01_manager_published(self):
         """
         Test if we only get really published news via the manager
@@ -25,7 +25,7 @@ class NewsboxAbstractModelsTests(TestCase):
             returned_ids = list(cls.objects.published().values_list(
                 'id', flat=True).order_by('id'))
             self.assertEqual(
-                (cls.__name__,returned_ids), 
+                (cls.__name__,returned_ids),
                 (cls.__name__,[1, 4, 6, 7,]))
 
     def test_02_extra_translated_fields(self):
@@ -36,13 +36,13 @@ class NewsboxAbstractModelsTests(TestCase):
         news_fr = NewsExtended.objects.language('fr').get(pk=1)
         news_en = NewsExtended.objects.language('en').get(pk=1)
         self.assertEqual(
-            news_fr.content_field, 
+            news_fr.content_field,
             'Contenu additionnel de l\'actualité 1')
         self.assertEqual(
-            news_en.content_field, 
+            news_en.content_field,
             'Extra content of the news 1')
         self.assertEqual(news_en.general_field, news_fr.general_field)
-    
+
     def test_03_view_archive_200(self):
         """
         Test if generic archive view return right informations.
@@ -59,24 +59,24 @@ class NewsboxAbstractModelsTests(TestCase):
         self.assertTrue(r.context['newsset'].has_next())
         self.assertRaises(EmptyPage, r.context['newsset'].previous_page_number)
         self.assertEqual(r.context['newsset'].next_page_number(), 2)
-        
-    
+
+
     def test_04_view_detail_200(self):
         """
         Test if generic day views return right informations.
         """
         c = Client()
-        r = c.get('/en/newsbox/myapp_hvad/news/2005/07/15/news-6/')
+        r = c.get('/en/newsbox/myapp_i18n/news/2005/07/15/news-6/')
         self.assertEqual(r.status_code, 200)
         self.assertEqual(r.context['news'].pk, 6)
 
     def test_05_view_detail_404(self):
         """
-        Test if generic day views return a 404 with an URL with a date without 
+        Test if generic day views return a 404 with an URL with a date without
         any news.
         """
         c = Client()
-        r = c.get('/en/newsbox/myapp_hvad/news/1985/07/02/my-birthday/')
+        r = c.get('/en/newsbox/myapp_i18n/news/1985/07/02/my-birthday/')
         self.assertEqual(r.status_code, 404)
 
     def test_06_view_detail_404_not_published(self):
@@ -85,13 +85,13 @@ class NewsboxAbstractModelsTests(TestCase):
         news
         """
         c = Client()
-        r = c.get('/en/newsbox/myapp_hvad/news/2014/02/22/news-2/')
+        r = c.get('/en/newsbox/myapp_i18n/news/2014/02/22/news-2/')
         self.assertEqual(r.status_code, 404)
 
     def test_07_view_detail_translated(self):
         c = Client()
-        r_en = c.get('/en/newsbox/myapp_hvad/news/2005/07/15/news-6/')
-        r_fr = c.get('/fr/newsbox/myapp_hvad/news/2005/07/15/actualite-6/')
+        r_en = c.get('/en/newsbox/myapp_i18n/news/2005/07/15/news-6/')
+        r_fr = c.get('/fr/newsbox/myapp_i18n/news/2005/07/15/actualite-6/')
         self.assertEqual(r_fr.context['news'].pk, r_en.context['news'].pk)
         self.assertEqual(r_fr.context['news'].newsbox_title, 'Actualité 6')
         self.assertEqual(r_en.context['news'].newsbox_title, 'News 6')
@@ -99,8 +99,8 @@ class NewsboxAbstractModelsTests(TestCase):
     def test_08_get_absolute_url(self):
         news6 = News.objects.get(pk=6)
         expected_results = {
-            'en':'/en/newsbox/myapp_hvad/news/2005/07/15/news-6/',
-            'fr':'/fr/newsbox/myapp_hvad/news/2005/07/15/actualite-6/',}
+            'en':'/en/newsbox/myapp_i18n/news/2005/07/15/news-6/',
+            'fr':'/fr/newsbox/myapp_i18n/news/2005/07/15/actualite-6/',}
         for lang in expected_results:
             activate(lang)
             self.assertEqual(news6.get_absolute_url(), expected_results[lang])
diff --git a/tests/myapp_hvad/urls.py b/tests/myapp_i18n/urls.py
similarity index 76%
rename from tests/myapp_hvad/urls.py
rename to tests/myapp_i18n/urls.py
index 04c49fa68a74c6908af7b07ef2c40dd4ac0f6894..252d85cff6236f3475910ba5be364fbafd18db7d 100644
--- a/tests/myapp_hvad/urls.py
+++ b/tests/myapp_i18n/urls.py
@@ -13,11 +13,11 @@ admin.autodiscover()
 
 urlpatterns = i18n_patterns('',
     url(r'^admin/', include(admin.site.urls)),
-    url(r'^', include('newsbox_hvad.urls')),
-    url(r'^news/$', 
-        NewsboxArchiveView.as_view(model=News, paginate_by=1), 
+    url(r'^', include('newsbox_i18n.urls')),
+    url(r'^news/$',
+        NewsboxArchiveView.as_view(model=News, paginate_by=1),
         name='news_list',),
-    url(r'^news/(?P<year>\d{4})/$', 
-        NewsboxYearArchiveView.as_view(model=News, paginate_by=1), 
+    url(r'^news/(?P<year>\d{4})/$',
+        NewsboxYearArchiveView.as_view(model=News, paginate_by=1),
         name='news_list_y',),
 )
diff --git a/tests/runtests.sh b/tests/runtests.sh
index b0a7136c95eda257a4600da9e14305076d00a91e..8e669855e0998ef805d12994e4a512890bbf5bd8 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -16,8 +16,8 @@ fi
 if [ "$args" = "myapp_cms30" ] ; then
     export DJANGO_SETTINGS_MODULE='settings_cms30'
     APP="myapp_cms"
-elif [ "$args" = "myapp_hvad" ] ; then
-    export DJANGO_SETTINGS_MODULE='settings_hvad'
+elif [ "$args" = "myapp_i18n" ] ; then
+    export DJANGO_SETTINGS_MODULE='settings_i18n'
     APP="$args"
 elif [ "$args" = "myapp_all30" ] ; then
     export DJANGO_SETTINGS_MODULE='settings_all30'
diff --git a/tests/settings_all30.py b/tests/settings_all30.py
index 43cd0d21e82130cfa166e8a67ded32aa69da44fa..230561b7c1fd702bc757413804a7a30a337136fd 100644
--- a/tests/settings_all30.py
+++ b/tests/settings_all30.py
@@ -7,6 +7,17 @@ INSTALLED_APPS.remove('myapp_cms')
 INSTALLED_APPS = tuple(INSTALLED_APPS)
 
 LANGUAGES = [('en', 'English',), ('fr', 'French',),]
+PARLER_DEFAULT_LANGUAGE_CODE = 'fr'
+PARLER_LANGUAGES = {
+    None: (
+        {'code': 'en',},
+        {'code': 'fr',},
+    ),
+    'default': {
+        'fallbacks': ['fr'],
+        'hide_untranslated': True,
+    }
+}
 ROOT_URLCONF = 'myapp_all.urls'
 MIDDLEWARE_CLASSES=MIDDLEWARE_CLASSES+(
     'django.middleware.common.CommonMiddleware',
diff --git a/tests/settings_all31.py b/tests/settings_all31.py
index 0f388b587d01bcda52daa1631e1c3f962142def8..2e9fe816c0514093e8f06e370db73a71d7dfa0c3 100644
--- a/tests/settings_all31.py
+++ b/tests/settings_all31.py
@@ -7,6 +7,17 @@ INSTALLED_APPS.remove('myapp_cms')
 INSTALLED_APPS = tuple(INSTALLED_APPS)
 
 LANGUAGES = [('en', 'English',), ('fr', 'French',),]
+PARLER_DEFAULT_LANGUAGE_CODE = 'fr'
+PARLER_LANGUAGES = {
+    None: (
+        {'code': 'en',},
+        {'code': 'fr',},
+    ),
+    'default': {
+        'fallbacks': ['fr'],
+        'hide_untranslated': True,
+    }
+}
 ROOT_URLCONF = 'myapp_all.urls'
 MIDDLEWARE_CLASSES=MIDDLEWARE_CLASSES+(
     'django.middleware.common.CommonMiddleware',
diff --git a/tests/settings_hvad.py b/tests/settings_i18n.py
similarity index 64%
rename from tests/settings_hvad.py
rename to tests/settings_i18n.py
index f549c36a51563a7fa03ed56eba9aac21f06698f4..b6a6573e987c4adc0bced2f9fce8a6336b3c22a9 100644
--- a/tests/settings_hvad.py
+++ b/tests/settings_i18n.py
@@ -3,7 +3,18 @@ from __future__ import unicode_literals
 from settings import *
 
 LANGUAGES = [('en', 'English'),('fr', 'French'),]
-ROOT_URLCONF = 'myapp_hvad.urls'
+PARLER_DEFAULT_LANGUAGE_CODE = 'fr'
+PARLER_LANGUAGES = {
+    None: (
+        {'code': 'en',},
+        {'code': 'fr',},
+    ),
+    'default': {
+        'fallbacks': ['fr'],
+        'hide_untranslated': True,
+    }
+}
+ROOT_URLCONF = 'myapp_i18n.urls'
 MIDDLEWARE_CLASSES=(
     'django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
@@ -13,6 +24,6 @@ MIDDLEWARE_CLASSES=(
     'django.contrib.messages.middleware.MessageMiddleware',
 )
 
-INSTALLED_APPS = list(INSTALLED_APPS + ('hvad', 'myapp_hvad',))
+INSTALLED_APPS = list(INSTALLED_APPS + ('parler', 'myapp_i18n',))
 INSTALLED_APPS.remove('myapp')
 INSTALLED_APPS = tuple(INSTALLED_APPS)
diff --git a/tests/utils.py b/tests/utils.py
index 17a8e09eacac1fbaa04695dcb6fbac07762d8922..3a98796edf5b126074719d4715c1b26f133a675b 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -4,9 +4,9 @@ from myapp.models import News, NewsExpired, NewsSEO, NewsComplete, NewsExtended
 from myapp_cms.models import News as cms_News, \
      NewsComplete as cms_NewsComplete, \
      NewsExtended as cms_NewsExtended
-from myapp_hvad.models import News as hvad_News, \
-     NewsComplete as hvad_NewsComplete, \
-     NewsExtended as hvad_NewsExtended
+from myapp_i18n.models import News as i18n_News, \
+     NewsComplete as i18n_NewsComplete, \
+     NewsExtended as i18n_NewsExtended
 from myapp_all.models import News as all_News, \
      NewsComplete as all_NewsComplete, \
      NewsExtended as all_NewsExtended
@@ -26,7 +26,7 @@ def get_fields_values(newsTypes, newsType, i, inherited):
     return fields_values
 
 def create_tests_data(app=None):
-    
+
     #Translations of translatable fields
     translations = {
         'en':{
@@ -44,15 +44,15 @@ def create_tests_data(app=None):
         },
     }
     translatable_fields = translations['fr'].keys()
-    
+
     #array of available NewsTypes
-    #for each NewsType, we define a subarray with the model to use and 
+    #for each NewsType, we define a subarray with the model to use and
     #default fields values in "overwrites" which is a subarray too :
     #   - inherit is a list of other NewsTypes to get default fields.from their conf
     #   - key 0 is the default values for all news
     #   - keys 1 to N is an array with values to overwrite for news 1 to N.
-    # Can also contain a "languages" list with language code for translations. 
-    #Only used for HVAD Models. Translations are in "translations" variable.
+    # Can also contain a "languages" list with language code for translations.
+    #Only used for I18N Models. Translations are in "translations" variable.
     newsTypes = {
         'News' : {
             'model':News,
@@ -82,7 +82,7 @@ def create_tests_data(app=None):
             'overwrites':{
                 'inherit':['News',],
                 5:{
-                    'newsbox_published':True, 
+                    'newsbox_published':True,
                     'newsbox_publication_end_date':'2000-01-01T10:00:00+02:00',
                 },
             },
@@ -118,7 +118,7 @@ def create_tests_data(app=None):
                 },
             }
         },
-        
+
         #CMS Models
         'cms_News' : {
             'model':cms_News,
@@ -142,30 +142,30 @@ def create_tests_data(app=None):
                 'inherit':['cms_NewsComplete'],
             },
         },
-        
-        #HVAD Models
-        'hvad_News' : {
+
+        #I18N Models
+        'i18n_News' : {
             'languages':['en', 'fr',],
-            'model':hvad_News,
+            'model':i18n_News,
             'overwrites':{
                 'inherit':['News',],
             },
         },
-        'hvad_NewsComplete' : {
+        'i18n_NewsComplete' : {
             'languages':['en', 'fr',],
-            'model':hvad_NewsComplete,
+            'model':i18n_NewsComplete,
             'overwrites':{
-                'inherit':['NewsComplete', 'hvad_News'],
+                'inherit':['NewsComplete', 'i18n_News'],
             },
         },
-        'hvad_NewsExtended' : {
+        'i18n_NewsExtended' : {
             'languages':['en', 'fr',],
-            'model':hvad_NewsExtended,
+            'model':i18n_NewsExtended,
             'overwrites':{
-                'inherit':['NewsExtended', 'hvad_NewsComplete'],
+                'inherit':['NewsExtended', 'i18n_NewsComplete'],
             },
         },
-        
+
         #ALL Models
         'all_News' : {
             'languages':['en', 'fr',],
@@ -201,7 +201,7 @@ def create_tests_data(app=None):
 
 
         print '\n%s\n' % newsType + '-' * len(newsType)
-        
+
         for i in range(1, nb_news_a_creer+1):
 
             if not 'languages' in infos:
@@ -223,7 +223,7 @@ def create_tests_data(app=None):
                 for k in kwargs:
                     if type(kwargs[k]) in (str, unicode) and '%d' in kwargs[k]:
                         kwargs[k] = kwargs[k] % i
-                
+
                 try:
                     #Transform field into placeholders if needed
                     ph_names = getattr(infos['model']._meta, 'placeholder_field_names')
@@ -236,14 +236,14 @@ def create_tests_data(app=None):
                 except AttributeError:
                     pass
 
-                translatable_values = {k:v 
-                    for k, v in kwargs.items() 
+                translatable_values = {k:v
+                    for k, v in kwargs.items()
                     if k in translatable_fields}
                 untranslatable_fields = list(set(kwargs) - set(translatable_fields))
-                untranslatable_values = {k:v 
-                    for k, v in kwargs.items() 
+                untranslatable_values = {k:v
+                    for k, v in kwargs.items()
                     if k in untranslatable_fields}
-                
+
                 langstr = ' (%s)' % lang if lang else ''
                 print ' - %d%s : %s' % (i, langstr, kwargs['newsbox_title'])
                 if lang == infos['languages'][0]:
diff --git a/tox.ini b/tox.ini
index d391d582b644c6423c56ab182cfad8df3190511d..e0d6efd97ccc752fe2c0c1a5e3174a7d86122d10 100644
--- a/tox.ini
+++ b/tox.ini
@@ -23,31 +23,31 @@ changedir = {toxinidir}/tests
 basepython = python2.6
 deps = -r{toxinidir}/test_requirements/django-1.6.txt
 commands =  ./runtests.sh myapp {posargs}
-            ./runtests.sh myapp_hvad {posargs}
+            ./runtests.sh myapp_i18n {posargs}
 
 [testenv:py27-16]
 basepython = python2.7
 deps = -r{toxinidir}/test_requirements/django-1.6.txt
 commands = ./runtests.sh myapp {posargs}
-            ./runtests.sh myapp_hvad {posargs}
+            ./runtests.sh myapp_i18n {posargs}
 
 [testenv:py32-16]
 basepython = python3.2
 deps = -r{toxinidir}/test_requirements/django-1.6.txt
 commands = ./runtests.sh myapp {posargs}
-;            ./runtests.sh myapp_hvad {posargs}
+;            ./runtests.sh myapp_i18n {posargs}
 
 [testenv:py33-16]
 basepython = python3.3
 deps = -r{toxinidir}/test_requirements/django-1.6.txt
 commands = ./runtests.sh myapp {posargs}
-;            ./runtests.sh myapp_hvad {posargs}
+;            ./runtests.sh myapp_i18n {posargs}
 
 [testenv:py34-16]
 basepython = python3.4
 deps = -r{toxinidir}/test_requirements/django-1.6.txt
 commands = ./runtests.sh myapp {posargs}
-;            ./runtests.sh myapp_hvad {posargs}
+;            ./runtests.sh myapp_i18n {posargs}
 
 [testenv:py26-cms30]
 basepython = python2.6
@@ -59,13 +59,13 @@ commands =  ./runtests.sh myapp_cms30 {posargs}
 basepython = python2.7
 deps = -r{toxinidir}/test_requirements/django-1.7.txt
 commands = ./runtests.sh myapp {posargs}
-            ./runtests.sh myapp_hvad {posargs}
+            ./runtests.sh myapp_i18n {posargs}
             
 [testenv:py27-18]
 basepython = python2.7
 deps = -r{toxinidir}/test_requirements/django-1.8.txt
 commands = ./runtests.sh myapp {posargs}
-            ./runtests.sh myapp_hvad {posargs}
+            ./runtests.sh myapp_i18n {posargs}
 
 [testenv:py27-cms30]
 basepython = python2.7