added multi-inclusion guard