diff --git a/LCU/Maintenance/DBInterface/monitoringdb/models/rtsm.py b/LCU/Maintenance/DBInterface/monitoringdb/models/rtsm.py
index 19c2693950f433561f15fd7c2f389cd07bdb5262..860269b9b9b23b8d8888695f9bd404aa154dc0f2 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/models/rtsm.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/models/rtsm.py
@@ -19,19 +19,6 @@ class RTSMObservation(models.Model):
     samples = models.IntegerField(default=None, null=True)
 
 
-class RTSMObservationSummary(RTSMObservation):
-    @property
-    def errors_found(self):
-        return RTSMError.objects.defer('spectra'). \
-            filter(observation=self).values('error_type', 'mode', 'rcu'). \
-            annotate(count=models.Count('error_type', unique=True, output_field=models.FloatField())). \
-            annotate(percentage=models.ExpressionWrapper(models.F('count') * 100. / models.F('observation__samples'),
-                                                         output_field=models.FloatField()))
-
-    class Meta:
-        proxy = True
-
-
 class RTSMError(models.Model):
     observation = models.ForeignKey(RTSMObservation, related_name='errors', on_delete=models.CASCADE)
 
@@ -58,7 +45,18 @@ class RTSMError(models.Model):
                                                                      self.error_type,)
 
 
+class RTSMErrorSummary(models.Model):
+    observation = models.ForeignKey(RTSMObservation, related_name='errors_summary', on_delete=models.CASCADE)
+    percentage = models.FloatField(default=None, null=True)
+    rcu = models.SmallIntegerField(default=None, null=True)
+    mode = models.SmallIntegerField(default=None, null=True)
+    count = models.IntegerField(default=None, null=True)
+    error_type = models.CharField(max_length=50)
+    start_frequency = models.FloatField(default=None, null=True)
+    stop_frequency = models.FloatField(default=None, null=True)
+
+
 class RTSMSpectrum(models.Model):
     bad_spectrum = ArrayField(models.FloatField())
     average_spectrum = ArrayField(models.FloatField())
-    rtsm_error = models.ForeignKey(RTSMError, related_name='spectra', on_delete=models.CASCADE)
\ No newline at end of file
+    rtsm_error = models.ForeignKey(RTSMError, related_name='spectra', on_delete=models.CASCADE)
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/serializers/rtsm.py b/LCU/Maintenance/DBInterface/monitoringdb/serializers/rtsm.py
index a08a30f76b5666efc37383dba7e3d4a3792767a5..8cddf2b51b544d17f7ec1482e9f7c20ba0808ca4 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/serializers/rtsm.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/serializers/rtsm.py
@@ -9,13 +9,6 @@ from .station import Station
 logger = logging.getLogger('serializers')
 
 
-class RTSMErrorsAggregateSerializer(serializers.Serializer):
-    count = serializers.IntegerField()
-    percentage = serializers.FloatField()
-    error_type = serializers.CharField()
-    rcu = serializers.IntegerField()
-
-
 class RTSMSpectrumSerializer(serializers.ModelSerializer):
     bad_spectrum = serializers.ListField(child=serializers.FloatField())
     average_spectrum = serializers.ListField(child=serializers.FloatField())
@@ -26,8 +19,8 @@ class RTSMSpectrumSerializer(serializers.ModelSerializer):
 
 
 class RTSMErrorSerializer(serializers.ModelSerializer):
-
     observation = serializers.PrimaryKeyRelatedField(read_only=True)
+
     def __init__(self, *args, **kwargs):
         self.Meta.depth = kwargs.pop('depth', 1)
         super(RTSMErrorSerializer, self).__init__(*args, **kwargs)
@@ -37,27 +30,37 @@ class RTSMErrorSerializer(serializers.ModelSerializer):
         fields = '__all__'
 
 
-class RTSMObservationSummarySerializer(serializers.ModelSerializer):
-    errors_found = RTSMErrorsAggregateSerializer(many=True)
+class RTSMErrorSummarySerializer(serializers.ModelSerializer):
+    observation = serializers.PrimaryKeyRelatedField(read_only=True)
 
     class Meta:
-        model = RTSMObservationSummary
+        model = RTSMErrorSummary
         fields = '__all__'
-        depth=1
 
 
 class RTSMObservationSerializer(serializers.ModelSerializer):
     errors = RTSMErrorSerializer(many=True, depth=0)
+    errors_summary = RTSMErrorSummarySerializer(many=True)
 
     class Meta:
         model = RTSMObservation
         fields = '__all__'
 
