diff --git a/static/js/jquery-rss/3.3.0/jquery.rss.min.js b/static/js/jquery-rss/3.3.0/jquery.rss.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..12baada401797a728805541707803b988eea113e
--- /dev/null
+++ b/static/js/jquery-rss/3.3.0/jquery.rss.min.js
@@ -0,0 +1,11 @@
+(function(d){var e=function(a,b,c,f){this.target=a;this.url=b;this.html=[];this.effectQueue=[];this.options=d.extend({ssl:!1,host:"www.feedrapp.info",limit:null,key:null,layoutTemplate:"<ul>{entries}</ul>",entryTemplate:'<li><a href="{url}">[{author}@{date}] {title}</a><br/>{shortBodyPlain}</li>',tokens:{},outputMode:"json",dateFormat:"dddd MMM Do",dateLocale:"en",effect:"show",offsetStart:!1,offsetEnd:!1,error:function(){console.log("jQuery RSS: url doesn't link to RSS-Feed")},onData:function(){},
+success:function(){}},c||{});this.callback=f||this.options.success};e.htmlTags="doctype,html,head,title,base,link,meta,style,script,noscript,body,article,nav,aside,section,header,footer,h1-h6,hgroup,address,p,hr,pre,blockquote,ol,ul,li,dl,dt,dd,figure,figcaption,div,table,caption,thead,tbody,tfoot,tr,th,td,col,colgroup,form,fieldset,legend,label,input,button,select,datalist,optgroup,option,textarea,keygen,output,progress,meter,details,summary,command,menu,del,ins,img,iframe,embed,object,param,video,audio,source,canvas,track,map,area,a,em,strong,i,b,u,s,small,abbr,q,cite,dfn,sub,sup,time,code,kbd,samp,var,mark,bdi,bdo,ruby,rt,rp,span,br,wbr".split(",");
+e.prototype.load=function(a){var b="http"+(this.options.ssl?"s":"")+"://"+this.options.host+"?callback=?&q="+encodeURIComponent(this.url);this.options.offsetStart&&this.options.offsetEnd&&(this.options.limit=this.options.offsetEnd);null!==this.options.limit&&(b+="&num="+this.options.limit);null!==this.options.key&&(b+="&key="+this.options.key);d.getJSON(b,a)};e.prototype.render=function(){var a=this;this.load(function(b){try{a.feed=b.responseData.feed,a.entries=b.responseData.feed.entries}catch(c){return a.entries=
+[],a.feed=null,a.options.error.call(a)}b=a.generateHTMLForEntries();a.target.append(b.layout);if(0!==b.entries.length){d.isFunction(a.options.onData)&&a.options.onData.call(a);var f=d(b.layout).is("entries")?b.layout:d("entries",b.layout);a.appendEntriesAndApplyEffects(f,b.entries)}0<a.effectQueue.length?a.executeEffectQueue(a.callback):d.isFunction(a.callback)&&a.callback.call(a)})};e.prototype.appendEntriesAndApplyEffects=function(a,b){var c=this;d.each(b,function(b,e){var d=c.wrapContent(e);"show"===
+c.options.effect?a.before(d):(d.css({display:"none"}),a.before(d),c.applyEffect(d,c.options.effect))});a.remove()};e.prototype.generateHTMLForEntries=function(){var a=this,b={entries:[],layout:null};d(this.entries).each(function(){var c=a.options.offsetStart,f=a.options.offsetEnd;c&&f?index>=c&&index<=f&&a.isRelevant(this,b.entries)&&(c=a.evaluateStringForEntry(a.options.entryTemplate,this),b.entries.push(c)):a.isRelevant(this,b.entries)&&(c=a.evaluateStringForEntry(a.options.entryTemplate,this),
+b.entries.push(c))});b.layout=this.options.entryTemplate?this.wrapContent(this.options.layoutTemplate.replace("{entries}","<entries></entries>")):this.wrapContent("<div><entries></entries></div>");return b};e.prototype.wrapContent=function(a){return 0!==d.trim(a).indexOf("<")?d("<div>"+a+"</div>"):d(a)};e.prototype.applyEffect=function(a,b,c){switch(b){case "slide":a.slideDown("slow",c);break;case "slideFast":a.slideDown(c);break;case "slideSynced":this.effectQueue.push({element:a,effect:"slide"});
+break;case "slideFastSynced":this.effectQueue.push({element:a,effect:"slideFast"})}};e.prototype.executeEffectQueue=function(a){var b=this;this.effectQueue.reverse();var c=function(){var f=b.effectQueue.pop();f?b.applyEffect(f.element,f.effect,c):a&&a()};c()};e.prototype.evaluateStringForEntry=function(a,b){var c=a,f=this;d(a.match(/(\{.*?\})/g)).each(function(){var a=this.toString();c=c.replace(a,f.getValueForToken(a,b))});return c};e.prototype.isRelevant=function(a,b){var c=this.getTokenMap(a);
+return this.options.filter?this.options.filterLimit&&this.options.filterLimit===b.length?!1:this.options.filter(a,c):!0};e.prototype.getFormattedDate=function(a){if(this.options.dateFormatFunction)return this.options.dateFormatFunction(a);return"undefined"!==typeof moment?(a=moment(new Date(a)),a=a.locale?a.locale(this.options.dateLocale):a.lang(this.options.dateLocale),a.format(this.options.dateFormat)):a};e.prototype.getTokenMap=function(a){if(!this.feedTokens){var b=JSON.parse(JSON.stringify(this.feed));
+delete b.entries;this.feedTokens=b}return d.extend({feed:this.feedTokens,url:a.link,author:a.author,date:this.getFormattedDate(a.publishedDate),title:a.title,body:a.content,shortBody:a.contentSnippet,bodyPlain:function(a){for(var a=a.content.replace(/<script[\\r\\\s\S]*<\/script>/mgi,"").replace(/<\/?[^>]+>/gi,""),b=0;b<e.htmlTags.length;b++)a=a.replace(RegExp("<"+e.htmlTags[b],"gi"),"");return a}(a),shortBodyPlain:a.contentSnippet.replace(/<\/?[^>]+>/gi,""),index:d.inArray(a,this.entries),totalEntries:this.entries.length,
+teaserImage:function(a){try{return a.content.match(/(<img.*?>)/gi)[0]}catch(b){return""}}(a),teaserImageUrl:function(a){try{return a.content.match(/(<img.*?>)/gi)[0].match(/src="(.*?)"/)[1]}catch(b){return""}}(a)},this.options.tokens)};e.prototype.getValueForToken=function(a,b){var c=this.getTokenMap(b),d=a.replace(/[\{\}]/g,""),d=c[d];if("undefined"!==typeof d)return"function"===typeof d?d(b,c):d;throw Error("Unknown token: "+a+", url:"+this.url);};d.fn.rss=function(a,b,c){(new e(this,a,b,c)).render();
+return this}})(jQuery);
diff --git a/templates/info.html b/templates/info.html
index 2de84f1a2c0d1f1bb9b104a791e3df7b8680e4e2..9c22c465115f81247978172154eabf9f26861e95 100644
--- a/templates/info.html
+++ b/templates/info.html
@@ -31,36 +31,19 @@
             <!-- Twitter feed -->
             <div class="card info-card box-shadow">
                 <div id="twitter">
