diff -urN radiusd.orig/src/include/radius.h radiusd/src/include/radius.h
--- radiusd.orig/src/include/radius.h	2005-11-28 22:47:01.000000000 +0100
+++ radiusd/src/include/radius.h	2006-01-18 08:41:37.000000000 +0100
@@ -89,6 +89,7 @@
 #define PW_ACCT_INPUT_PACKETS		47
 #define PW_ACCT_OUTPUT_PACKETS		48
 #define PW_ACCT_TERMINATE_CAUSE		49
+#define PW_ACCT_LINK_COUNT              51
 
 #define PW_EVENT_TIMESTAMP		55
 
diff -urN radiusd.orig/src/modules/rlm_sqlippool/rlm_sqlippool.c radiusd/src/modules/rlm_sqlippool/rlm_sqlippool.c
--- radiusd.orig/src/modules/rlm_sqlippool/rlm_sqlippool.c	2005-11-11 01:33:07.000000000 +0100
+++ radiusd/src/modules/rlm_sqlippool/rlm_sqlippool.c	2006-01-18 08:47:21.000000000 +0100
@@ -59,6 +59,7 @@
 				/* Start sequence */
 	char *start_begin;	/* SQL query to begin */
 	char *start_update;	/* SQL query to update an IP entry */
+	char *start_clear;      /* SQL query to clear an IP entry (for MPPP)*/
 	char *start_commit;	/* SQL query to commit */
 	char *start_rollback;	/* SQL query to rollback */
 
@@ -120,6 +121,7 @@
 
   { "start-begin", PW_TYPE_STRING_PTR, offsetof(rlm_sqlippool_t,start_begin), NULL, "BEGIN" },
   { "start-update", PW_TYPE_STRING_PTR, offsetof(rlm_sqlippool_t,start_update), NULL, "" },
+  { "start-clear", PW_TYPE_STRING_PTR, offsetof(rlm_sqlippool_t,start_clear), NULL, "" },
   { "start-commit", PW_TYPE_STRING_PTR, offsetof(rlm_sqlippool_t,start_commit), NULL, "COMMIT" },
   { "start-rollback", PW_TYPE_STRING_PTR, offsetof(rlm_sqlippool_t,start_rollback), NULL, "ROLLBACK" },
 
@@ -686,6 +688,12 @@
 		exit(0);
 	}
 
+	if (data->start_clear == NULL || strlen(data->start_update) == 0) {
+		radlog(L_ERR, "rlm_sqlippool: the 'start-clear' statement must be set.");
+		free(data);
+		exit(0);
+	}
+
 	if (data->alive_update == NULL || strlen(data->alive_update) == 0) {
 		radlog(L_ERR, "rlm_sqlippool: the 'alive-update' statement must be set.");
 		free(data);
@@ -868,6 +876,8 @@
 {
 	rlm_sqlippool_t * data = (rlm_sqlippool_t *) instance;
 	SQLSOCK * sqlsocket;
+	VALUE_PAIR 	*vp;
+	int		mppp = 0;
 
 	if (pairfind(request->packet->vps, PW_NAS_PORT) == NULL) {
 		DEBUG("rlm_ippool: Could not find port number in packet.");
@@ -879,6 +889,13 @@
 		return RLM_MODULE_NOOP;
 	}
 
+	if ((vp = pairfind(request->packet->vps, PW_ACCT_LINK_COUNT)) != NULL) {
+		if (vp->lvalue > 1) {
+			DEBUG("rlm_ippool: Acct-Link-Count > 1 found, mppp conntection");
+			mppp = 1;
+		}
+	}
+
 	sqlsocket = sql_get_socket(data->sql_inst);
 	if (sqlsocket == NULL) {
 		DEBUG("rlm_sqlippool: cannot allocate sql connection");
@@ -891,11 +908,22 @@
 	sqlippool_command(data->start_begin, sqlsocket, instance, request,
 			  (char *) NULL, 0);
 
-	/*
-	 * UPDATE
+	/* If this is an added link of an MPPP connection we
+	 * clear the ip we reserved in the postauth before.
 	 */
-	sqlippool_command(data->start_update, sqlsocket, instance, request,
-			  (char *) NULL, 0);
+	if (mppp) {
+		/*
+		 * CLEAR
+		 */
+		sqlippool_command(data->start_clear, sqlsocket, instance, request,
+			(char *) NULL, 0);
+	} else {
+		/*
+		 * UPDATE
+		 */
+		sqlippool_command(data->start_update, sqlsocket, instance, request,
+			(char *) NULL, 0);
+	}
 
 	/*
 	 * COMMIT
