diff --git a/openbsc/doc/examples/osmo-nitb/hsl/openbsc.cfg b/openbsc/doc/examples/osmo-nitb/hsl/openbsc.cfg
deleted file mode 100644
index b0af855..0000000
--- a/openbsc/doc/examples/osmo-nitb/hsl/openbsc.cfg
+++ /dev/null
@@ -1,90 +0,0 @@
-!
-! OpenBSC (0.9.11.261-32c0) configuration saved from vty
-!!
-password foo
-!
-line vty
- no login
-!
-e1_input
- e1_line 0 driver hsl
-network
- network country code 262
- mobile network code 42
- short name OpenBSC
- long name OpenBSC
- auth policy closed
- location updating reject cause 13
- encryption a5 0
- neci 1
- paging any use tch 0
- rrlp mode none
- mm info 0
- handover 0
- handover window rxlev averaging 10
- handover window rxqual averaging 1
- handover window rxlev neighbor averaging 10
- handover power budget interval 6
- handover power budget hysteresis 3
- handover maximum distance 9999
- timer t3101 10
- timer t3103 0
- timer t3105 0
- timer t3107 0
- timer t3109 4
- timer t3111 0
- timer t3113 60
- timer t3115 0
- timer t3117 0
- timer t3119 0
- timer t3122 0
- timer t3141 0
- dtx-used 1
- subscriber-keep-in-ram 0
- bts 0
-  type hsl_femto
-  band DCS1800
-  cell_identity 0
-  location_area_code 1
-  training_sequence_code 0
-  base_station_id_code 0
-  ms max power 15
-  cell reselection hysteresis 4
-  rxlev access min 0
-  channel allocator ascending
-  rach tx integer 9
-  rach max transmission 1
-  hsl serial-number 8303701
-  neighbor-list mode automatic
-  oml hsl line 0
-  gprs mode none
-  trx 0
-   rf_locked 0
-   arfcn 871
-   nominal power 23
-   max_power_red 20
-   rsl e1 tei 0
-    timeslot 0
-     phys_chan_config CCCH+SDCCH4
-     hopping enabled 0
-    timeslot 1
-     phys_chan_config TCH/F
-     hopping enabled 0
-    timeslot 2
-     phys_chan_config TCH/F
-     hopping enabled 0
-    timeslot 3
-     phys_chan_config TCH/F
-     hopping enabled 0
-    timeslot 4
-     phys_chan_config TCH/F
-     hopping enabled 0
-    timeslot 5
-     phys_chan_config TCH/F
-     hopping enabled 0
-    timeslot 6
-     phys_chan_config TCH/F
-     hopping enabled 0
-    timeslot 7
-     phys_chan_config TCH/F
-     hopping enabled 0
diff --git a/openbsc/include/openbsc/bss.h b/openbsc/include/openbsc/bss.h
index 1c6b5c3..49df547 100644
--- a/openbsc/include/openbsc/bss.h
+++ b/openbsc/include/openbsc/bss.h
@@ -13,7 +13,6 @@
 extern int bts_model_bs11_init(void);
 extern int bts_model_rbs2k_init(void);
 extern int bts_model_nanobts_init(void);
-extern int bts_model_hslfemto_init(void);
 extern int bts_model_nokia_site_init(void);
 extern int bts_model_sysmobts_init(void);
 #endif
diff --git a/openbsc/include/openbsc/gsm_data_shared.h b/openbsc/include/openbsc/gsm_data_shared.h
index a42b6bb..3ef1457 100644
--- a/openbsc/include/openbsc/gsm_data_shared.h
+++ b/openbsc/include/openbsc/gsm_data_shared.h
@@ -393,7 +393,6 @@
 	GSM_BTS_TYPE_BS11,
 	GSM_BTS_TYPE_NANOBTS,
 	GSM_BTS_TYPE_RBS2000,
