diff --git a/newsbox/__init__.py b/newsbox/__init__.py
index 1c06be72c87a445749cca3d92df4f87e3311f7dd..38bdd5c42790f567dd40344bada1d336f793809a 100644
--- a/newsbox/__init__.py
+++ b/newsbox/__init__.py
@@ -1,3 +1,3 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
-__version__="0.1.0"
+__version__="0.3.0"
diff --git a/setup.py b/setup.py
index 713e51712e047fe3a8c19fc21fbe0a8cd192a8c6..96064ff74c55bfad5b06782905b931b4e0cd72e3 100755
--- a/setup.py
+++ b/setup.py
@@ -34,7 +34,7 @@ setup(
     platforms=['OS Independent'],
     classifiers=CLASSIFIERS,
     install_requires=[
-        'Django>=1.6,<1.7',
+        'Django>=1.6,<1.9',
     ],
     packages=find_packages(exclude=["project", "project.*"]),
     include_package_data=True,
diff --git a/test_requirements/django-1.6_cms-3.0.txt b/test_requirements/django-1.6_cms-3.0.txt
index 62668101204c80569ea52a11b08528054f0e3f0e..8e0776dfbf27f79884f15098f481b5bb96ea5439 100644
--- a/test_requirements/django-1.6_cms-3.0.txt
+++ b/test_requirements/django-1.6_cms-3.0.txt
@@ -1,4 +1,3 @@
-# Currently, 3.0 is not yet released, so we use the develop branch
 django-cms>=3.0,<3.1
 
 # This is django-cms test requirements
@@ -24,14 +23,4 @@ django-debug-toolbar
 https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
 -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
--e git+git://github.com/divio/djangocms-column.git#egg=djangocms-column
--e git+git://github.com/divio/djangocms-style.git#egg=djangocms-style
--e git+git://github.com/divio/djangocms-file.git#egg=djangocms-file
--e git+git://github.com/divio/djangocms-flash.git#egg=djangocms-flash
--e git+git://github.com/divio/djangocms-googlemap.git#egg=djangocms-googlemap
--e git+git://github.com/divio/djangocms-inherit.git#egg=djangocms-inherit
--e git+git://github.com/divio/djangocms-picture.git#egg=djangocms-picture
--e git+git://github.com/divio/djangocms-teaser.git#egg=djangocms-teaser
--e git+git://github.com/divio/djangocms-video.git#egg=djangocms-video
--e git+git://github.com/divio/djangocms-link.git#egg=djangocms-link
 pyflakes
diff --git a/test_requirements/django-1.7.txt b/test_requirements/django-1.7.txt
new file mode 100644
index 0000000000000000000000000000000000000000..767b57ab575c70541041dbc320790f9952082867
--- /dev/null
+++ b/test_requirements/django-1.7.txt
@@ -0,0 +1,3 @@
+-r requirements_base.txt
+django>=1.7,<1.8
+https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
diff --git a/test_requirements/django-1.8.txt b/test_requirements/django-1.8.txt
new file mode 100644
index 0000000000000000000000000000000000000000..548f68e0ac5bde6d6327e1c008f796d20df35b2b
--- /dev/null
+++ b/test_requirements/django-1.8.txt
@@ -0,0 +1,3 @@
+-r requirements_base.txt
+django>=1.8,<1.9
+https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
diff --git a/test_requirements/django-1.8_cms-3.1.txt b/test_requirements/django-1.8_cms-3.1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..610547fcd2a07735c75a53bff37f2aa71e49fdbd
--- /dev/null
+++ b/test_requirements/django-1.8_cms-3.1.txt
@@ -0,0 +1,25 @@
+django-cms>=3.1,<3.2
+
+# This is django-cms test requirements
+
+django>=1.8,<1.9
+django-reversion>=1.8
+
+coverage==3.7
+python-coveralls==2.4.0
+docopt==0.6.1
+unittest-xml-reporting==1.0.3
+sphinx
+Pillow>=2.9,<2.10
+django-classy-tags>=0.6,<0.7
+html5lib==0.999
+django-treebeard>=3.0,<3.1
+django-sekizai>=0.8,<0.9
+argparse
+dj-database-url
+selenium
+django-debug-toolbar
+https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad
+-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/runtests.sh b/tests/runtests.sh
index 274086ae7f10564efcecf2f90dbbef012b8f75dd..b0a7136c95eda257a4600da9e14305076d00a91e 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -13,14 +13,24 @@ if [ -z "$args" ] ; then
     export args=myapp
 fi
 
-if [ "$args" = "myapp_cms" ] ; then
-    export DJANGO_SETTINGS_MODULE='settings_cms'
+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_all" ] ; then
-    export DJANGO_SETTINGS_MODULE='settings_all'
+    APP="$args"
+elif [ "$args" = "myapp_all30" ] ; then
+    export DJANGO_SETTINGS_MODULE='settings_all30'
+    APP="myapp_all"
+elif [ "$args" = "myapp_cms31" ] ; then
+    export DJANGO_SETTINGS_MODULE='settings_cms31'
+    APP="myapp_cms"
+elif [ "$args" = "myapp_all31" ] ; then
+    export DJANGO_SETTINGS_MODULE='settings_all31'
+    APP="myapp_all"
 else
     export DJANGO_SETTINGS_MODULE='settings'
+    APP="$args"
 fi
 
-$DJANGO_ADMIN test --traceback --settings=$DJANGO_SETTINGS_MODULE --verbosity 2 --pythonpath="../" "$args"
+$DJANGO_ADMIN test --traceback --settings=$DJANGO_SETTINGS_MODULE --verbosity 2 --pythonpath="../" "$APP"
diff --git a/tests/settings.py b/tests/settings.py
index 5f1ad520b9f95cb5304589a2300606661107f82b..e32d25c9bea80a4686b550465d4d089c51bc686e 100644
--- a/tests/settings.py
+++ b/tests/settings.py
@@ -30,6 +30,12 @@ TEMPLATE_LOADERS = (
     'django.template.loaders.filesystem.Loader',
     'django.template.loaders.app_directories.Loader',
 )
+MIDDLEWARE_CLASSES = (
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+)
 # Required for Django 1.4+
 STATIC_URL = '/static/'
 # Required for Django 1.5+
diff --git a/tests/settings_all.py b/tests/settings_all30.py
similarity index 96%
rename from tests/settings_all.py
rename to tests/settings_all30.py
index cd68248722654f080772f1991facf0a68270ac89..43cd0d21e82130cfa166e8a67ded32aa69da44fa 100644
--- a/tests/settings_all.py
+++ b/tests/settings_all30.py
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
-from settings_cms import *
+from settings_cms30 import *
 
 INSTALLED_APPS = list(INSTALLED_APPS + ('myapp_all',))
 INSTALLED_APPS.remove('myapp_cms')
diff --git a/tests/settings_all31.py b/tests/settings_all31.py
new file mode 100644
index 0000000000000000000000000000000000000000..0f388b587d01bcda52daa1631e1c3f962142def8
--- /dev/null
+++ b/tests/settings_all31.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+from settings_cms31 import *
+
+INSTALLED_APPS = list(INSTALLED_APPS + ('myapp_all',))
+INSTALLED_APPS.remove('myapp_cms')
+INSTALLED_APPS = tuple(INSTALLED_APPS)
+
+LANGUAGES = [('en', 'English',), ('fr', 'French',),]
+ROOT_URLCONF = 'myapp_all.urls'
+MIDDLEWARE_CLASSES=MIDDLEWARE_CLASSES+(
+    'django.middleware.common.CommonMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.locale.LocaleMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+)
+CMS_PLACEHOLDER_CONF = {
+    'main': {
+        'name': "Main content",
+        'plugins': ['NewsPlugin','TextPlugin'],
+    },
+}
diff --git a/tests/settings_cms.py b/tests/settings_cms30.py
similarity index 100%
rename from tests/settings_cms.py
rename to tests/settings_cms30.py
diff --git a/tests/settings_cms31.py b/tests/settings_cms31.py
new file mode 100644
index 0000000000000000000000000000000000000000..03df6e3042fa3b06be40953ec72be65a41bb6285
--- /dev/null
+++ b/tests/settings_cms31.py
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+from settings import *
+
+SITE_ID = 1
+INSTALLED_APPS = list(INSTALLED_APPS + (
+    #cms requirements
+    'cms',  # django CMS itself
+    'treebeard',  # utilities for implementing a modified pre-order traversal tree
+    'menus',  # helper for model independent hierarchical website navigation
+    'sekizai',  # for javascript and css management
+    'djangocms_admin_style',  # for the admin skin. You **must** add 'djangocms_admin_style' in the list before 'django.contrib.admin'.
+    'django.contrib.messages',  # to enable messages framework (see :ref:`Enable messages <enable-messages>`)
+    'djangocms_text_ckeditor',
+    'newsbox_cms',
+    'myapp_cms',
+))
+INSTALLED_APPS.remove('myapp')
+INSTALLED_APPS = tuple(INSTALLED_APPS)
+MIDDLEWARE_CLASSES = (
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.locale.LocaleMiddleware',
+    'django.contrib.admindocs.middleware.XViewMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'cms.middleware.page.CurrentPageMiddleware',
+    'cms.middleware.user.CurrentUserMiddleware',
+    'cms.middleware.toolbar.ToolbarMiddleware',
+    'cms.middleware.language.LanguageCookieMiddleware',
+)
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [],
+        'OPTIONS': {
+            'context_processors': [
+                'django.contrib.auth.context_processors.auth',
+                'django.core.context_processors.i18n',
+                'django.core.context_processors.media',
+                'django.core.context_processors.static',
+                'django.template.context_processors.tz',
+                'django.template.context_processors.csrf',
+                'django.core.context_processors.request',
+                'django.contrib.messages.context_processors.messages',
+                'sekizai.context_processors.sekizai',
+                'cms.context_processors.cms_settings',
+            ],
+            'loaders': [
+                'django.template.loaders.filesystem.Loader',
+                'django.template.loaders.app_directories.Loader',
+            ],
+        },
+    },
+]
+CMS_TEMPLATES = (
+    ('page.html', 'page'),
+)
+ROOT_URLCONF = 'myapp_cms.urls'
+CMS_PLACEHOLDER_CONF = {
+    'main': {
+        'name': "Main content",
+        'plugins': ['NewsPlugin',],
+    },
+}
diff --git a/tox.ini b/tox.ini
index ba0e97be1897077859e2932365860e167cf177c3..d391d582b644c6423c56ab182cfad8df3190511d 100644
--- a/tox.ini
+++ b/tox.ini
@@ -5,9 +5,12 @@ envlist=
   py32-16,
   py33-16,
   py34-16,
