diff --git a/src/e1_input.c b/src/e1_input.c
index 04c464a..93ab446 100644
--- a/src/e1_input.c
+++ b/src/e1_input.c
@@ -139,6 +139,40 @@
 osmo_static_assert(offsetof(struct fake_linux_lapd_header, protocol) == 14, proto_offset);
 osmo_static_assert(sizeof(struct fake_linux_lapd_header) == 16,	       lapd_header_size);
 
+int e1_set_pcap_fd2(struct e1inp_line *line, int fd)
+{
+	static const struct pcap_hdr header = {
+		.magic_number	= 0xa1b2c3d4,
+		.version_major	= 2,
+		.version_minor	= 4,
+		.thiszone	= 0,
+		.sigfigs	= 0,
+		.snaplen	= 65535,
+		.network	= DLT_LINUX_LAPD,
+	};
+	int i;
+
+	/* write header */
+	if (fd >= 0) {
+		int rc = write(fd, &header, sizeof(header));
+		if (rc < 0)
+			return rc;
+	}
+
+	/* Set the PCAP file descriptor for all timeslots that have
+	 * software LAPD instances, to ensure the osmo_lapd_pcap code is
+	 * used to write PCAP files (if requested) */
+	for (i = 0; i < ARRAY_SIZE(line->ts); i++) {
+		struct e1inp_ts *e1i_ts = &line->ts[i];
+		if (e1i_ts->lapd)
+			e1i_ts->lapd->pcap_fd = fd;
+	}
+	/* close previous and update */
+	if (line->pcap_fd >= 0)
+		close(line->pcap_fd);
+	line->pcap_fd = fd;
+	return 0;
+}
 
 static int pcap_fd = -1;
 
@@ -185,7 +219,7 @@
 
 /* This currently only works for the D-Channel */
 static void write_pcap_packet(int direction, int sapi, int tei,
-			      struct msgb *msg) {
+			      struct msgb *msg, int pcap_fd) {
 	if (pcap_fd < 0)
 		return;
 
@@ -286,7 +320,7 @@
 	 * the _actual_ LAPD packet */
 	if (!e1i_ts->lapd) {
 		write_pcap_packet(PCAP_OUTPUT, sign_link->sapi,
-				  sign_link->tei, msg);
+				  sign_link->tei, msg, e1i_ts->line->pcap_fd);
 	}
 
 	return 0;
@@ -460,6 +494,7 @@
 
 	line->driver = driver;
 	line->num = e1_nr;