-	GSM_BTS_TYPE_HSL_FEMTO,
 	GSM_BTS_TYPE_NOKIA_SITE,
 	GSM_BTS_TYPE_OSMO_SYSMO,
 	_NUM_GSM_BTS_TYPE
@@ -631,9 +630,6 @@
 			} tf;
 		} rbs2000;
 		struct {
-			unsigned long serno;
-		} hsl;
-		struct {
 			uint8_t bts_type;
 			unsigned int configured:1,
 				skip_reset:1,
diff --git a/openbsc/osmoappdesc.py b/openbsc/osmoappdesc.py
index 19ec6c3..9d6fbe6 100644
--- a/openbsc/osmoappdesc.py
+++ b/openbsc/osmoappdesc.py
@@ -33,7 +33,7 @@
     "mgcp": ["doc/examples/osmo-bsc_mgcp/mgcp.cfg"],
     "gbproxy": ["doc/examples/osmo-gbproxy/osmo-gbproxy.cfg"],
     "sgsn": ["doc/examples/osmo-sgsn/osmo-sgsn.cfg"],
-    "nitb": ["doc/examples/osmo-nitb/hsl/openbsc.cfg",
+    "nitb": ["doc/examples/osmo-nitb/nanobts/openbsc-multitrx.cfg",
              "doc/examples/osmo-nitb/nanobts/openbsc.cfg"]
 }
 
@@ -47,6 +47,6 @@
         ]
 
 vty_command = ["./src/osmo-nitb/osmo-nitb", "-c",
-               "doc/examples/osmo-nitb/hsl/openbsc.cfg"]
+               "doc/examples/osmo-nitb/nanobts/openbsc.cfg"]
 
 vty_app = apps[-1]
diff --git a/openbsc/src/libbsc/Makefile.am b/openbsc/src/libbsc/Makefile.am
index f5b1ff1..42fabab 100644
--- a/openbsc/src/libbsc/Makefile.am
+++ b/openbsc/src/libbsc/Makefile.am
@@ -12,7 +12,6 @@
 			bts_ipaccess_nanobts.c \
 			bts_siemens_bs11.c \
 			bts_nokia_site.c \
-			bts_hsl_femtocell.c \
 			bts_unknown.c \
 			bts_sysmobts.c \
 			chan_alloc.c \
diff --git a/openbsc/src/libbsc/abis_nm.c b/openbsc/src/libbsc/abis_nm.c
index adc2362..ee1fc9c 100644
--- a/openbsc/src/libbsc/abis_nm.c
+++ b/openbsc/src/libbsc/abis_nm.c
@@ -632,10 +632,6 @@
 		osmo_signal_dispatch(SS_NM, S_NM_IPACC_RESTART_NACK, NULL);
 		break;
 	case NM_MT_SET_BTS_ATTR_ACK:
-		/* The HSL wants an OPSTART _after_ the SI has been set */
-		if (sign_link->trx->bts->type == GSM_BTS_TYPE_HSL_FEMTO) {
-			abis_nm_opstart(sign_link->trx->bts, NM_OC_BTS, 255, 255, 255);
-		}
 		break;
 	}
 
diff --git a/openbsc/src/libbsc/abis_rsl.c b/openbsc/src/libbsc/abis_rsl.c
index 7aae590..41bfcdc 100644
--- a/openbsc/src/libbsc/abis_rsl.c
+++ b/openbsc/src/libbsc/abis_rsl.c
@@ -722,12 +722,6 @@
 	rc =  abis_rsl_sendmsg(msg);
 
 	/* BTS will respond by RF CHAN REL ACK */
-#ifdef HSL_SR_1_0
-	/* The HSL Femto seems to 'forget' sending a REL ACK for TS1...TS7 */
-	if (lchan->ts->trx->bts->type == GSM_BTS_TYPE_HSL_FEMTO && lchan->ts->nr != 0)
-		rc = rsl_rx_rf_chan_rel_ack(lchan);
-#endif
-
 	return rc;
 }
 
