 -	return ret;
 -}
 -
+-static const enum batadv_nl_attrs parse_orig_list_mandatory[] = {
+-	BATADV_ATTR_ORIG_ADDRESS,
+-	BATADV_ATTR_NEIGH_ADDRESS,
+-	BATADV_ATTR_TQ,
+-	BATADV_ATTR_HARD_IFINDEX,
+-	BATADV_ATTR_LAST_SEEN_MSECS,
+-};
+-
+-static int parse_orig_list_netlink_cb(struct nl_msg *msg, void *arg)
+-{
+-	struct nlattr *attrs[BATADV_ATTR_MAX+1];
+-	struct nlmsghdr *nlh = nlmsg_hdr(msg);
+-	struct batadv_nlquery_opts *query_opts = arg;
+-	struct genlmsghdr *ghdr;
+-	uint8_t *orig;
+-	uint8_t *dest;
+-	uint8_t tq;
+-	uint32_t hardif;
+-	uint32_t lastseen;
+-	char ifname_buf[IF_NAMESIZE], *ifname;
+-	struct neigh_netlink_opts *opts;
+-	char mac1[18];
+-
+-	opts = container_of(query_opts, struct neigh_netlink_opts, query_opts);
+-
+-	if (!genlmsg_valid_hdr(nlh, 0))
+-		return NL_OK;
+-
+-	ghdr = nlmsg_data(nlh);
+-
+-	if (ghdr->cmd != BATADV_CMD_GET_ORIGINATORS)
+-		return NL_OK;
+-
+-	if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
+-		      genlmsg_len(ghdr), batadv_netlink_policy))
+-		return NL_OK;
+-
+-	if (batadv_nl_missing_attrs(attrs, parse_orig_list_mandatory,
+-				    ARRAY_SIZE(parse_orig_list_mandatory)))
+-		return NL_OK;
+-
+-	if (!attrs[BATADV_ATTR_FLAG_BEST])
+-		return NL_OK;
+-
+-	orig = nla_data(attrs[BATADV_ATTR_ORIG_ADDRESS]);
+-	dest = nla_data(attrs[BATADV_ATTR_NEIGH_ADDRESS]);
+-	tq = nla_get_u8(attrs[BATADV_ATTR_TQ]);
+-	hardif = nla_get_u32(attrs[BATADV_ATTR_HARD_IFINDEX]);
+-	lastseen = nla_get_u32(attrs[BATADV_ATTR_LAST_SEEN_MSECS]);
+-
+-	if (memcmp(orig, dest, 6) != 0)
+-		return NL_OK;
+-
+-	ifname = if_indextoname(hardif, ifname_buf);
+-	if (!ifname)
+-		return NL_OK;
+-
+-	sprintf(mac1, "%02x:%02x:%02x:%02x:%02x:%02x",
+-		orig[0], orig[1], orig[2], orig[3], orig[4], orig[5]);
+-
+-	struct json_object *obj = json_object_new_object();
+-	if (!obj)
+-		return NL_OK;
+-
+-	struct json_object *interface;
+-	if (!json_object_object_get_ex(opts->interfaces, ifname, &interface)) {
+-		interface = json_object_new_object();
+-		json_object_object_add(opts->interfaces, ifname, interface);
+-	}
+-
+-	json_object_object_add(obj, "tq", json_object_new_int(tq));
+-	json_object_object_add(obj, "lastseen", json_object_new_double(lastseen / 1000.));
+-	json_object_object_add(interface, mac1, obj);
+-
+-	return NL_OK;
+-}
+-
 -static struct json_object * get_batadv(void) {
--	FILE *f = fopen("/tmp/batman-adv-visdata/bat0/originators", "r");
--	if (!f)
+-	struct neigh_netlink_opts opts = {
+-		.query_opts = {
+-			.err = 0,
+-		},
+-	};
+-	int ret;
+-
+-	opts.interfaces = json_object_new_object();
+-	if (!opts.interfaces)
 -		return NULL;
 -
--	char *line = NULL;
--	size_t len = 0;
--
--	struct json_object *interfaces = json_object_new_object();
--
--	while (getline(&line, &len, f) >= 0) {
--		char mac1[18], mac2[18];
--		/* IF_NAMESIZE would be enough, but adding 1 here is simpler than subtracting 1 in the format string */
--		char ifname[IF_NAMESIZE+1];
--		double lastseen;
--		int tq;
--
--		if (sscanf(line,
--			   "%17[0-9a-fA-F:] %lfs ( %i ) %17[0-9a-fA-F:] [ %"STRINGIFY(IF_NAMESIZE)"[^]] ]",
--			   mac1, &lastseen, &tq, mac2, ifname) != 5)
--			continue;
--
--		if (strcmp(mac1, mac2))
--			continue;
--
--		struct json_object *interface;
--		if (!json_object_object_get_ex(interfaces, ifname, &interface)) {
--			interface = json_object_new_object();
--			json_object_object_add(interfaces, ifname, interface);
--		}
--
--		struct json_object *obj = json_object_new_object();
--		json_object_object_add(obj, "tq", json_object_new_int(tq));
--		json_object_object_add(obj, "lastseen", json_object_new_double(lastseen));
--		json_object_object_add(interface, mac1, obj);
--	}
--
--	fclose(f);
--	free(line);
--
--	return ifnames2addrs(interfaces);
+-	ret = batadv_nl_query_common("bat0", BATADV_CMD_GET_ORIGINATORS,
+-				     parse_orig_list_netlink_cb, NLM_F_DUMP,
+-				     &opts.query_opts);
+-	if (ret < 0) {
+-		json_object_put(opts.interfaces);
+-		return NULL;
+-	}
+-
+-	return ifnames2addrs(opts.interfaces);
 -}
 -
 -static struct json_object * get_wifi_neighbours(const char *ifname) {

-	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -shared -fPIC -D_GNU_SOURCE -o $@ $^ $(LDLIBS) -lgluonutil -luci
diff --git a/package/gluon-mesh-vpn-fastd/src/respondd.c b/package/gluon-mesh-vpn-fastd/src/respondd.c
deleted file mode 100644
index 3045c77..0000000
--- a/package/gluon-mesh-vpn-fastd/src/respondd.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
-  Copyright (c) 2016, Matthias Schiffer <mschiffer@universe-factory.net>
-  All rights reserved.

 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
-PKG_BUILD_DEPENDS := respondd
 
 include ../gluon.mk
 
@@ -14,7 +13,7 @@ define Package/gluon-status-page-api
   SECTION:=gluon
   CATEGORY:=Gluon
   TITLE:=API for gluon-status-page
-  DEPENDS:=+gluon-core +uhttpd +sse-multiplex +gluon-neighbour-info +gluon-respondd +libiwinfo +libjson-c +libnl-tiny +libubus-lua
+  DEPENDS:=+gluon-core +uhttpd +sse-multiplex +gluon-neighbour-info +libiwinfo +libjson-c +libubus-lua
 endef
 
 define Build/Prepare
@@ -32,9 +31,6 @@ define Package/gluon-status-page-api/install
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/neighbours-batadv $(1)/lib/gluon/status-page/providers/
 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/stations $(1)/lib/gluon/status-page/providers/
 
