diff --git a/ChangeLog b/ChangeLog
index 4796a2e1de82a85d40480c1cfb313371077174d5..70bb6a3cdcf0ae5e208316cc1230c37d69a51e74 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,15 @@ Owner:		Ben Laughton
 Project(s):	Daytona, NC, Desktop machines.
 *******************************************************************************
 
+===============================================================================
+Version:	1_21
+Date:		1998-05-12
+Name:		Ben Laughton
+CVS tag:	PPP-1_21
+
+Fixed bug in dual serial version where PPP could block heavily if you
+got unlucky with the data transfer rate (ie. compression is a factor).
+
 ===============================================================================
 Version:	1_20
 Date:		1998-04-28
diff --git a/VersionASM b/VersionASM
index 5692265ea8174f95bef94f1e51bfb37adf4aeaef..0e84726eca3f2de556bd74a9b74d8ecba04a58b1 100644
--- a/VersionASM
+++ b/VersionASM
@@ -5,8 +5,8 @@
 			GBLA    Module_Version
 			GBLS	Module_MinorVersion
 			GBLS	Module_Date
-Module_MajorVersion	SETS    "1.20"
-Module_Version          SETA    120
+Module_MajorVersion	SETS    "1.21"
+Module_Version          SETA    121
 Module_MinorVersion	SETS	""
-Module_Date		SETS    "28 Apr 1998"
+Module_Date		SETS    "12 May 1998"
 		        END
diff --git a/VersionNum b/VersionNum
index c6a60faefe2ce32558b3e5b291d5bd374120a394..6a331dddcfb9770cc37fa1cff00a5ad22705ec6f 100644
--- a/VersionNum
+++ b/VersionNum
@@ -1,14 +1,14 @@
-/* (1.20)
+/* (1.21)
  *
  * This file is automatically maintained by srccommit, do not edit manually.
  *
  */
-#define Module_MajorVersion_CMHG     	1.20
+#define Module_MajorVersion_CMHG     	1.21
 #define Module_MinorVersion_CMHG	
-#define Module_Date_CMHG      		28 Apr 1998
+#define Module_Date_CMHG      		12 May 1998
 
-#define Module_MajorVersion     	"1.20"
-#define Module_Version                  120
+#define Module_MajorVersion     	"1.21"
+#define Module_Version                  121
 #define Module_MinorVersion		""
-#define Module_Date      		"28 Apr 1998"
+#define Module_Date      		"12 May 1998"
 
diff --git a/c/serial b/c/serial
index 76b1b4aadd903fd9d0b69b436c5fd78dd92ee860..74396ca3ce00b187666edc6d21a2692e99ab51c5 100644
--- a/c/serial
+++ b/c/serial
@@ -20,6 +20,12 @@
  * Idle timer was mistakenly being incremented twice in hangup check handler.
  * Removed reliance on Dialler for hangup check if dialler option is used on
  * command line.
+ *
+ * 1998-05-12: BAL
+ * Fixed bug in dual serial poll_handler: call to remove callback was passing
+ * address of handler function rather than veneer routine.  This call would
+ * obviously fail silently, but any pending callback would still go off.  This
+ * was resulting in PPP blocking heavily in certain situations.
  */
 #include <stdlib.h>
 #include <stdio.h>
@@ -384,77 +390,6 @@ _kernel_oserror *poll_handler(_kernel_swi_regs *r, void *pw)
 
 #else
 
-#if 0
-
-_kernel_oserror *poll_handler(_kernel_swi_regs *r, void *pw)
-{
-
-    char buffer[256], *p=buffer;
-    int bytes, bytes_not_done;
-
-    _kernel_irqs_on ();
-
-    callback_pending = 0;    /* no callbacks waiting */
-
-    NOT_USED(pw);
-    NOT_USED(r);
-
-    /* Read amount of data in serial input buffer */
-    _swix (OS_Args, _INR (0, 1) | _OUT (2), 2, serial_in, &bytes);
-
-    if (bytes > 0)
-    {
-        if (bytes > sizeof (buffer))
-            bytes = sizeof (buffer);
-
-        /* Read data from serial input buffer */
-        _swix (OS_GBPB, _INR (0, 3) | _OUT (3),
-               4, serial_in, buffer, bytes, &bytes_not_done);
-        bytes -= bytes_not_done;
-    }
-
-    while (bytes)
-    {
-        p = buffer;
-
-        while (bytes)
-        {
-            pppinput(*p, 0);
-            bytes--;
-            p++;
-        }
-
-        _swix (OS_Args, _INR (0, 1) | _OUT (2), 2, serial_in, &bytes);
-        if (bytes > 0)
-        {
-            /* If there is more data to read and a DeviceRxDataPresent upcall
-             * occurred while this function was executing then an upcall will
-             * have been added.  This is no longer necessary as the data it
-             * informed us about is just about to be read anyway, so remove the
-             * upcall.
-             */
-
-            if (callback_pending)
-            {
-                _swix (OS_RemoveCallBack, _INR (0, 1), poll_handler, pw);
-                callback_pending = 0;
-            }
-
-            if (bytes > sizeof (buffer))
-                bytes = sizeof (buffer);
-
-            _swix (OS_GBPB, _INR (0, 3) | _OUT (3),
-                   4, serial_in, buffer, bytes, &bytes_not_done);
-            bytes -= bytes_not_done;
-        }
-    }
-
-    return NULL;
-}
-
-#endif
-
-
 _kernel_oserror *poll_handler(_kernel_swi_regs *r, void *pw)
 {
 
@@ -521,7 +456,7 @@ _kernel_oserror *poll_handler(_kernel_swi_regs *r, void *pw)
             if (callback_pending)
             {
                 pdebug ((LOG_DEBUG, "about to remove callback"));
-                _swix (OS_RemoveCallBack, _INR (0, 1), poll_handler, pw);
+                _swix (OS_RemoveCallBack, _INR (0, 1), poll_entry, pw);
 
                 /* atomic update of callback pending flag */
                 interrupt_status = splhi ();