diff --git a/openbsc/src/libbsc/bsc_init.c b/openbsc/src/libbsc/bsc_init.c
index 2fb4f13..8fd72cf 100644
--- a/openbsc/src/libbsc/bsc_init.c
+++ b/openbsc/src/libbsc/bsc_init.c
@@ -38,7 +38,6 @@
 
 /* global pointer to the gsm network data structure */
 extern struct gsm_network *bsc_gsmnet;
-extern int hsl_setup(struct gsm_network *gsmnet);
 
 /* Callback function for NACK on the OML NM */
 static int oml_msg_nack(struct nm_nack_signal_data *nack)
@@ -98,7 +97,7 @@
 static int rsl_si(struct gsm_bts_trx *trx, enum osmo_sysinfo_type i, int si_len)
 {
 	struct gsm_bts *bts = trx->bts;
-	int rc, j;
+	int rc;
 
 	DEBUGP(DRR, "SI%s: %s\n", get_value_string(osmo_sitype_strs, i),
 		osmo_hexdump(GSM_BTS_SI(bts, i), GSM_MACBLOCK_LEN));
@@ -108,26 +107,8 @@
 	case SYSINFO_TYPE_5bis:
 	case SYSINFO_TYPE_5ter:
 	case SYSINFO_TYPE_6:
-		if (trx->bts->type == GSM_BTS_TYPE_HSL_FEMTO) {
-			/* HSL has mistaken SACCH INFO MODIFY for SACCH FILLING,
-			 * so we need a special workaround here */
-			/* This assumes a combined BCCH and TCH on TS1...7 */
-			for (j = 0; j < 4; j++)
-				rsl_sacch_info_modify(&trx->ts[0].lchan[j],
-						      osmo_sitype2rsl(i),
-						      GSM_BTS_SI(bts, i), si_len);
-			for (j = 1; j < 8; j++) {
-				rsl_sacch_info_modify(&trx->ts[j].lchan[0],
-						      osmo_sitype2rsl(i),
-						      GSM_BTS_SI(bts, i), si_len);
-				rsl_sacch_info_modify(&trx->ts[j].lchan[1],
-						      osmo_sitype2rsl(i),
-						      GSM_BTS_SI(bts, i), si_len);
-			}
-			rc = 0;
-		} else
-			rc = rsl_sacch_filling(trx, osmo_sitype2rsl(i),
-					       GSM_BTS_SI(bts, i), si_len);
+		rc = rsl_sacch_filling(trx, osmo_sitype2rsl(i),
+				       GSM_BTS_SI(bts, i), si_len);
 		break;
 	default:
 		rc = rsl_bcch_info(trx, osmo_sitype2rsl(i),
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index b98ef15..6c58ff1 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -276,8 +276,6 @@
 		vty_out(vty, "  Unit ID: %u/%u/0, OML Stream ID 0x%02x%s",
 			bts->ip_access.site_id, bts->ip_access.bts_id,
 			bts->oml_tei, VTY_NEWLINE);
-	else if (bts->type == GSM_BTS_TYPE_HSL_FEMTO)
-		vty_out(vty, "  Serial Number: %lu%s", bts->hsl.serno, VTY_NEWLINE);
 	else if (bts->type == GSM_BTS_TYPE_NOKIA_SITE)
 		vty_out(vty, "  Skip Reset: %d%s",
 			bts->nokia.skip_reset, VTY_NEWLINE);
@@ -560,11 +558,6 @@
 		vty_out(vty, "  oml ip.access stream_id %u line %u%s",
 			bts->oml_tei, bts->oml_e1_link.e1_nr, VTY_NEWLINE);
 		break;
-	case GSM_BTS_TYPE_HSL_FEMTO:
-		vty_out(vty, "  hsl serial-number %lu%s", bts->hsl.serno, VTY_NEWLINE);
-		vty_out(vty, "  oml hsl line %u%s",
-			bts->oml_e1_link.e1_nr, VTY_NEWLINE);
-		break;
 	case GSM_BTS_TYPE_NOKIA_SITE:
 		vty_out(vty, "  nokia_site skip-reset %d%s", bts->nokia.skip_reset, VTY_NEWLINE);
 		break;
@@ -1665,25 +1658,6 @@
 }
 
 
-DEFUN(cfg_bts_serno,
-      cfg_bts_serno_cmd,
-      "hsl serial-number STRING",
-      "HSL BTS specific options\n"
-      "Set the HSL Serial Number of this BTS\n"
-      "Serial Number of this HSL BTS\n")
-{
-	struct gsm_bts *bts = vty->index;
-
-	if (bts->type != GSM_BTS_TYPE_HSL_FEMTO) {
-		vty_out(vty, "%% BTS is not of HSL type%s", VTY_NEWLINE);
-		return CMD_WARNING;
-	}
-
-	bts->hsl.serno = strtoul(argv[0], NULL, 10);
-
-	return CMD_SUCCESS;
-}
-
 DEFUN(cfg_bts_nokia_site_skip_reset,
       cfg_bts_nokia_site_skip_reset_cmd,
       "nokia_site skip-reset (0|1)",
@@ -1728,26 +1702,6 @@
 	return CMD_SUCCESS;
 }
 
-DEFUN(cfg_bts_hsl_oml,
-      cfg_bts_hsl_oml_cmd,
-      "oml hsl line E1_LINE",
-      OML_STR "HSL femto Specific Options\n"
-      "Set OML link of this HSL femto BTS\n"
-      "Virtual E1/T1 line number\n")
-{
-	struct gsm_bts *bts = vty->index;
-	int linenr = atoi(argv[0]);
-
-	if (!(bts->type == GSM_BTS_TYPE_HSL_FEMTO)) {
-		vty_out(vty, "%% BTS is not of HSL type%s", VTY_NEWLINE);
-		return CMD_WARNING;
-	}
-
-	bts->oml_e1_link.e1_nr = linenr;
-
-	return CMD_SUCCESS;
-}
-
 #define OML_E1_STR OML_STR "OML E1/T1 Configuration\n"
 
 DEFUN(cfg_bts_oml_e1,
@@ -3084,10 +3038,8 @@
 	install_element(BTS_NODE, &cfg_bts_rsl_ip_cmd);
 	install_element(BTS_NODE, &cfg_bts_timezone_cmd);
 	install_element(BTS_NODE, &cfg_bts_no_timezone_cmd);
-	install_element(BTS_NODE, &cfg_bts_serno_cmd);
 	install_element(BTS_NODE, &cfg_bts_nokia_site_skip_reset_cmd);
 	install_element(BTS_NODE, &cfg_bts_stream_id_cmd);
-	install_element(BTS_NODE, &cfg_bts_hsl_oml_cmd);
 	install_element(BTS_NODE, &cfg_bts_oml_e1_cmd);
 	install_element(BTS_NODE, &cfg_bts_oml_e1_tei_cmd);
 	install_element(BTS_NODE, &cfg_bts_challoc_cmd);
diff --git a/openbsc/src/libbsc/bts_hsl_femtocell.c b/openbsc/src/libbsc/bts_hsl_femtocell.c
deleted file mode 100644
index 1ce3eaa..0000000
--- a/openbsc/src/libbsc/bts_hsl_femtocell.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/* OpenBSC support code for HSL Femtocell */
-
-/* (C) 2011 by Harald Welte <laforge@gnumonks.org>
- * (C) 2011 by OnWaves
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <inttypes.h>
-
-#include <arpa/inet.h>
-
-#include <osmocom/gsm/tlv.h>
-#include <openbsc/gsm_data.h>
-#include <openbsc/abis_nm.h>
-#include <openbsc/abis_rsl.h>
-#include <openbsc/signal.h>
-#include <openbsc/debug.h>
-#include <osmocom/core/logging.h>
-#include <osmocom/abis/e1_input.h>
-#include <osmocom/abis/ipaccess.h>
-
-static int bts_model_hslfemto_start(struct gsm_network *net);
-static void bts_model_hslfemto_e1line_bind_ops(struct e1inp_line *line);
-
-static struct gsm_bts_model model_hslfemto = {
-	.type = GSM_BTS_TYPE_HSL_FEMTO,
-	.start = bts_model_hslfemto_start,
-	.e1line_bind_ops = &bts_model_hslfemto_e1line_bind_ops,
-	.nm_att_tlvdef = {
-		.def = {
-			/* no HSL specific OML attributes that we know of */
-		},
-	},
-};
-
-
-static const uint8_t l1_msg[] = {
-#ifdef HSL_SR_1_0
-	0x80, 0x8a,
-#else
-	0x81, 0x8a,
-#endif
-		0xC4, 0x0b,
-};
-
-static const uint8_t conn_trau_msg[] = {
-#ifdef HSL_SR_1_0
-	0x80, 0x81,
-#else
-	0x81, 0x81,
-#endif
-		0xC1, 16,
-			0x02, 0x00, 0x00, 0x00, 0xC0, 0xA8, 0xEA, 0x01,
-			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-static const uint8_t conn_trau_msg2[] = {
-#ifdef HSL_SR_1_0
-	0x80, 0x81,
-#else
-	0x81, 0x81,
-#endif
-		0xC1, 16,
-			0x02, 0x00, 0xd4, 0x07, 0xC0, 0xA8, 0xEA, 0x01,
-			0x38, 0xA4, 0x45, 0x00, 0x04, 0x59, 0x40, 0x00
-};
-
-static uint8_t oml_arfcn_bsic[] = {
-#ifdef HSL_SR_1_0
-	0x81, 0x80, 0x00, 10,
-#else
-	0x80, 0x80, 0x00, 10,
-#endif
-		NM_MT_SET_BTS_ATTR, NM_OC_BTS, 0xff, 0xff, 0xff,
-			NM_ATT_BCCH_ARFCN, 0x03, 0x67,
-			NM_ATT_BSIC, 0x00
-};
-
-static inline struct msgb *hsl_alloc_msgb(void)
-{
-	return msgb_alloc_headroom(1024, 127, "HSL");
-}
-
-static int hslfemto_bootstrap_om(struct gsm_bts *bts)
-{
-	struct msgb *msg;
-
-	msg = hsl_alloc_msgb();
-	msgb_put(msg, sizeof(l1_msg));
-	memcpy(msg->data, l1_msg, sizeof(l1_msg));
-	msg->dst = bts->c0->rsl_link;
-	abis_rsl_sendmsg(msg);
-
-#if 1
-	msg = hsl_alloc_msgb();
-	msgb_put(msg, sizeof(conn_trau_msg));
-	memcpy(msg->data, conn_trau_msg, sizeof(conn_trau_msg));
-	msg->dst = bts->c0->rsl_link;
-	abis_rsl_sendmsg(msg);
-#endif
-	msg = hsl_alloc_msgb();
-	msgb_put(msg, sizeof(conn_trau_msg2));
-	memcpy(msg->data, conn_trau_msg2, sizeof(conn_trau_msg2));
-	msg->dst = bts->c0->rsl_link;
-	abis_rsl_sendmsg(msg);
-
-	*((uint16_t *)oml_arfcn_bsic+10) = htons(bts->c0->arfcn);
-	oml_arfcn_bsic[13] = bts->bsic;
-
-	msg = hsl_alloc_msgb();
-	msgb_put(msg, sizeof(oml_arfcn_bsic));
-	memcpy(msg->data, oml_arfcn_bsic, sizeof(oml_arfcn_bsic));
-	msg->dst = bts->c0->rsl_link;
-	abis_sendmsg(msg);
-
-	/* Delay the OPSTART until after SI have been set via RSL */
-	//abis_nm_opstart(bts, NM_OC_BTS, 255, 255, 255);
-
-	return 0;
-}
-
-/* Callback function to be called every time we receive a signal from INPUT */
-static int inp_sig_cb(unsigned int subsys, unsigned int signal,
-		      void *handler_data, void *signal_data)
-{
-	struct input_signal_data *isd = signal_data;
-
-	if (subsys != SS_L_INPUT)
-		return 0;
-
-	switch (signal) {
-	case S_L_INP_TEI_UP:
-		switch (isd->link_type) {
-		case E1INP_SIGN_OML:
-			if (isd->trx->bts->type == GSM_BTS_TYPE_HSL_FEMTO)
-				hslfemto_bootstrap_om(isd->trx->bts);
-			break;
-		}
-	}
-
-	return 0;
-}
-
-static struct gsm_network *hsl_gsmnet;
-
-static int bts_model_hslfemto_start(struct gsm_network *net)
-{
-	model_hslfemto.features.data = &model_hslfemto._features_data[0];
-	model_hslfemto.features.data_len = sizeof(model_hslfemto._features_data);
-
-	gsm_btsmodel_set_feature(&model_hslfemto, BTS_FEAT_GPRS);
-	gsm_btsmodel_set_feature(&model_hslfemto, BTS_FEAT_EGPRS);
-
-	osmo_signal_register_handler(SS_L_INPUT, inp_sig_cb, NULL);
-
-	hsl_gsmnet = net;
-	return 0;
-}
-
-int bts_model_hslfemto_init(void)
-{
-	return gsm_bts_model_register(&model_hslfemto);
-}
-
-#define OML_UP		0x0001
-#define RSL_UP		0x0002
-
-struct gsm_bts *find_bts_by_serno(struct gsm_network *net, uint64_t serno)
-{
-	struct gsm_bts *bts;
-
-	llist_for_each_entry(bts, &net->bts_list, list) {
-		if (bts->type != GSM_BTS_TYPE_HSL_FEMTO)
-			continue;
-
-		if (serno == bts->hsl.serno)
-			return bts;
-	}
-	return NULL;
-}
-
-/* This function is called once the OML/RSL link becomes up. */
-static struct e1inp_sign_link *
-hsl_sign_link_up(void *unit_data, struct e1inp_line *line,
-		 enum e1inp_sign_type type)
-{
-	struct hsl_unit *dev = unit_data;
-	struct gsm_bts *bts;
-
-	bts = find_bts_by_serno(hsl_gsmnet, dev->serno);
-	if (!bts) {
-		LOGP(DLINP, LOGL_ERROR, "Unable to find BTS config for "
-				"serial number %"PRIx64"\n", dev->serno);
-		return NULL;
-	}
-	DEBUGP(DLINP, "Identified HSL BTS Serial Number %"PRIx64"\n", dev->serno);
-
-	/* we shouldn't hardcode it, but HSL femto also hardcodes it... */
-	bts->oml_tei = 255;
-	bts->c0->rsl_tei = 0;
-	bts->oml_link = e1inp_sign_link_create(&line->ts[E1INP_SIGN_OML-1],
-					       E1INP_SIGN_OML, bts->c0,
-					       bts->oml_tei, 0);
-	bts->c0->rsl_link = e1inp_sign_link_create(&line->ts[E1INP_SIGN_OML-1],
-						   E1INP_SIGN_RSL, bts->c0,
-						   bts->c0->rsl_tei, 0);
-	e1inp_event(&line->ts[E1INP_SIGN_OML-1], S_L_INP_TEI_UP, 255, 0);
-	e1inp_event(&line->ts[E1INP_SIGN_OML-1], S_L_INP_TEI_UP, 0, 0);
-	bts->ip_access.flags |= OML_UP;
-	bts->ip_access.flags |= (RSL_UP << 0);
-
-	return bts->oml_link;
-}
-
-void hsl_drop_oml(struct gsm_bts *bts)
-{
-	if (!bts->oml_link)
-		return;
-
-	e1inp_sign_link_destroy(bts->oml_link);
-	bts->oml_link = NULL;
-
-	e1inp_sign_link_destroy(bts->c0->rsl_link);
-	bts->c0->rsl_link = NULL;
-
-	bts->ip_access.flags = 0;
-}
-
-static void hsl_sign_link_down(struct e1inp_line *line)
-{
-	/* No matter what link went down, we close both signal links. */
-	struct e1inp_ts *ts = &line->ts[E1INP_SIGN_OML-1];
-	struct e1inp_sign_link *link;
-
-	llist_for_each_entry(link, &ts->sign.sign_links, list) {
-		struct gsm_bts *bts = link->trx->bts;
-
-		hsl_drop_oml(bts);
-		/* Yes, we only use the first element of the list. */
-		break;
-       }
-}
-
-/* This function is called if we receive one OML/RSL message. */
-static int hsl_sign_link(struct msgb *msg)
-{
-	int ret = 0;
-	struct e1inp_sign_link *link = msg->dst;
-	struct e1inp_ts *e1i_ts = link->ts;
-
-	switch (link->type) {
-	case E1INP_SIGN_OML:
-		if (!(link->trx->bts->ip_access.flags & OML_UP)) {
-			e1inp_event(e1i_ts, S_L_INP_TEI_UP,
-					link->tei, link->sapi);
-			link->trx->bts->ip_access.flags |= OML_UP;
-		}
-		ret = abis_nm_rcvmsg(msg);
-		break;
-	case E1INP_SIGN_RSL:
-		if (!(link->trx->bts->ip_access.flags &
-			(RSL_UP << link->trx->nr))) {
-			e1inp_event(e1i_ts, S_L_INP_TEI_UP,
-					link->tei, link->sapi);
-			link->trx->bts->ip_access.flags |=
-					(RSL_UP << link->trx->nr);
-		}
-		ret = abis_rsl_rcvmsg(msg);
-		break;
-	default:
-		LOGP(DLINP, LOGL_ERROR, "Unknown signal link type %d\n",
-			link->type);
-		msgb_free(msg);
-	break;
-	}
-	return ret;
-}
-
-static struct e1inp_line_ops hsl_e1inp_line_ops = {
-	.cfg = {
-		.ipa = {
-			.addr	= "0.0.0.0",
-			.role	= E1INP_LINE_R_BSC,
-		},
-	},
-       .sign_link_up	= hsl_sign_link_up,
-       .sign_link_down	= hsl_sign_link_down,
-       .sign_link	= hsl_sign_link,
-};
-
-static void bts_model_hslfemto_e1line_bind_ops(struct e1inp_line *line)
-{
-	e1inp_line_bind_ops(line, &hsl_e1inp_line_ops);
-}
diff --git a/openbsc/src/libbsc/bts_init.c b/openbsc/src/libbsc/bts_init.c
index ae41ecc..d6b152a 100644
--- a/openbsc/src/libbsc/bts_init.c
+++ b/openbsc/src/libbsc/bts_init.c
@@ -23,7 +23,6 @@
 	bts_model_bs11_init();
 	bts_model_rbs2k_init();
 	bts_model_nanobts_init();
-	bts_model_hslfemto_init();
 	bts_model_nokia_site_init();
 	bts_model_sysmobts_init();
 	/* Your new BTS here. */
diff --git a/openbsc/src/libbsc/e1_config.c b/openbsc/src/libbsc/e1_config.c
index d3dff48..d82b009 100644
--- a/openbsc/src/libbsc/e1_config.c
+++ b/openbsc/src/libbsc/e1_config.c
@@ -185,8 +185,7 @@
 
 	/* skip signal link initialization, this is done later for these BTS. */
 	if (bts->type == GSM_BTS_TYPE_NANOBTS ||
-	    bts->type == GSM_BTS_TYPE_OSMO_SYSMO ||
-	    bts->type == GSM_BTS_TYPE_HSL_FEMTO)
+	    bts->type == GSM_BTS_TYPE_OSMO_SYSMO)
 		return e1inp_line_update(line);
 
 	/* OML link */