+	line->pcap_fd = -1;
 
 	line->rate_ctr = rate_ctr_group_alloc(line, &e1inp_ctr_g_d, line->num);
 	if (!line->rate_ctr) {
@@ -664,7 +699,7 @@
 		 * the libosmocore LAPD implementation, it will take
 		 * care of writing the _actual_ LAPD packet */
 		if (!ts->lapd)
-			write_pcap_packet(PCAP_INPUT, sapi, tei, msg);
+			write_pcap_packet(PCAP_INPUT, sapi, tei, msg, ts->line->pcap_fd);
 		/* consult the list of signalling links */
 		link = e1inp_lookup_sign_link(ts, tei, sapi);
 		if (!link) {
@@ -901,7 +936,7 @@
 	for (i = 0; i < ARRAY_SIZE(line->ts); i++) {
 		struct e1inp_ts *e1i_ts = &line->ts[i];
 		if (e1i_ts->lapd)
-			e1i_ts->lapd->pcap_fd = pcap_fd;
+			e1i_ts->lapd->pcap_fd = line->pcap_fd;
 	}
 
 	/* Send a signal to anyone who is interested in new lines being
@@ -916,13 +951,16 @@
 static int e1i_sig_cb(unsigned int subsys, unsigned int signal,
 		      void *handler_data, void *signal_data)
 {
+	struct e1inp_line *line;
+
 	if (subsys != SS_L_GLOBAL ||
 	    signal != S_L_GLOBAL_SHUTDOWN)
 		return 0;
 
-	if (pcap_fd) {
-		close(pcap_fd);
-		pcap_fd = -1;
+	llist_for_each_entry(line, &e1inp_line_list, list) {
+		if (line->pcap_fd >=0)
+			close(line->pcap_fd);
+		line->pcap_fd = -1;
 	}
 
 	return 0;
diff --git a/src/e1_input_vty.c b/src/e1_input_vty.c
index d915c19..64f5f63 100644
--- a/src/e1_input_vty.c
+++ b/src/e1_input_vty.c
@@ -245,33 +245,67 @@
 	return CMD_SUCCESS;
 }
 
-DEFUN_ATTR(cfg_e1_pcap, cfg_e1_pcap_cmd,
-	   "pcap .FILE",
-	   "Setup a pcap recording of all E1 traffic\n"
+DEFUN_ATTR(cfg_e1line_pcap, cfg_e1line_pcap_cmd,
+	   "e1_line <0-255> pcap .FILE",
+	   E1_LINE_HELP "Setup a pcap recording of E1 traffic for line\n"
 	   "Filename to save the packets to\n", CMD_ATTR_IMMEDIATE)
 {
+	struct e1inp_line *line;
 	int fd;
+	int rc;
+	int e1_nr = atoi(argv[0]);
 
-	fd = open(argv[0], O_WRONLY | O_CREAT | O_TRUNC, 0660);
-	if (fd < 0) {
-		vty_out(vty, "Failed to setup E1 pcap recording to %s.%s", argv[0], VTY_NEWLINE);
+	line = e1inp_line_find(e1_nr);
+	if (!line) {
+		vty_out(vty, "%% Line %d doesn't exist%s", e1_nr, VTY_NEWLINE);
 		return CMD_WARNING;
 	}
 
-	e1_set_pcap_fd(fd);
+	fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0660);
+	if (fd < 0) {
+		vty_out(vty, "Failed to setup E1 pcap recording to %s%s", argv[1], VTY_NEWLINE);
+		return CMD_WARNING;
+	}
 
+	rc = e1_set_pcap_fd2(line, fd);
+	if (rc < 0) {
+		vty_out(vty, "Failed to write to E1 pcap file %s%s", argv[1], VTY_NEWLINE);
+		close(fd);
+		return CMD_WARNING;
+	}
+
+	osmo_talloc_replace_string(line, &line->pcap_file, argv[1]);
 	return CMD_SUCCESS;
 }
 
-DEFUN_ATTR(cfg_e1_no_pcap, cfg_e1_no_pcap_cmd,
-	   "no pcap",
-	   NO_STR "Disable pcap recording of all E1 traffic\n",
+DEFUN_ATTR(cfg_e1line_no_pcap, cfg_e1line_no_pcap_cmd,
+	   "no e1_line <0-255> pcap",
+	   NO_STR E1_LINE_HELP "Disable pcap recording of E1 traffic for line\n",
 	   CMD_ATTR_IMMEDIATE)
 {
-	e1_set_pcap_fd(-1);
+	struct e1inp_line *line;
+	int e1_nr = atoi(argv[0]);
+	line = e1inp_line_find(e1_nr);
+
+	e1_set_pcap_fd2(line, -1);
+	if (line->pcap_file) {
+		talloc_free(line->pcap_file);
+		line->pcap_file = NULL;
+	}
 	return CMD_SUCCESS;
 }
 
+DEFUN_DEPRECATED(cfg_e1_pcap_deprec, cfg_e1_pcap_deprec_cmd,
+	     "pcap .FILE", "Legacy")
+{
+	vty_out(vty, "%% 'pcap' is deprecated and has no effect: use e1_line <0-255> pcap%s",
+		VTY_NEWLINE);
+	return CMD_WARNING;
+}
+
+ALIAS_DEPRECATED(cfg_e1_pcap_deprec, cfg_e1_pcap_deprec_no_cmd,
+	     "no pcap", NO_STR);
+
 DEFUN_ATTR(cfg_e1inp, cfg_e1inp_cmd,
 	   "e1_input",
 	   "Configure E1/T1/J1 TDM input\n", CMD_ATTR_IMMEDIATE)
@@ -329,6 +363,9 @@
 			vty_out(vty, " e1_line %u ipa-keepalive %d %d%s", line->num,
 				line->ipa_kap->interval, line->ipa_kap->wait_for_resp,
 				VTY_NEWLINE);
+		if (line->pcap_file)
+			vty_out(vty, " e1_line %u pcap %s%s", line->num,
+				line->pcap_file, VTY_NEWLINE);
 	}
 
 	const char *ipa_bind = e1inp_ipa_get_bind_addr();
@@ -365,6 +402,8 @@
 	vty_out(vty, "E1 Line Number %u, Name %s, Driver %s%s",
 		line->num, line->name ? line->name : "",
 		line->driver->name, VTY_NEWLINE);
+	if (line->pcap_file)
+		vty_out(vty, "PCAP %s%s", line->pcap_file, VTY_NEWLINE);
 	if (line->driver->vty_show)
 		line->driver->vty_show(vty, line);
 	if (stats)
@@ -477,8 +516,10 @@
 	install_lib_element(CONFIG_NODE, &cfg_e1inp_cmd);
 	install_node(&e1inp_node, e1inp_config_write);
 
-	install_lib_element(L_E1INP_NODE, &cfg_e1_pcap_cmd);
-	install_lib_element(L_E1INP_NODE, &cfg_e1_no_pcap_cmd);
+	install_lib_element(L_E1INP_NODE, &cfg_e1line_pcap_cmd);
+	install_lib_element(L_E1INP_NODE, &cfg_e1line_no_pcap_cmd);
+	install_lib_element(L_E1INP_NODE, &cfg_e1_pcap_deprec_cmd);
+	install_lib_element(L_E1INP_NODE, &cfg_e1_pcap_deprec_no_cmd);
 
 	install_lib_element(L_E1INP_NODE, &cfg_e1_line_driver_cmd);
 	install_lib_element(L_E1INP_NODE, &cfg_e1_line_port_cmd);
