diff --git a/src/libknot/zone/zone.c b/src/libknot/zone/zone.c
index 54dd46b3527f523239abf68feb1438a02f71dcb0..65f810d1068d8f361f11e712f4f0c12d0c710c03 100644
--- a/src/libknot/zone/zone.c
+++ b/src/libknot/zone/zone.c
@@ -146,14 +146,18 @@ void knot_zone_set_version(knot_zone_t *zone, time_t version)
 
 short knot_zone_is_master(const knot_zone_t *zone)
 {
-	return zone->master;
+	return zone->flags & KNOT_ZONE_MASTER;
 }
 
 /*----------------------------------------------------------------------------*/
 
 void knot_zone_set_master(knot_zone_t *zone, short master)
 {
-	zone->master = master;
+	if (master) {
+		zone->flags |= KNOT_ZONE_MASTER;
+	} else {
+		zone->flags &= ~KNOT_ZONE_MASTER;
+	}
 }
 
 /*----------------------------------------------------------------------------*/
@@ -262,3 +266,14 @@ void knot_zone_set_dtor(knot_zone_t *zone, int (*dtor)(struct knot_zone *))
 		zone->dtor = dtor;
 	}
 }
+
+void knot_zone_set_flag(knot_zone_t *zone, knot_zone_flag_t flag, unsigned on)
+{
+	if (zone != NULL) {
+		if (on) {
+			zone->flags |= flag;
+		} else {
+			zone->flags &= ~flag;
+		}
+	}
+}
diff --git a/src/libknot/zone/zone.h b/src/libknot/zone/zone.h
index f528af9b8098a7702ebfd7d91320ec580c0a5293..68ff90dc0550ca157760dc6259dab122b59e7fd6 100644
--- a/src/libknot/zone/zone.h
+++ b/src/libknot/zone/zone.h
@@ -54,6 +54,15 @@ enum knot_zone_retvals {
 
 typedef enum knot_zone_retvals knot_zone_retvals_t;
 
+/*!
+ * \brief Zone flags.
+ */
+typedef enum knot_zone_flag_t {
+	KNOT_ZONE_SLAVE     = 0 << 0, /*! Slave zone */
+	KNOT_ZONE_MASTER    = 1 << 0, /*! Master zone. */
+	KNOT_ZONE_DISCARDED = 1 << 1  /*! Zone waiting to be discarded. */
+} knot_zone_flag_t;
+
 /*----------------------------------------------------------------------------*/
 
 /*!
@@ -71,8 +80,7 @@ struct knot_zone {
 
 	time_t version;
 
-	/*! \todo Set when loading zone. */
-	short master;
+	unsigned flags;
 
 	void *data; /*!< Pointer to generic zone-related data. */
 	int (*dtor)(struct knot_zone *); /*!< Data destructor. */
@@ -179,6 +187,24 @@ void knot_zone_set_dtor(knot_zone_t *zone, int (*dtor)(struct knot_zone *));
 	}
 }
 
+/*!
+ * \brief Return zone flags.
+ *
+ * \param zone Zone.
+ */
+static inline unsigned knot_zone_flags(knot_zone_t *zone) {
+	return zone->flags;
+}
+
+/*!
+ * \brief Set zone flag.
+ *
+ * \param zone Zone.
+ * \param flag Respected flag.
+ * \param on 1 to set, 0 to unset flag.
+ */
+void knot_zone_set_flag(knot_zone_t *zone, knot_zone_flag_t flag, unsigned on);
+
 #endif
 
 /*! @} */