diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py
index cb5b11d4bc6ea39ec73f242818ed3c5c5ebd5435..eaeb305c248143f2cd81d8aecb3ce5c75a3bab26 100644
--- a/SciPost_v1/urls.py
+++ b/SciPost_v1/urls.py
@@ -4,15 +4,27 @@ from django.conf.urls.static import static
 from django.contrib import admin
 
 from ajax_select import urls as ajax_select_urls
+from rest_framework import routers
 
+from news.viewsets import NewsItemViewSet
 from journals.constants import REGEX_CHOICES
 
+# Journal URL Regex
 JOURNAL_REGEX = '(?P<doi_label>%s)' % REGEX_CHOICES
 
+
+# API Routing
+router = routers.SimpleRouter()
+router.register(r'news', NewsItemViewSet)
+urlpatterns = router.urls
+
+
+# Base URLs
 urlpatterns = [
     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
     url(r'^admin/', include(admin.site.urls)),
     url(r'^ajax_select/', include(ajax_select_urls)),
+    url(r'^api/', include(router.urls, namespace='api')),
     url(r'^docs/', include('sphinxdoc.urls')),
     url(r'^10.21468/%s/' % JOURNAL_REGEX, include('journals.urls.journal', namespace="journal")),
     url(r'^%s/' % JOURNAL_REGEX, include('journals.urls.journal', namespace="journal")),
diff --git a/news/admin.py b/news/admin.py
index 43253c6cc5b48d7b606f34ea7e5f57f639625ee2..6b8247d5b8259ff183cad3368b21c1724ab9be10 100644
--- a/news/admin.py
+++ b/news/admin.py
@@ -5,6 +5,7 @@ from .models import NewsItem
 
 class NewsItemAdmin(admin.ModelAdmin):
     search_fields = ['blurb', 'followup_link_text']
+    list_display = ['__str__', 'on_homepage']
 
 
 admin.site.register(NewsItem, NewsItemAdmin)
diff --git a/news/managers.py b/news/managers.py
new file mode 100644
index 0000000000000000000000000000000000000000..456c26cacb4156cba454993f05a37c30dd36d267
--- /dev/null
+++ b/news/managers.py
@@ -0,0 +1,6 @@
+from django.db import models
+
+
+class NewsManager(models.Manager):
+    def homepage(self):
+        return self.filter(on_homepage=True)
diff --git a/news/migrations/0002_newsitem_on_homepage.py b/news/migrations/0002_newsitem_on_homepage.py
new file mode 100644
index 0000000000000000000000000000000000000000..63a77ba1e3ac5ff1de43e51a6f93dfab1c596a55
--- /dev/null
+++ b/news/migrations/0002_newsitem_on_homepage.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.3 on 2017-08-01 16:18
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('news', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='newsitem',
+            name='on_homepage',
+            field=models.BooleanField(default=True),
+        ),
+    ]
diff --git a/news/models.py b/news/models.py
index a8992a3e7c5464b359a81208f4240c589e901320..0961cbe72c6a1c31e6a449044d3e5cef6191fe18 100644
--- a/news/models.py
+++ b/news/models.py
@@ -1,5 +1,7 @@
 from django.db import models
 
+from .managers import NewsManager
+
 
 class NewsItem(models.Model):
     date = models.DateField()
@@ -7,6 +9,9 @@ class NewsItem(models.Model):
     blurb = models.TextField()
     followup_link = models.URLField(blank=True, null=True)
     followup_link_text = models.CharField(max_length=300, blank=True, null=True)
+    on_homepage = models.BooleanField(default=True)
+
+    objects = NewsManager()
 
     class Meta:
         db_table = 'scipost_newsitem'
