diff -urN openwrt.orig/target/linux/ar71xx/base-files/lib/ar71xx.sh openwrt/target/linux/ar71xx/base-files/lib/ar71xx.sh
--- openwrt.orig/target/linux/ar71xx/base-files/lib/ar71xx.sh	2015-03-07 18:28:11.000000000 +0300
+++ openwrt/target/linux/ar71xx/base-files/lib/ar71xx.sh	2015-03-07 20:56:47.000000000 +0300
@@ -220,6 +220,12 @@
 	"49000002")
 		model="TP-Link TL-WDR4900"
 		;;
+	"75000001")
+		model="TP-Link ARCHER C7"
+		;;
+	"75000002")
+		model="TP-Link TL-WDR7500"
+		;;
 	"453000"*)
 		model="MERCURY MW4530R"
 		;;
@@ -338,7 +344,7 @@
 	*"Archer C5")
 		name="archer-c5"
 		;;
-	*"Archer C7")
+	*"Archer C7 / TL-WDR7500")
 		name="archer-c7"
 		;;
 	*"Atheros AP96")
diff -urN openwrt.orig/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7.c openwrt/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7.c
--- openwrt.orig/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7.c	2015-03-07 18:28:11.000000000 +0300
+++ openwrt/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c7.c	2015-03-07 20:56:47.000000000 +0300
@@ -253,7 +253,7 @@
 	common_setup(true);
 }
 
-MIPS_MACHINE(ATH79_MACH_ARCHER_C7, "ARCHER-C7", "TP-LINK Archer C7",
+MIPS_MACHINE(ATH79_MACH_ARCHER_C7, "ARCHER-C7", "TP-LINK Archer C7 / TL-WDR7500",
 	     archer_c7_setup);
 
 static void __init tl_wdr4900_v2_setup(void)
diff -urN openwrt.orig/target/linux/ar71xx/files/drivers/mtd/tplinkpart.c openwrt/target/linux/ar71xx/files/drivers/mtd/tplinkpart.c
--- openwrt.orig/target/linux/ar71xx/files/drivers/mtd/tplinkpart.c	2015-03-07 18:28:11.000000000 +0300
+++ openwrt/target/linux/ar71xx/files/drivers/mtd/tplinkpart.c	2015-03-07 20:56:47.000000000 +0300
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org>
+ * Copyright (C) 2013 NoSFeRaTU   <master.nosferatu@gmail.com>
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 as published
@@ -18,6 +19,7 @@
 
 #define TPLINK_NUM_PARTS	5
 #define TPLINK_HEADER_V1	0x01000000
+#define TPLINK_HEADER_V2	0x02000000
 #define MD5SUM_LEN		16
 
 #define TPLINK_ART_LEN		0x10000
@@ -29,11 +31,11 @@
 	char		fw_version[36];
 	uint32_t	hw_id;		/* hardware id */
 	uint32_t	hw_rev;		/* hardware revision */
-	uint32_t	unk1;
+	uint32_t	padding1;
 	uint8_t		md5sum1[MD5SUM_LEN];
-	uint32_t	unk2;
+	uint32_t	padding2;
 	uint8_t		md5sum2[MD5SUM_LEN];
-	uint32_t	unk3;
+	uint32_t	padding3;
 	uint32_t	kernel_la;	/* kernel load address */
 	uint32_t	kernel_ep;	/* kernel entry point */
 	uint32_t	fw_length;	/* total length of the firmware */
@@ -46,10 +48,43 @@
 	uint8_t		pad[360];
 } __attribute__ ((packed));
 