+  py27-17,
+  py27-18,
   
   py26-cms30,
   py27-cms30,
+  py27-cms31,
 ; cms seems to be not yet compatible with python 3.0
 ;  py32-cms30,
 ;  py33-cms30,
@@ -49,29 +52,47 @@ commands = ./runtests.sh myapp {posargs}
 [testenv:py26-cms30]
 basepython = python2.6
 deps = -r{toxinidir}/test_requirements/django-1.6_cms-3.0.txt
-commands =  ./runtests.sh myapp_cms {posargs}
-            ./runtests.sh myapp_all {posargs}
+commands =  ./runtests.sh myapp_cms30 {posargs}
+            ./runtests.sh myapp_all30 {posargs}
+
+[testenv:py27-17]
+basepython = python2.7
+deps = -r{toxinidir}/test_requirements/django-1.7.txt
+commands = ./runtests.sh myapp {posargs}
+            ./runtests.sh myapp_hvad {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}
 
 [testenv:py27-cms30]
 basepython = python2.7
 deps = -r{toxinidir}/test_requirements/django-1.6_cms-3.0.txt
-commands =  ./runtests.sh myapp_cms {posargs}
-            ./runtests.sh myapp_all {posargs}
+commands =  ./runtests.sh myapp_cms30 {posargs}
+            ./runtests.sh myapp_all30 {posargs}
+
+[testenv:py27-cms31]
+basepython = python2.7
+deps = -r{toxinidir}/test_requirements/django-1.8_cms-3.1.txt
+commands =  ./runtests.sh myapp_cms31 {posargs}
+            ./runtests.sh myapp_all31 {posargs}
 
 [testenv:py32-cms30]
 basepython = python3.2
 deps = -r{toxinidir}/test_requirements/django-1.6_cms-3.0.txt
-commands =  ./runtests.sh myapp_cms {posargs}
-            ./runtests.sh myapp_all {posargs}
+commands =  ./runtests.sh myapp_cms30 {posargs}
+            ./runtests.sh myapp_all30 {posargs}
 
 [testenv:py33-cms30]
 basepython = python3.3
 deps = -r{toxinidir}/test_requirements/django-1.6_cms-3.0.txt
-commands =  ./runtests.sh myapp_cms {posargs}
-            ./runtests.sh myapp_all {posargs}
+commands =  ./runtests.sh myapp_cms30 {posargs}
+            ./runtests.sh myapp_all30 {posargs}
 
 [testenv:py34-cms30]
 basepython = python3.4
 deps = -r{toxinidir}/test_requirements/django-1.6_cms-3.0.txt
-commands =  ./runtests.sh myapp_cms {posargs}
-            ./runtests.sh myapp_all {posargs}
+commands =  ./runtests.sh myapp_cms30 {posargs}
+            ./runtests.sh myapp_all30 {posargs}