+    def compute_summary(self, RTSMObservation_entry):
+        summary_entries = RTSMObservation_entry.errors.defer('spectra'). \
+            filter(observation=RTSMObservation_entry).values('error_type', 'mode', 'rcu', 'start_frequency',
+                                                             'stop_frequency'). \
+            annotate(count=models.Count('error_type', unique=True, output_field=models.FloatField())). \
+            annotate(percentage=models.ExpressionWrapper(models.F('count') * 100. / models.F('observation__samples'),
+                                                         output_field=models.FloatField()))
+        for summary_entry in summary_entries:
+            RTSMErrorSummary(observation=RTSMObservation_entry, **summary_entry).save()
+
     @atomic
     def create(self, validated_data):
         rtsm_errors = validated_data.pop('errors')
 
-   # derive the station type from the station name
+        # derive the station type from the station name
         station_name = validated_data.pop('station_name')
         station_type = station_name[0].capitalize()
         station_type = station_type if station_type in ['C', 'R'] else 'I'
@@ -85,16 +88,15 @@ class RTSMObservationSerializer(serializers.ModelSerializer):
             average_spectrum = rtsm_error.pop('average_spectrum')
             bad_spectrum = rtsm_error.pop('bad_spectrum')
 
-
             rtsm_error_instance = RTSMError.objects.create(**rtsm_error)
             rtsm_error_instance.save()
             ActionLogSerializer.log_model_insert(rtsm_error_instance)
 
             rtsm_spectrum_instance = RTSMSpectrum.objects.create(average_spectrum=average_spectrum,
-                                        bad_spectrum=bad_spectrum,
-                                        rtsm_error=rtsm_error_instance)
+                                                                 bad_spectrum=bad_spectrum,
+                                                                 rtsm_error=rtsm_error_instance)
             rtsm_spectrum_instance.save()
-
             ActionLogSerializer.log_model_insert(rtsm_spectrum_instance)
+        self.compute_summary(RTSMObservation_instance)
 
         return RTSMObservation_instance
diff --git a/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py b/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py
index 8459d523e71e9c9105b7274b90d683d748a59d9c..5e0a2560ff7ca59bd3bd6d5f677de7789d38b363 100644
--- a/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py
+++ b/LCU/Maintenance/DBInterface/monitoringdb/views/rtsm_views.py
@@ -1,7 +1,7 @@
 from .common import *
-from ..models.rtsm import RTSMObservation, RTSMError, RTSMSpectrum, RTSMObservationSummary
-from ..serializers.rtsm import RTSMObservationSerializer, RTSMErrorSerializer,\
-                               RTSMObservationSummarySerializer, RTSMSpectrumSerializer
+from ..models.rtsm import RTSMObservation, RTSMError, RTSMSpectrum
+from ..serializers.rtsm import RTSMObservationSerializer, RTSMErrorSerializer, \
+    RTSMSpectrumSerializer
 from ..rtsm_test_raw_parser import parse_rtsm_test
 
 logger = logging.getLogger('views')
@@ -12,12 +12,6 @@ class RTSMSpectrumViewSet(viewsets.ReadOnlyModelViewSet):
     serializer_class = RTSMSpectrumSerializer
     filter_fields = ['rtsm_error']
 
-class RTSMErrorsDetailedViewSet(viewsets.ReadOnlyModelViewSet):
-    queryset = RTSMError.objects.all()
-    serializer_class = RTSMErrorSerializer
-    filter_fields = '__all__'
-
-
 
 class RTSMErrorsViewSet(viewsets.ReadOnlyModelViewSet):
     queryset = RTSMError.objects.all()
@@ -25,19 +19,12 @@ class RTSMErrorsViewSet(viewsets.ReadOnlyModelViewSet):
     filter_fields = '__all__'
 
 
-
 class RTSMObservationViewSet(viewsets.ReadOnlyModelViewSet):
     queryset = RTSMObservation.objects.all()
     serializer_class = RTSMObservationSerializer
     filter_fields = '__all__'
 
 
-class RTSMObservationSummaryViewSet(viewsets.ReadOnlyModelViewSet):
-    queryset = RTSMObservationSummary.objects.all()
-    serializer_class = RTSMObservationSummarySerializer
-    filter_fields = '__all__'
-
-
 @api_view(['POST'])
 def insert_raw_rtsm_test(request):
     """
@@ -61,8 +48,8 @@ def insert_raw_rtsm_test(request):
                 entry.update(station_name=station_name)
 
                 logger.info('RTSM parsed successfully for obsid %d and station %s',
-                                entry['observation_id'],
-                                entry['station_name'])
+                            entry['observation_id'],
+                            entry['station_name'])
 
                 try:
                     rtsm_item = RTSMObservationSerializer().create(dict(entry))
@@ -84,7 +71,7 @@ def insert_raw_rtsm_test(request):
                 return Response(exception=True,
                                 data="the post message is not correct." +
                                      " It has to be of the form {content:[RAWSTRING], station_name:[STATION_NAME]}: %s. Request provided %s" % (
-                                     e, request),
+                                         e, request),
                                 status=status.HTTP_400_BAD_REQUEST)
         else:
             return Response(exception=True,