-static struct tplink_fw_header *
+struct tplink_fw_header_v2 {
+	uint32_t	version;	/* header version */
+	char		vendor_name[24];
+	char		fw_version[36];
+	uint32_t	hw_id;		/* hardware id */
+	uint32_t	hw_rev;		/* hardware revision */
+	uint32_t	padding1;
+	uint8_t		md5sum1[MD5SUM_LEN];
+	uint32_t	padding2;
+	uint8_t		md5sum2[MD5SUM_LEN];
+	uint32_t	padding3;
+	uint32_t	kernel_la;	/* kernel load address */
+	uint32_t	kernel_ep;	/* kernel entry point */
+	uint32_t	fw_length;	/* total length of the firmware */
+	uint32_t	kernel_ofs;	/* kernel data offset */
+	uint32_t	kernel_len;	/* kernel data length */
+	uint32_t	rootfs_ofs;	/* rootfs data offset */
+	uint32_t	rootfs_len;	/* rootfs data length */
+	uint32_t	boot_ofs;	/* bootloader data offset */
+	uint32_t	boot_len;	/* bootloader data length */
+	uint16_t	unknown1;
+	uint8_t		rsakey[128];
+	uint8_t		pad[224];
+} __attribute__ ((packed));
+
+struct tplink_fw_abstract_header {
+	uint32_t	version;
+	uint32_t	kernel_len;
+	uint32_t	rootfs_ofs;
+} __attribute__ ((packed));
+
+static struct tplink_fw_abstract_header *
 tplink_read_header(struct mtd_info *mtd, size_t offset)
 {
-	struct tplink_fw_header *header;
+	struct tplink_fw_header *headerv1;
+	struct tplink_fw_header_v2 *headerv2;
+	struct tplink_fw_abstract_header *header;
 	size_t header_len;
 	size_t retlen;
 	int ret;
@@ -58,24 +93,64 @@
 	header = vmalloc(sizeof(*header));
 	if (!header)
 		goto err;
+	
+	ret = mtd_read(mtd, offset, sizeof(uint32_t), &retlen,
+		(unsigned char *) header);
 
-	header_len = sizeof(struct tplink_fw_header);
-	ret = mtd_read(mtd, offset, header_len, &retlen,
-		       (unsigned char *) header);
 	if (ret)
 		goto err_free_header;
 
-	if (retlen != header_len)
+	if (retlen != sizeof(uint32_t))
 		goto err_free_header;
 
 	/* sanity checks */
 	t = be32_to_cpu(header->version);
-	if (t != TPLINK_HEADER_V1)
-		goto err_free_header;
+	if (t == TPLINK_HEADER_V1)
+	{
+		printk(KERN_INFO "MTD TP-Link parser v1 header found!\n");
+		headerv1 = vmalloc(sizeof(*headerv1));
+		if (!headerv1)
+			goto err;
+
+        	header_len = sizeof(struct tplink_fw_header);
+    		ret = mtd_read(mtd, offset, header_len, &retlen,
+			(unsigned char *) headerv1);
+
+		if (ret)
+			goto err_free_header;
 
-	t = be32_to_cpu(header->kernel_ofs);
-	if (t != header_len)
-		goto err_free_header;
+		if (retlen != header_len)
+			goto err_free_header;
+
+		header->kernel_len = headerv1->kernel_len;
+		header->rootfs_ofs = headerv1->rootfs_ofs;
+
+		vfree(headerv1);
+	}
+	else if (t == TPLINK_HEADER_V2)
+	{
+		printk(KERN_INFO "MTD TP-Link parser v2 header found!\n");
+		headerv2 = vmalloc(sizeof(*headerv2));
+		if (!headerv2)
+			goto err;
+
+		header_len = sizeof(struct tplink_fw_header_v2);
+    		ret = mtd_read(mtd, offset, header_len, &retlen,
+			(unsigned char *) headerv2);
+
+		if (ret)
+			goto err_free_header;
+
+		if (retlen != header_len)
+			goto err_free_header;
+
+		header->kernel_len = headerv2->kernel_len;
+		header->rootfs_ofs = headerv2->rootfs_ofs;
+	    
+		vfree(headerv2);
+	}
+	else
+	    goto err_free_header;
 
 	return header;
 
@@ -111,7 +186,7 @@
 				   struct mtd_part_parser_data *data)
 {
 	struct mtd_partition *parts;
-	struct tplink_fw_header *header;
+	struct tplink_fw_abstract_header *header;
 	int nr_parts;
 	size_t offset;
 	size_t art_offset;
@@ -130,6 +205,7 @@
 
 	header = tplink_read_header(master, offset);
 	if (!header) {
+	        printk(KERN_WARNING "MTD TP-Link parser no header found: %s\n", master->name);
 		pr_notice("%s: no TP-Link header found\n", master->name);
 		ret = -ENODEV;
 		goto err_free_parts;
@@ -197,3 +273,4 @@
 
 MODULE_LICENSE("GPL v2");
 MODULE_AUTHOR("Gabor Juhos <juhosg@openwrt.org>");
+MODULE_AUTHOR("NoSFeRaTU <master.nosferatu@gmail.com>");
diff -urN openwrt.orig/target/linux/ar71xx/generic/profiles/tp-link.mk openwrt/target/linux/ar71xx/generic/profiles/tp-link.mk
--- openwrt.orig/target/linux/ar71xx/generic/profiles/tp-link.mk	2015-03-07 18:28:11.000000000 +0300
+++ openwrt/target/linux/ar71xx/generic/profiles/tp-link.mk	2015-03-07 21:01:53.000000000 +0300
@@ -6,12 +6,12 @@
 #
 
 define Profile/ARCHERC7
-	NAME:=TP-LINK Archer C5/C7
+	NAME:=TP-LINK Archer C5/C7 / TL-WDR7500
 	PACKAGES:=kmod-usb-core kmod-usb2 kmod-ledtrig-usbdev kmod-ath10k
 endef
 
 define Profile/ARCHERC7/Description
-	Package set optimized for the TP-LINK Archer C5/C7.
+	Package set optimized for the TP-LINK Archer C5/C7 / TL-WDR7500.
 endef
 $(eval $(call Profile,ARCHERC7))
 
diff -urN openwrt.orig/target/linux/ar71xx/image/Makefile openwrt/target/linux/ar71xx/image/Makefile
--- openwrt.orig/target/linux/ar71xx/image/Makefile	2015-03-07 18:28:11.000000000 +0300
+++ openwrt/target/linux/ar71xx/image/Makefile	2015-03-07 21:00:48.000000000 +0300
@@ -1425,6 +1425,7 @@
 $(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWDR4300V1IL,tl-wdr4300-v1-il,TL-WDR4300,ttyS0,115200,0x43008001,1,8Mlzma))
 $(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWDR4310V1,tl-wdr4310-v1,TL-WDR4300,ttyS0,115200,0x43100001,1,8Mlzma))
 $(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWDR4900V2,tl-wdr4900-v2,TL-WDR4900-v2,ttyS0,115200,0x49000002,1,8Mlzma))