diff --git a/openbsc/src/libbsc/system_information.c b/openbsc/src/libbsc/system_information.c
index 88b81dc..c901a4a 100644
--- a/openbsc/src/libbsc/system_information.c
+++ b/openbsc/src/libbsc/system_information.c
@@ -596,7 +596,6 @@
 	switch (bts->type) {
 	case GSM_BTS_TYPE_NANOBTS:
 	case GSM_BTS_TYPE_OSMO_SYSMO:
-	case GSM_BTS_TYPE_HSL_FEMTO:
 		*output++ = (l2_plen << 2) | 1;
 		l2_plen++;
 		break;
@@ -632,7 +631,6 @@
 	switch (bts->type) {
 	case GSM_BTS_TYPE_NANOBTS:
 	case GSM_BTS_TYPE_OSMO_SYSMO:
-	case GSM_BTS_TYPE_HSL_FEMTO:
 		*output++ = (l2_plen << 2) | 1;
 		l2_plen++;
 		break;
@@ -677,7 +675,6 @@
 	switch (bts->type) {
 	case GSM_BTS_TYPE_NANOBTS:
 	case GSM_BTS_TYPE_OSMO_SYSMO:
-	case GSM_BTS_TYPE_HSL_FEMTO:
 		*output++ = (l2_plen << 2) | 1;
 		l2_plen++;
 		break;
@@ -714,7 +711,6 @@
 	switch (bts->type) {
 	case GSM_BTS_TYPE_NANOBTS:
 	case GSM_BTS_TYPE_OSMO_SYSMO:
-	case GSM_BTS_TYPE_HSL_FEMTO:
 		*output++ = (l2_plen << 2) | 1;
 		l2_plen++;
 		break;
diff --git a/openbsc/src/libcommon/gsm_data.c b/openbsc/src/libcommon/gsm_data.c
index dd1d93b..5f7e32e 100644
--- a/openbsc/src/libcommon/gsm_data.c
+++ b/openbsc/src/libcommon/gsm_data.c
@@ -189,7 +189,6 @@
 	{ GSM_BTS_TYPE_BS11,	"bs11" },
 	{ GSM_BTS_TYPE_NANOBTS,	"nanobts" },
 	{ GSM_BTS_TYPE_RBS2000,	"rbs2000" },
-	{ GSM_BTS_TYPE_HSL_FEMTO, "hsl_femto" },
 	{ GSM_BTS_TYPE_NOKIA_SITE, "nokia_site" },
 	{ GSM_BTS_TYPE_OSMO_SYSMO, "sysmobts" },
 	{ 0,			NULL }
@@ -200,7 +199,6 @@
 	{ GSM_BTS_TYPE_BS11,		"Siemens BTS (BS-11 or compatible)" },
 	{ GSM_BTS_TYPE_NANOBTS,		"ip.access nanoBTS or compatible" },
 	{ GSM_BTS_TYPE_RBS2000,		"Ericsson RBS2000 Series" },
-	{ GSM_BTS_TYPE_HSL_FEMTO,	"HSL 2.75G femto" },
 	{ GSM_BTS_TYPE_NOKIA_SITE,	"Nokia {Metro,Ultra,In}Site" },
 	{ GSM_BTS_TYPE_OSMO_SYSMO,	"sysmocom sysmoBTS" },
 	{ 0,				NULL }
@@ -349,8 +347,6 @@
 	}
 
 	switch (bts->type) {
-	case GSM_BTS_TYPE_HSL_FEMTO:
-		bts->c0->rsl_tei = 0;
 	case GSM_BTS_TYPE_NANOBTS:
 	case GSM_BTS_TYPE_OSMO_SYSMO:
 		/* Set the default OML Stream ID to 0xff */