-                    <a class="twitter-timeline" data-height="600" data-dnt="true" data-theme="light" href="https://twitter.com/Turkukaupunki?ref_src=twsrc%5Etfw">Tweets by Turkukaupunki</a>
-                    <script>
-                        window.twttr = (function (d, s, id) {
-                            var js, fjs = d.getElementsByTagName(s)[0],
-                                t = window.twttr || {};
-                            if (d.getElementById(id)) return;
-                            js = d.createElement(s);
-                            js.id = id;
-                            js.src = "https://platform.twitter.com/widgets.js";
-                            fjs.parentNode.insertBefore(js, fjs);
-
-                            t._e = [];
-                            t.ready = function (f) {
-                                t._e.push(f);
-                            };
-                            return t;
-                        }(document, "script", "twitter-wjs"));
-                    </script>
+                    <a class="twitter-timeline" data-height="600" data-dnt="true" data-theme="light" href="https://twitter.com/Turkukaupunki?ref_src=twsrc%5Etfw">
+                        Twiitit: Turkukaupunki
+                    </a>
                 </div>
             </div>
         </div>
         <div class="col-md-6">
-            <!-- Visit Turku news feed with rssinclude.com -->
+            <!-- Visit Turku news feed -->
             <div class="card info-card box-shadow">
                 <div class="card-header">
                     <h3 class="card-title">Visit Turku -uutiset</h3>
                 </div>
