diff --git a/src/getchar.c b/src/getchar.c
index 5a5041a..285d5d5 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -40,9 +40,9 @@
 
 #define MINIMAL_SIZE 20			/* minimal size for b_str */
 
-static buffheader_T redobuff = {NULL, NULL, 0, 0};
-static buffheader_T old_redobuff = {NULL, NULL, 0, 0};
-static buffheader_T recordbuff = {NULL, NULL, 0, 0};
+static buffheader_T redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+static buffheader_T old_redobuff = {{NULL, {NUL}}, NULL, 0, 0};
+static buffheader_T recordbuff = {{NULL, {NUL}}, NULL, 0, 0};
 
 static int typeahead_char = 0;		/* typeahead char that's not flushed */
 
@@ -138,13 +138,12 @@
 {
     buffblock_T	*p, *np;
 
-    for (p = buf->bh_first; p != NULL; p = np)
+    for (p = buf->bh_first.b_next; p != NULL; p = np)
     {
 	np = p->b_next;
 	vim_free(p);
     }
-    buf->bh_first = NULL;
-    buf->bh_curr = NULL;
+    buf->bh_first.b_next = NULL;
 }
 
 /*
@@ -160,16 +159,16 @@
     char_u	    *p = NULL;
     char_u	    *p2;
     char_u	    *str;
-    buffblock_T	    *bp;
+    buffblock_T *bp;
 
     /* compute the total length of the string */
-    for (bp = buffer->bh_first; bp != NULL; bp = bp->b_next)
+    for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
 	count += (long_u)STRLEN(bp->b_str);
 
     if ((count || dozero) && (p = lalloc(count + 1, TRUE)) != NULL)
     {
 	p2 = p;
-	for (bp = buffer->bh_first; bp != NULL; bp = bp->b_next)
+	for (bp = buffer->bh_first.b_next; bp != NULL; bp = bp->b_next)
 	    for (str = bp->b_str; *str; )
 		*p2++ = *str++;
 	*p2 = NUL;
@@ -233,17 +232,17 @@
     long		slen)	/* length of "s" or -1 */
 {
     buffblock_T *p;
-    long_u	len;
+    long_u	    len;
 
     if (slen < 0)
 	slen = (long)STRLEN(s);
     if (slen == 0)				/* don't add empty strings */
 	return;
 
-    if (buf->bh_first == NULL)	/* first add to list */
+    if (buf->bh_first.b_next == NULL)	/* first add to list */
     {
 	buf->bh_space = 0;
-	buf->bh_curr = NULL;
+	buf->bh_curr = &(buf->bh_first);
     }
     else if (buf->bh_curr == NULL)	/* buffer has already been read */
     {
@@ -251,9 +250,9 @@
 	return;
     }
     else if (buf->bh_index != 0)
-	mch_memmove(buf->bh_first->b_str,
-		    buf->bh_first->b_str + buf->bh_index,
-		    STRLEN(buf->bh_first->b_str + buf->bh_index) + 1);
+	mch_memmove(buf->bh_first.b_next->b_str,
+		    buf->bh_first.b_next->b_str + buf->bh_index,
+		    STRLEN(buf->bh_first.b_next->b_str + buf->bh_index) + 1);
     buf->bh_index = 0;
 
     if (buf->bh_space >= (int)slen)
@@ -268,25 +267,16 @@
 	    len = MINIMAL_SIZE;
 	else
 	    len = slen;
-	p = (buffblock_T *)lalloc((long_u)(sizeof(buffblock_T) + len + 1),
-									 TRUE);
+	p = (buffblock_T *)lalloc((long_u)(sizeof(buffblock_T) + len),
+									TRUE);
 	if (p == NULL)
 	    return; /* no space, just forget it */
 	buf->bh_space = (int)(len - slen);
 	vim_strncpy(p->b_str, s, (size_t)slen);
 
-	if (buf->bh_curr == NULL)
-	{
-	    p->b_next = NULL;
-	    buf->bh_first = p;
-	    buf->bh_curr = p;
-	}
-	else
-	{
-	    p->b_next = buf->bh_curr->b_next;
-	    buf->bh_curr->b_next = p;
-	    buf->bh_curr = p;
-	}
+	p->b_next = buf->bh_curr->b_next;
+	buf->bh_curr->b_next = p;
+	buf->bh_curr = p;
     }
     return;
 }
@@ -358,10 +348,10 @@
 }
 
 /* First read ahead buffer. Used for translated commands. */