+$(eval $(call SingleProfile,TPLINK-LZMA,64kraw,TLWDR7500V2,tl-wdr7500-v2,ARCHER-C7,ttyS0,115200,0x75000002,1,8Mlzma))
 $(eval $(call SingleProfile,TPLINK-LZMA,64kraw,MW4530RV1,mw4530r-v1,TL-WDR4300,ttyS0,115200,0x45300001,1,8Mlzma))
 
 $(eval $(call SingleProfile,TPLINK-SAFELOADER,64kraw,CPE510,cpe210-220-510-520,CPE510,ttyS0,115200,$$(cpe510_mtdlayout),CPE510))
@@ -1474,7 +1475,7 @@
 
 $(eval $(call MultiProfile,AP121,AP121_2M AP121_4M))
 $(eval $(call MultiProfile,AP136,AP136_010 AP136_020))
-$(eval $(call MultiProfile,ARCHERC7, ARCHERC5 ARCHERC7V1 ARCHERC7V2))
+$(eval $(call MultiProfile,ARCHERC7, ARCHERC5 ARCHERC7V1 ARCHERC7V2 TLWDR7500V2))
 $(eval $(call MultiProfile,EWDORIN, EWDORINAP EWDORINRT EWDORIN16M))
 $(eval $(call MultiProfile,OPENMESH,OM2P OM5P MR600 MR900))
 $(eval $(call MultiProfile,GLINET,GLINET6408A GLINET6416A))
