#define MPLIST_KEY(plist) ((plist)->key)
 #define MPLIST_VAL(plist) ((plist)->val)
-#define MPLIST_VAL_MANAGED_P(plist) ((plist)->control.flag)
 #define MPLIST_NEXT(plist) ((plist)->next)
 #define MPLIST_TAIL_P(plist) ((plist)->key == Mnil)
 
 #define MPLIST_INTEGER_P(plist) (MPLIST_KEY (plist) == Minteger)
 #define MPLIST_PLIST_P(plist) (MPLIST_KEY (plist) == Mplist)
 
+#define MPLIST_NESTED_P(plist) \
+  (MPLIST_PLIST_P (plist) || (plist)->control.flag & 1)
+#define MPLIST_SET_NESTED_P(plist)     \
+  ((plist)->control.flag |= 1)
+
 #define MPLIST_SYMBOL(plist) ((MSymbol) MPLIST_VAL (plist))
 #define MPLIST_STRING(plist) ((char *) MPLIST_VAL (plist))
 #define MPLIST_MTEXT(plist) ((MText *) MPLIST_VAL (plist))
    : MPLIST_TAIL_P ((plist)->next->next) ? 2   \
    : mplist_length (plist))
 
+#define MPLIST_ADD_PLIST(PLIST, KEY, VAL) \
+  MPLIST_SET_NESTED_P (mplist_add ((PLIST), (KEY), (VAL)))
+#define MPLIST_PUSH_PLIST(PLIST, KEY, VAL) \
+  MPLIST_SET_NESTED_P (mplist_push ((PLIST), (KEY), (VAL)))
+#define MPLIST_PUT_PLIST(PLIST, KEY, VAL) \
+  MPLIST_SET_NESTED_P (mplist_put ((PLIST), (KEY), (VAL)))
+
 
 extern unsigned char hex_mnemonic[256];
 extern unsigned char escape_mnemonic[256];