diff --git a/news/serializers.py b/news/serializers.py
new file mode 100644
index 0000000000000000000000000000000000000000..b15e000ef0734648b5370535df4021654b924db7
--- /dev/null
+++ b/news/serializers.py
@@ -0,0 +1,18 @@
+from rest_framework import serializers
+
+from .models import NewsItem
+
+
+class NewsItemSerializer(serializers.ModelSerializer):
+    date = serializers.DateField(format='%-d %B %Y')
+
+    class Meta:
+        model = NewsItem
+        fields = (
+            'id',
+            'date',
+            'headline',
+            'blurb',
+            'followup_link',
+            'followup_link_text',
+        )
diff --git a/news/templates/news/news_card_content_for_api.html b/news/templates/news/news_card_content_for_api.html
new file mode 100644
index 0000000000000000000000000000000000000000..37e55edb21ba3131115cc549fe48d0aeea2d0bbd
--- /dev/null
+++ b/news/templates/news/news_card_content_for_api.html
@@ -0,0 +1,12 @@
+<div class="card-block px-0 py-2 news-item">
+    <h3 class="card-title mb-0 pb-0">{{headline}}</h3>
+    <div>
+        <h5 class="text-muted mb-2">{{date}}</h5>
+        <div>
+            {{blurb|slice:":90"}} (...)
+
+            <br>
+            <a href="{% url 'news:news' %}#news_{{id}}" class="my-1 d-inline-block">Read more</a>
+        </div>
+    </div>
+</div>
diff --git a/news/viewsets.py b/news/viewsets.py
new file mode 100644
index 0000000000000000000000000000000000000000..ed6b0dc63c984919def918e1c98e4a976df26647
--- /dev/null
+++ b/news/viewsets.py
@@ -0,0 +1,26 @@
+from django.http import Http404
+
+from rest_framework import viewsets, renderers
+from rest_framework.response import Response
+
+from .models import NewsItem
+from .serializers import NewsItemSerializer
+
+
+class NewsItemViewSet(viewsets.ReadOnlyModelViewSet):
+    queryset = NewsItem.objects.all().order_by('-date')
+    serializer_class = NewsItemSerializer
+    template_name = 'news/news_card_content_for_api.html'
+    renderer_classes = (renderers.BrowsableAPIRenderer, renderers.TemplateHTMLRenderer, renderers.JSONRenderer)
+
+    def get(self, request, *args, **kwargs):
+        response = super().get(request, *args, **kwargs)
+        if request.accepted_renderer.format == 'html':
+            return Response({'news': self.get_object()})
+        return response
+
+    def list(self, request, *args, **kwargs):
+        response = super().list(request, *args, **kwargs)
+        if request.accepted_renderer.format == 'html':
+            raise Http404
+        return response
diff --git a/scipost/static/scipost/assets/js/newsticker.js b/scipost/static/scipost/assets/js/newsticker.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae65040e66115943275e0acd265001b794832730
--- /dev/null
+++ b/scipost/static/scipost/assets/js/newsticker.js
@@ -0,0 +1,67 @@
+/*!
+Werkplaats Planner v0.1
+(c) 2017 Jorran de Wit
+ */
+
+// var $ = require('jQuery');
+var NewsTicker;
+
+
+NewsTicker = (function() {
+    NewsTicker.prototype.items = [];
+
+    NewsTicker.prototype.defaults = {
+        url: '/api',
+        interval: 8000,
+    };
+
+    function NewsTicker(element, options) {
+        this.element = element;
+        this.options = $.extend({}, this.defaults, options);
+
+        // Start building...
+        this.start_ticker()
+    };
+
+    NewsTicker.prototype.get_item = function(item) {
+        var self = this
+
+        $.get(this.options.url + '/' + item.id + '/?format=html')
+        .done(function(data) {
+            self.element.fadeOut(function() {
+                self.element.html(data).fadeIn()
+            })
+        })
+    };
+
+    NewsTicker.prototype.start_ticker = function() {
+        var self = this
+        var time = 0;
+
+        $.get(this.options.url + '?format=json')
+        .done(function(data) {
+            $.each(data, function(index, item) {
+                setTimeout( function(){ self.get_item(item); }, time)
+                time += self.options.interval;
+            })
+        });
+    };
+
+    return NewsTicker;
+})();
+
+
+(function($) {
+    // Extend jQuery
+    $.fn.scipost_newsticker = function(options) {
+        var ticker = new NewsTicker(this, options)
+        console.log('SciPost NewTicker')
+        return this;
+    }
+
+    // Start
+    $('#news ul').scipost_newsticker({
+        url: 'api/news',
+        interval: 6000
+    })
+}(jQuery));
diff --git a/scipost/templates/scipost/index.html b/scipost/templates/scipost/index.html
index 52b9b98b4d7c47555a07d2749aed50b64813ff41..62bfb8301035ccabe60c611cb9119ff800ed14ad 100644
--- a/scipost/templates/scipost/index.html
+++ b/scipost/templates/scipost/index.html
@@ -1,5 +1,6 @@
 {% extends 'scipost/base_for_sidebar.html' %}
 
+{% load render_bundle from webpack_loader %}
 {% load staticfiles %}
 
 {% block body_class %}{{block.super}} has-sidebar has-breadcrumb-submenu homepage{% endblock %}
@@ -13,6 +14,10 @@
     </nav>
 {% endblock %}
 
+{% block footer_script %}
+    {% render_bundle 'homepage' 'js' %}
+{% endblock %}
+
 {% block content %}
     <div class="row">
         <div class="col-lg-6">
@@ -77,7 +82,7 @@
     {% endif %}
 
     <!-- News -->
-    <div class="card card-grey">
+    <div class="card card-grey" id="news">
         <div class="card-header border-0">
             <h2 class="card-title mb-0">
                 News
diff --git a/webpack.config.js b/webpack.config.js
index a14943764e184c56b3168445a66e0a08806a853e..9c36140fc0be4445270b73b99f20ad74c799b01c 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -15,6 +15,9 @@ module.exports = {
         bootstrap: [
             'bootstrap-loader'
         ],
+        homepage: [
+            "./scipost/static/scipost/assets/js/newsticker.js",
+        ],
         tooltip: "./scipost/static/scipost/assets/js/tooltip.js",
         modal: "./scipost/static/scipost/assets/js/modal.js",
     },