diff --git a/components/settings.js b/components/settings.js
index bf420f7212f6d984f276b3c6e0aa69819c506fb9..cfce6dac809ee4cea0b89a83d5f3eb164a5bd7c7 100644
--- a/components/settings.js
+++ b/components/settings.js
@@ -64,7 +64,8 @@ function transformToCsv(cycleDays) {
   const rows = cycleDays
     .map(day => {
       return columnNames.map(column => {
-        return objectPath.get(day, column, '')
+        const val = objectPath.get(day, column, '')
+        return typeof val === 'string' ? csvify(val) : val
       })
     })
     .map(row => row.join(','))
@@ -72,3 +73,20 @@ function transformToCsv(cycleDays) {
   rows.unshift(columnNames.join(','))
   return rows.join('\n')
 }
+
+function csvify (val) {
+  // escape double quotes
+  val = val.replace(/"/g, '""')
+
+  val = val.toLowerCase()
+  const hasSpecialChars = (
+    val.includes('\n') ||
+    val.includes('\t') ||
+    val.includes(',') ||
+    val.includes(';') ||
+    val.includes('.') ||
+    val.includes('\'')
+  )
+
+  return hasSpecialChars ? `"${val}"` : val
+}
\ No newline at end of file