-                <div id="visitTurku">
-                    <script type="text/javascript" src="http://output92.rssinclude.com/output?type=js&amp;id=1172169&amp;hash=c1c032487ad85904644bb22308686454"></script>
-                </div>
+                <div id="visitTurku" class="list-group list-group-flush" style="overflow-y: scroll"></div>
             </div>
         </div>
     </div>
@@ -71,13 +54,47 @@
 {% block scripts %}
     {{- super() }}
 
+    <!-- TODO: once the cdnjs project hosts this, migrate to that -->
+    <script src="{{ util.static_url('js/jquery-rss/3.3.0/jquery.rss.min.js') }}"></script>
+
     <script>
         $(document).ready(function () {
-            console.log("Document ready.");
+            // Twitter initialization code
+            window.twttr = (function (d, s, id) {
+                var js, fjs = d.getElementsByTagName(s)[0],
+                    t = window.twttr || {};
+                if (d.getElementById(id)) return;
+                js = d.createElement(s);
+                js.id = id;
+                js.src = "https://platform.twitter.com/widgets.js";
+                fjs.parentNode.insertBefore(js, fjs);
+
+                t._e = [];
+                t.ready = function (f) {
+                    t._e.push(f);
+                };
+                return t;
+            }(document, "script", "twitter-wjs"));
+
+            // TODO: consider making a docker image of https://github.com/sdepold/feedr and use that as custom host option, to mitigate potential downtime
+            // see: https://github.com/sdepold/jquery-rss
+            $('#visitTurku').rss(
+                'https://www.visitturku.fi/section/73193/rss.xml',
+                {
+                    limit: 10,
+                    layoutTemplate: '{entries}',
+                    entryTemplate: `
+                        <a href="{url}" class="list-group-item list-group-item-action flex-column align-items-start">
+                            <div class="d-flex w-100 justify-content-between">
+                                <h5 class="mb-1 text-foli">{title}</h5>
+                            </div>
+                            <p class="mb-1">{body}</p>
+                            <small class="pull-right">{author} - {date}</small>
+                        </a>`
+                }
+            ).disableExternalLinks();
 
-            $('#visitTurku').disableExternalLinks();
             $('#twitter').disableExternalLinks(); // in case the widget fails to load disable the link in the container as a placeholder
-            //$('#forecast7').disableExternalLinks(); // not working, iframes need to die out :)
 
             twttr.ready(function (twttr) {
                 twttr.events.bind('loaded', function (e) {
diff --git a/templates/internal/base.html b/templates/internal/base.html
index e44323fa5ffd6c223287784eac63cdb853df3eee..0bd960a4aeda15d81ba7f8ab539ec66ef490f2c8 100644
--- a/templates/internal/base.html
+++ b/templates/internal/base.html
@@ -192,7 +192,7 @@
 				// TODO: is there a way to avoid flickering elements on full page load?
 				$('.js-hide').removeClass('js-hide').addClass('sr-only');
 
-				moment.locale('{{ g.lang_code }}');
+				moment.locale('{% if localized %}{{ g.lang_code }}{% else %}{{ content_lang }}{% endif %}');
 
 				// clock implementation follows
 				$clock = $('#headerClock');