diff --git a/apic.go b/apic.go
index ded1b99..29be91d 100644
--- a/apic.go
+++ b/apic.go
@@ -83,10 +83,10 @@
 // Create a new emitter object.
 func yaml_emitter_initialize(emitter *yaml_emitter_t) bool {
 	*emitter = yaml_emitter_t{
-		buffer:         make([]byte, output_buffer_size),
-		raw_buffer:     make([]byte, 0, output_raw_buffer_size),
-		states:         make([]yaml_emitter_state_t, 0, initial_stack_size),
-		events:         make([]yaml_event_t, 0, initial_queue_size),
+		buffer:     make([]byte, output_buffer_size),
+		raw_buffer: make([]byte, 0, output_raw_buffer_size),
+		states:     make([]yaml_emitter_state_t, 0, initial_stack_size),
+		events:     make([]yaml_event_t, 0, initial_queue_size),
 	}
 	return true
 }
diff --git a/decode_test.go b/decode_test.go
index 718b679..9b71562 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -300,7 +300,7 @@
 		&struct{ B []int }{[]int{1, 2}},
 	},
 
-	// BUG #1133337
+	// Bug #1133337
 	{
 		"foo: ''",
 		map[string]*string{"foo": new(string)},
@@ -318,6 +318,21 @@
 		}{1, 0},
 	},
 
+	// Bug #1191981
+	{
+		"" +
+			"%YAML 1.1\n" +
+			"--- !!str\n" +
+			`"Generic line break (no glyph)\n\` + "\n" +
+			` Generic line break (glyphed)\n\` + "\n" +
+			` Line separator\u2028\` + "\n" +
+			` Paragraph separator\u2029"` + "\n",
+		"" +
+			"Generic line break (no glyph)\n" +
+			"Generic line break (glyphed)\n" +
+			"Line separator\u2028Paragraph separator\u2029",
+	},
+
 	// Struct inlining
 	{
 		"a: 1\nb: 2\nc: 3\n",
@@ -341,16 +356,25 @@
 	for i, item := range unmarshalTests {
 		t := reflect.ValueOf(item.value).Type()
 		var value interface{}
-		if t.Kind() == reflect.Map {
+		switch t.Kind() {
+		case reflect.Map:
 			value = reflect.MakeMap(t).Interface()
-		} else {
+		case reflect.String:
+			t := reflect.ValueOf(item.value).Type()
+			v := reflect.New(t)
+			value = v.Interface()
+		default:
 			pt := reflect.ValueOf(item.value).Type()
 			pv := reflect.New(pt.Elem())
 			value = pv.Interface()
 		}
 		err := goyaml.Unmarshal([]byte(item.data), value)
 		c.Assert(err, IsNil, Commentf("Item #%d", i))
-		c.Assert(value, DeepEquals, item.value)
+		if t.Kind() == reflect.String {
+			c.Assert(*value.(*string), Equals, item.value, Commentf("Item #%d", i))
+		} else {
+			c.Assert(value, DeepEquals, item.value, Commentf("Item #%d", i))
+		}
 	}
 }
 
diff --git a/scannerc.go b/scannerc.go
index daad349..943a597 100644
--- a/scannerc.go
+++ b/scannerc.go
@@ -2520,7 +2520,7 @@
 		// Join the whitespaces or fold line breaks.
 		if leading_blanks {
 			// Do we need to fold line breaks?
-			if leading_break[0] == '\n' {
+			if len(leading_break) > 0 && leading_break[0] == '\n' {
 				if len(trailing_breaks) == 0 {
 					s = append(s, ' ')
 				} else {
diff --git a/yamlprivateh.go b/yamlprivateh.go
index fd8414b..1c0b23d 100644
--- a/yamlprivateh.go
+++ b/yamlprivateh.go
@@ -114,8 +114,8 @@
 // Check if the character is a line break or NUL.
 func is_breakz(b []byte, i int) bool {
 	//return is_break(b, i) || is_z(b, i)
-	return (// is_break:
-		b[i] == '\r' || // CR (#xD)
+	return (        // is_break:
+	b[i] == '\r' || // CR (#xD)
 		b[i] == '\n' || // LF (#xA)
 		b[i] == 0xC2 && b[i+1] == 0x85 || // NEL (#x85)
 		b[i] == 0xE2 && b[i+1] == 0x80 && b[i+2] == 0xA8 || // LS (#x2028)
@@ -127,8 +127,8 @@
 // Check if the character is a line break, space, or NUL.
 func is_spacez(b []byte, i int) bool {
 	//return is_space(b, i) || is_breakz(b, i)
-	return (// is_space:
-		b[i] == ' ' ||
+	return ( // is_space:
+	b[i] == ' ' ||
 		// is_breakz:
 		b[i] == '\r' || // CR (#xD)
 		b[i] == '\n' || // LF (#xA)
@@ -141,8 +141,8 @@
 // Check if the character is a line break, space, tab, or NUL.
 func is_blankz(b []byte, i int) bool {
 	//return is_blank(b, i) || is_breakz(b, i)
-	return (// is_blank:
-		b[i] == ' ' || b[i] == '\t' ||
+	return ( // is_blank:
+	b[i] == ' ' || b[i] == '\t' ||
 		// is_breakz:
 		b[i] == '\r' || // CR (#xD)
 		b[i] == '\n' || // LF (#xA)
