diff --git a/papaparse.js b/papaparse.js
index d67dfae..059ccbb 100755
--- a/papaparse.js
+++ b/papaparse.js
@@ -293,9 +293,9 @@
 		if (_input instanceof Array)
 		{
 			if (!_input.length || _input[0] instanceof Array)
-				return serialize(null, _input, _skipEmptyLines === 'greedy');
+				return serialize(null, _input, _skipEmptyLines);
 			else if (typeof _input[0] === 'object')
-				return serialize(objectKeys(_input[0]), _input, _skipEmptyLines === 'greedy');
+				return serialize(objectKeys(_input[0]), _input, _skipEmptyLines);
 		}
 		else if (typeof _input === 'object')
 		{
@@ -316,7 +316,7 @@
 					_input.data = [_input.data];	// handles input like [1,2,3] or ['asdf']
 			}
 
-			return serialize(_input.fields || [], _input.data || [], _skipEmptyLines === 'greedy');
+			return serialize(_input.fields || [], _input.data || [], _skipEmptyLines);
 		}
 
 		// Default (any valid paths should return before this)
@@ -365,7 +365,7 @@
 		}
 
 		/** The double for loop that iterates the data and writes out a CSV string including header row */
-		function serialize(fields, data, greedySkip)
+		function serialize(fields, data, skipEmptyLines)
 		{
 			var csv = '';
 
@@ -394,8 +394,9 @@
 			for (var row = 0; row < data.length; row++)
 			{
 				var maxCol = hasHeader ? fields.length : data[row].length;
+				var r = hasHeader ? fields : data[row];
 
-				if (!greedySkip || data[row].join('').trim() !== '')
+				if (skipEmptyLines !== 'greedy' || r.join('').trim() !== '')
 				{
 					for (var col = 0; col < maxCol; col++)
 					{
@@ -404,7 +405,7 @@
 						var colIdx = hasHeader && dataKeyedByField ? fields[col] : col;
 						csv += safe(data[row][colIdx], col);
 					}
-					if (row < data.length - 1)
+					if (row < data.length - 1 && (!skipEmptyLines || maxCol > 0))
 						csv += _newline;
 				}
 			}
diff --git a/tests/test-cases.js b/tests/test-cases.js
index 76ee56d..deb2e65 100644
--- a/tests/test-cases.js
+++ b/tests/test-cases.js
@@ -1638,15 +1638,15 @@ var UNPARSE_TESTS = [
 		expected: 'date,not a date\r\n2018-05-04T21:08:03.269Z,16\r\n2018-05-08T15:20:22.000Z,32'
 	},
 	{
-		description: "Returns empty rows when no content is passed and skipEmptyLines is false",
+		description: "Returns empty rows when empty rows are passed and skipEmptyLines is false",
 		input: [[null, ' '], [], ['1', '2']],
 		config: {skipEmptyLines: false},
 		expected: '," "\r\n\r\n1,2'
 	},
 	{
-		description: "Returns without empty rows and skipEmptyLines is true",
+		description: "Returns without empty rows when skipEmptyLines is true",
 		input: [[null, ' '], [], ['1', '2']],
-		config: {skipEmptyLines: false},
+		config: {skipEmptyLines: true},
 		expected: '," "\r\n1,2'
 	},
 	{