diff --git a/src/input/lapd.c b/src/input/lapd.c
index d40b61c..22040cb 100644
--- a/src/input/lapd.c
+++ b/src/input/lapd.c
@@ -68,6 +68,39 @@
 #define LAPD_LEN(len)	((len << 2) | 0x1)
 #define LAPD_EL	0x1
 
+const struct lapd_profile lapd_profile_isdn = {
+	7, 0,
+	3,
+	260,
+	3,
+	1,0,
+	1,0,
+	10,0,
+	0
+};
+
+const struct lapd_profile lapd_profile_abis = {
+	1, 2,
+	3,
+	260,
+	3,
+	0,240000,
+	1,0,
+	10,0,
+	0
+};
+
+const struct lapd_profile lapd_profile_sat = {
+	15, 0,
+	5,
+	260,
+	5,
+	2,500000,
+	2,500000,
+	20,0,
+	1
+};
+
 typedef enum {
 	LAPD_TEI_NONE = 0,
 	LAPD_TEI_ASSIGNED,
@@ -162,9 +195,8 @@
 	struct lapd_sap *sap;
 	struct lapd_datalink *dl;
 	struct lapd_instance *li;
-	int profile;
-	int n201, k;
-	int t200_sec, t200_usec;
+	struct lapd_profile *profile;
+	int k;
 
 	sap = talloc_zero(teip, struct lapd_sap);
 	if (!sap)
@@ -177,41 +209,24 @@
 	sap->tei = teip;
 	dl = &sap->dl;
 	li = teip->li;
+	profile = &li->profile;
 
-	profile = li->profile;
-	switch (profile) {
-	case LAPD_PROFILE_ABIS:
-		n201 = 260;
-		t200_sec = 0; t200_usec = 240000;
-		if (sapi == 0)
-			k = 2;
-		else
-			k = 1;
-		break;
-	case LAPD_PROFILE_ASAT:
-		n201 = 260;
-		t200_sec = 2; t200_usec = 500000;
-		k = 15;
-		li->short_address = 1;
-		break;
-	case LAPD_PROFILE_ISDN:
-	default:
-		n201 = 260;
-		t200_sec = 1; t200_usec = 0;
-		k = 7;
-		break;
-	}
-
-	lapd_dl_init(dl, k, 128, n201);
+	if (sapi == 0 && profile->k_sapi0)
+		k = profile->k_sapi0;
+	else
+		k = profile->k;
+	lapd_dl_init(dl, k, 128, profile->n201);
 	dl->use_sabme = 1; /* use SABME instead of SABM (GSM) */
 	dl->send_ph_data_req = send_ph_data_req;
 	dl->send_dlsap = send_dlsap;
+	dl->n200 = profile->n200;
+	dl->n200_est_rel = profile->n200;
+	dl->t200_sec = profile->t200_sec; dl->t200_usec = profile->t200_usec;
+	dl->t203_sec = profile->t203_sec; dl->t203_usec = profile->t203_usec;
 	dl->lctx.dl = &sap->dl;
 	dl->lctx.sapi = sapi;
 	dl->lctx.tei = teip->tei;
-	dl->lctx.n201 = n201;
-	dl->t200_sec = t200_sec;
-	dl->t200_usec = t200_usec;
+	dl->lctx.n201 = profile->n201;
 
 	lapd_set_mode(&sap->dl, (teip->li->network_side) ? LAPD_MODE_NETWORK
 							: LAPD_MODE_USER);
@@ -512,7 +527,7 @@
 		return -EINVAL;
 	}
 	/* address field */
-	if (li->short_address && lctx->tei == 0)
+	if (li->profile.short_address && lctx->tei == 0)
 		addr_len = 1;
 	else
 		addr_len = 2;
@@ -570,7 +585,7 @@
 	void (*tx_cb)(struct msgb *msg, void *cbdata), void *tx_cbdata,
 	void (*rx_cb)(struct osmo_dlsap_prim *odp, uint8_t tei, uint8_t sapi, 
 			void *rx_cbdata), void *rx_cbdata,
-	enum lapd_profile profile)
+	const struct lapd_profile *profile)
 {
 	struct lapd_instance *li;
 
@@ -583,7 +598,7 @@
 	li->transmit_cbdata = tx_cbdata;
 	li->receive_cb = rx_cb;
 	li->receive_cbdata = rx_cbdata;
-	li->profile = profile;
+	memcpy(&li->profile, profile, sizeof(li->profile));
 
 	INIT_LLIST_HEAD(&li->tei_list);
 