-static buffheader_T readbuf1 = {NULL, NULL, 0, 0};
+static buffheader_T readbuf1 = {{NULL, {NUL}}, NULL, 0, 0};
 
 /* Second read ahead buffer. Used for redo. */
-static buffheader_T readbuf2 = {NULL, NULL, 0, 0};
+static buffheader_T readbuf2 = {{NULL, {NUL}}, NULL, 0, 0};
 
 /*
  * Get one byte from the read buffers.  Use readbuf1 one first, use readbuf2
@@ -386,17 +376,17 @@
     char_u	c;
     buffblock_T	*curr;
 
-    if (buf->bh_first == NULL)  /* buffer is empty */
+    if (buf->bh_first.b_next == NULL)  /* buffer is empty */
 	return NUL;
 
-    curr = buf->bh_first;
+    curr = buf->bh_first.b_next;
     c = curr->b_str[buf->bh_index];
 
     if (advance)
     {
 	if (curr->b_str[++buf->bh_index] == NUL)
 	{
-	    buf->bh_first = curr->b_next;
+	    buf->bh_first.b_next = curr->b_next;
 	    vim_free(curr);
 	    buf->bh_index = 0;
 	}
@@ -410,14 +400,14 @@
     static void
 start_stuff(void)
 {
-    if (readbuf1.bh_first != NULL)
+    if (readbuf1.bh_first.b_next != NULL)
     {
-	readbuf1.bh_curr = readbuf1.bh_first;
+	readbuf1.bh_curr = &(readbuf1.bh_first);
 	readbuf1.bh_space = 0;
     }
-    if (readbuf2.bh_first != NULL)
+    if (readbuf2.bh_first.b_next != NULL)
     {
-	readbuf2.bh_curr = readbuf2.bh_first;
+	readbuf2.bh_curr = &(readbuf2.bh_first);
 	readbuf2.bh_space = 0;
     }
 }
@@ -428,8 +418,8 @@
     int
 stuff_empty(void)
 {
-    return (readbuf1.bh_first == NULL
-	 && readbuf2.bh_first == NULL);
+    return (readbuf1.bh_first.b_next == NULL
+	 && readbuf2.bh_first.b_next == NULL);
 }
 
 /*
@@ -439,7 +429,7 @@
     int
 readbuf1_empty(void)
 {
-    return (readbuf1.bh_first == NULL);
+    return (readbuf1.bh_first.b_next == NULL);
 }
 
 /*
@@ -504,7 +494,7 @@
     {
 	free_buff(&old_redobuff);
 	old_redobuff = redobuff;
-	redobuff.bh_first = NULL;
+	redobuff.bh_first.b_next = NULL;
     }
 }
 
@@ -519,7 +509,7 @@
     {
 	free_buff(&redobuff);
 	redobuff = old_redobuff;
-	old_redobuff.bh_first = NULL;
+	old_redobuff.bh_first.b_next = NULL;
 	start_stuff();
 	while (read_readbuffers(TRUE) != NUL)
 	    ;
@@ -536,9 +526,9 @@
     char_u	*s;
 
     save_redo->sr_redobuff = redobuff;
-    redobuff.bh_first = NULL;
+    redobuff.bh_first.b_next = NULL;
     save_redo->sr_old_redobuff = old_redobuff;
-    old_redobuff.bh_first = NULL;
+    old_redobuff.bh_first.b_next = NULL;
 
     /* Make a copy, so that ":normal ." in a function works. */
     s = get_buffcont(&save_redo->sr_redobuff, FALSE);
@@ -757,9 +747,9 @@
     if (init)
     {
 	if (old_redo)
-	    bp = old_redobuff.bh_first;
+	    bp = old_redobuff.bh_first.b_next;
 	else
-	    bp = redobuff.bh_first;
+	    bp = redobuff.bh_first.b_next;
 	if (bp == NULL)
 	    return FAIL;
 	p = bp->b_str;
@@ -1382,9 +1372,9 @@
     old_char = -1;
 
     tp->save_readbuf1 = readbuf1;
-    readbuf1.bh_first = NULL;
+    readbuf1.bh_first.b_next = NULL;
     tp->save_readbuf2 = readbuf2;
-    readbuf2.bh_first = NULL;
+    readbuf2.bh_first.b_next = NULL;
 # ifdef USE_INPUT_BUF
     tp->save_inputbuf = get_input_buf();
 # endif
