diff --git a/beat/web/reports/api.py b/beat/web/reports/api.py
index 6d06e1f38b360a8a7d66b53f32bbb114eb171f81..608ab89374cbdb47bf69ae40653ad038c8e0b686 100644
--- a/beat/web/reports/api.py
+++ b/beat/web/reports/api.py
@@ -549,22 +549,24 @@ class ReportResultsAllExperimentsView(CommonContextMixin, generics.RetrieveAPIVi
 class ReportRSTCompileView(BaseReportActionView):
     permission_classes = BaseReportActionView.permission_classes + [IsEditable]
 
+    def get_queryset(self):
+        owner_name = self.kwargs.get('owner_name')
+        report_name  = self.kwargs.get('report_name')
+
+        report = get_object_or_404(Report, author__username=owner_name, name=report_name)
+
+        self.check_object_permissions(self.request, report)
+
+        return report
+
     def post(self, request, owner_name, report_name):
+        report = self.get_queryset()
+
         result = {}
 
-        try:
-            from docutils.core import publish_parts
-        except ImportError:
-            if settings.DEBUG:
-                raise template.TemplateSyntaxError("Error in ReportRSTCompileView: The Python docutils library isn't installed.")
-            result['html_str'] = force_text(value)
-        else:
-            docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
-            parts = publish_parts(source=force_bytes(request.data['raw']), writer_name="html4css1", settings_overrides=docutils_settings)
-            result['html_str'] = force_text(parts["fragment"])
+        result['html_str'] = report.compileTextItem(request.data['raw'])
 
         return Response(result)
-        #return BadRequestResponse(result)
 
 
 #----------------------------------------------------------
@@ -573,28 +575,19 @@ class ReportRSTCompileView(BaseReportActionView):
 class ReportRSTCompileAnonView(views.APIView):
     permission_classes = [permissions.AllowAny]
 
-    def post(self, request, number):
+    def get_queryset(self):
+        number = self.kwargs.get('number')
+
         report = get_object_or_404(Report, number=int(number))
-        content = json.loads(report.content)
-        textBlockMap = request.data['raw'].split('|')
-        rstStr = ''
-        try:
-            rstStr = content['groups'][textBlockMap[0]]['reportItems'][int(textBlockMap[1])]['content']
-        except:
-            pass
 
+        self.check_object_permissions(self.request, report)
+
+        return report
+
+    def post(self, request, number):
+        report = self.get_queryset()
         result = {}
 
-        try:
-            from docutils.core import publish_parts
-        except ImportError:
-            if settings.DEBUG:
-                raise template.TemplateSyntaxError("Error in ReportRSTCompileView: The Python docutils library isn't installed.")
-            result['html_str'] = force_text(value)
-        else:
-            docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
-            parts = publish_parts(source=force_bytes(rstStr), writer_name="html4css1", settings_overrides=docutils_settings)
-            result['html_str'] = force_text(parts["fragment"])
+        result['html_str'] = report.compileTextItem(request.data['raw'])
 
         return Response(result)
-        #return BadRequestResponse(result)
diff --git a/beat/web/reports/models.py b/beat/web/reports/models.py
index e8eb282c14b1196baa56465ca8a4c13ba51881f0..509f816ca1b72e8ed10f2378f19db01790dc164c 100644
--- a/beat/web/reports/models.py
+++ b/beat/web/reports/models.py
@@ -28,6 +28,11 @@
 from django.db import models
 from django.contrib.auth.models import User
 from django.core.urlresolvers import reverse
+from django.utils.encoding import force_bytes, force_text
+from django.conf import settings
+
+from ..common.utils import validate_restructuredtext
+from ..ui.templatetags.markup import restructuredtext
 
 from ..algorithms.models import Algorithm
 from ..experiments.models import Experiment
@@ -312,3 +317,27 @@ class Report(models.Model):
         alias_list = map(lambda x: report_content["alias_experiments"][x], experiments_list)
 
         return experiments_list, alias_list
+
+    # the itemStr can either be:
+    def compileTextItem(self, itemStr):
+        content = json.loads(self.content)
+        rstStr = ''
+
+        try:
+            textBlockMap = itemStr.split('|')
+            rstStr = content['groups'][textBlockMap[0]]['reportItems'][int(textBlockMap[1])]['content']
+        except KeyError:
+            rstStr = itemStr
+
+        result = {}
+
+        try:
+            from docutils.core import publish_parts
+        except ImportError:
+            if settings.DEBUG:
+                raise template.TemplateSyntaxError("Error in ReportRSTCompileView: The Python docutils library isn't installed.")
+            return rstStr
+        else:
+            docutils_settings = getattr(settings, "RESTRUCTUREDTEXT_FILTER_SETTINGS", {})
+            parts = publish_parts(source=force_bytes(rstStr), writer_name="html4css1", settings_overrides=docutils_settings)
+            return force_text(parts["fragment"])