diff --git a/timeseriesviewer/main.py b/timeseriesviewer/main.py
index b9b2e4b624fb7132b29e60769ab27487fb694d14..889ba61134201d94b7b8445fc5ce3a50066ccb99 100644
--- a/timeseriesviewer/main.py
+++ b/timeseriesviewer/main.py
@@ -48,24 +48,18 @@ from timeseriesviewer.utils import *
 from timeseriesviewer import jp, mkdir, DIR_SITE_PACKAGES, messageLog
 from timeseriesviewer.timeseries import *
 from timeseriesviewer.profilevisualization import SpectralTemporalVisualization
+from timeseriesviewer.speclib.spectrallibraries import SpectralLibrary, createQgsField
 import numpy as np
 import pyqtgraph as pg
 
 
 DEBUG = False
 
-from timeseriesviewer.speclib.spectrallibraries import createQgsField, createStandardFields
-import timeseriesviewer.speclib.spectrallibraries
-
-fields = [f for f in createStandardFields()]
-fields.insert(1, createQgsField('date', ''))
-fields.insert(2, createQgsField('sensorname', ''))
-standardFields = QgsFields()
-for field in fields:
-    standardFields.append(field)
-timeseriesviewer.speclib.spectrallibraries.createStandardFields = lambda: standardFields
-
-#ensure that required non-standard modules are available
+EXTRA_SPECLIB_FIELDS = [
+    QgsField('date', QVariant.String, 'varchar'),
+    QgsField('doy', QVariant.Int, 'int'),
+    QgsField('sensor', QVariant.String, 'varchar')
+]
 
 
 class TimeSeriesViewerUI(QMainWindow,
@@ -359,6 +353,13 @@ class TimeSeriesViewer(QgisInterface, QObject):
         self.ui.dockSpectralLibrary.SLW.sigLoadFromMapRequest.connect(self.ui.actionIdentifySpectralProfile.trigger)
         self.ui.dockSpectralLibrary.SLW.setMapInteraction(True)
 
+        #add time-specific fields
+        sl = self.spectralLibrary()
+        assert isinstance(sl, SpectralLibrary)
+        sl.startEditing()
+        for field in EXTRA_SPECLIB_FIELDS:
+            sl.addAttribute(field)
+        assert sl.commitChanges()
         self.mMapLayerStore.addMapLayer(self.ui.dockSpectralLibrary.speclib())
         self.mMapLayerStore.addMapLayer(self.spectralTemporalVis.temporalProfileLayer())
 
@@ -372,6 +373,13 @@ class TimeSeriesViewer(QgisInterface, QObject):
         #reg.setDefaultActionForLayer(self.spectralTemporalVis.temporalProfileLayer(), moveToFeatureCenter)
 
 
+    def spectralLibrary(self)->SpectralLibrary:
+        """
+        Returns the SpectraLibrary of the SpectralLibrary dock
+        :return: SpectraLibrary
+        """
+        return self.ui.dockSpectralLibrary.SLW.speclib()
+
 
     def mapCanvases(self)->list:
         """
@@ -449,17 +457,21 @@ class TimeSeriesViewer(QgisInterface, QObject):
                 self.cntSpectralProfile = 0
 
             profiles = SpectralProfile.fromMapCanvas(mapCanvas, spatialPoint)
+
             #add metadata
             if isinstance(tsd, TimeSeriesDatum):
+                profiles2 = []
+                sl = self.spectralLibrary()
                 for p in profiles:
+                    self.cntSpectralProfile += 1
                     assert isinstance(p, SpectralProfile)
-                    p.setName('Profile {} {}'.format(self.cntSpectralProfile, tsd.date))
-                    p.setMetadata(u'date', u'{}'.format(tsd.date), addMissingFields=True)
-                    p.setMetadata(u'sensorname', u'{}'.format(tsd.sensor.name()) , addMissingFields=True)
-                    p.setMetadata(u'sensorid', u'{}'.format(tsd.sensor.id()), addMissingFields=True)
-
-            self.cntSpectralProfile += 1
-            self.ui.dockSpectralLibrary.SLW.setCurrentSpectra(profiles)
+                    p2 = p.copyFieldSubset(fields=sl.fields())
+                    p2.setName('Profile {} {}'.format(self.cntSpectralProfile, tsd.date))
+                    p2.setAttribute('date', '{}'.format(tsd.date))
+                    p2.setAttribute('doy', int(tsd.doy))
+                    p2.setAttribute('sensor', tsd.sensor.name())
+                    profiles2.append(p2)
+                self.ui.dockSpectralLibrary.SLW.setCurrentSpectra(profiles2)
 
         elif mapToolKey == MapTools.CursorLocation:
 
diff --git a/timeseriesviewer/speclib/envi.py b/timeseriesviewer/speclib/envi.py
index a6fe463dc4fdb812073c4835271739be6795f8b1..e0c6172e08b79c10efa017a51ff6dd321636cf86 100644
--- a/timeseriesviewer/speclib/envi.py
+++ b/timeseriesviewer/speclib/envi.py
@@ -301,8 +301,7 @@ class EnviSpectralLibraryIO(AbstractSpectralLibraryIO):
 
             for csvField in CSV_FIELDS:
                 assert isinstance(csvField, QgsField)
-                if csvField.name() not in speclibFields.names() and \
-                   csvField.name() not in CSV_PROFILE_NAME_COLUMN_NAMES:
+                if csvField.name() not in [speclibFields.names(), CSV_GEOMETRY_COLUMN] + CSV_PROFILE_NAME_COLUMN_NAMES:
                     speclibFields.append(csvField)
 
             CSVLine2ESLProfile = {}
@@ -332,14 +331,15 @@ class EnviSpectralLibraryIO(AbstractSpectralLibraryIO):
 
         if CSV_METADATA is not None:
             #find which column index from CSV table matches which QgsFeature attribute index
-            for csvField in CSV_FIELDS:
+            for fieldIndex, csvField in enumerate(CSV_FIELDS):
                 assert isinstance(csvField, QgsField)
                 fieldName = csvField.name()
                 #is this a geometry field?
+
                 if fieldName == CSV_GEOMETRY_COLUMN:
                     # copy CSV values to profile geometry attribute
                     for iCSV, iProfile in CSVLine2ESLProfile.items():
-                        value = CSV_DATA[iCSV][aCSV]
+                        value = CSV_DATA[iCSV][fieldIndex]
                         if isinstance(value, str):
                             g = QgsGeometry.fromWkt(value)
                             if g.wkbType() == QgsWkbTypes.Point: