diff --git a/clutter/Makefile.am b/clutter/Makefile.am
index d9bd0a470..fd058e132 100644
--- a/clutter/Makefile.am
+++ b/clutter/Makefile.am
@@ -93,6 +93,7 @@ source_h = \
$(srcdir)/clutter-layout-manager.h \
$(srcdir)/clutter-layout-meta.h \
$(srcdir)/clutter-list-model.h \
+ $(srcdir)/clutter-macros.h \
$(srcdir)/clutter-main.h \
$(srcdir)/clutter-media.h \
$(srcdir)/clutter-model.h \
diff --git a/clutter/clutter-macros.h b/clutter/clutter-macros.h
new file mode 100644
index 000000000..8561ea35c
--- /dev/null
+++ b/clutter/clutter-macros.h
@@ -0,0 +1,56 @@
+/*
+ * Clutter.
+ *
+ * An OpenGL based 'interactive canvas' library.
+ *
+ * Copyright (C) 2012 Intel Corporation
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see .
+ */
+
+#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
+#error "Only can be included directly."
+#endif
+
+#ifndef __CLUTTER_MACROS_H__
+#define __CLUTTER_MACROS_H__
+
+/* these macros are used to mark deprecated functions, and thus have to be
+ * exposed in a public header.
+ *
+ * do *not* use them in other libraries depending on Clutter: use G_DEPRECATED
+ * and G_DEPRECATED_FOR, or use your own wrappers around them.
+ */
+#ifdef CLUTTER_DISABLE_DEPRECATION_WARNINGS
+#define CLUTTER_DEPRECATED
+#define CLUTTER_DEPRECATED_FOR(f)
+#else
+#define CLUTTER_DEPRECATED G_DEPRECATED
+#define CLUTTER_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f)
+#endif
+
+/* some structures are meant to be opaque and still be allocated on the stack;
+ * in order to avoid people poking at their internals, we use this macro to
+ * ensure that users don't accidentally access a struct private members.
+ *
+ * we use the CLUTTER_COMPILATION define to allow us easier access, though.
+ */
+#ifdef CLUTTER_COMPILATION
+#define CLUTTER_PRIVATE_FIELD(x) x
+#else
+#define CLUTTER_PRIVATE_FIELD(x) clutter_private_ ## x
+#endif
+
+
+#endif /* __CLUTTER_MACROS_H__ */
diff --git a/clutter/clutter-types.h b/clutter/clutter-types.h
index 0ec28afa4..90e9261fb 100644
--- a/clutter/clutter-types.h
+++ b/clutter/clutter-types.h
@@ -30,36 +30,11 @@
#include
+#include
#include
G_BEGIN_DECLS
-/* these macros are used to mark deprecated functions, and thus have to be
- * exposed in a public header.
- *
- * do *not* use them in other libraries depending on Clutter: use G_DEPRECATED
- * and G_DEPRECATED_FOR, or use your own wrappers around them.
- */
-#ifdef CLUTTER_DISABLE_DEPRECATION_WARNINGS
-#define CLUTTER_DEPRECATED
-#define CLUTTER_DEPRECATED_FOR(f)
-#else
-#define CLUTTER_DEPRECATED G_DEPRECATED
-#define CLUTTER_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f)
-#endif
-
-/* some structures are meant to be opaque and still be allocated on the stack;
- * in order to avoid people poking at their internals, we use this macro to
- * ensure that users don't accidentally access a struct private members.
- *
- * we use the CLUTTER_COMPILATION define to allow us easier access, though.
- */
-#ifdef CLUTTER_COMPILATION
-#define CLUTTER_PRIVATE_FIELD(x) x
-#else
-#define CLUTTER_PRIVATE_FIELD(x) clutter_private_ ## x
-#endif
-
#define CLUTTER_TYPE_ACTOR_BOX (clutter_actor_box_get_type ())
#define CLUTTER_TYPE_FOG (clutter_fog_get_type ())
#define CLUTTER_TYPE_GEOMETRY (clutter_geometry_get_type ())
diff --git a/clutter/clutter-version.h.in b/clutter/clutter-version.h.in
index a08d768aa..13d9bdfc8 100644
--- a/clutter/clutter-version.h.in
+++ b/clutter/clutter-version.h.in
@@ -23,6 +23,10 @@
*
*/
+#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
+#error "Only can be included directly."
+#endif
+
/**
* SECTION:clutter-version
* @short_description: Versioning utility macros
diff --git a/clutter/clutter.h b/clutter/clutter.h
index 47b5a34d1..7f5d51737 100644
--- a/clutter/clutter.h
+++ b/clutter/clutter.h
@@ -73,6 +73,7 @@
#include "clutter-layout-manager.h"
#include "clutter-layout-meta.h"
#include "clutter-list-model.h"
+#include "clutter-macros.h"
#include "clutter-main.h"
#include "clutter-media.h"
#include "clutter-model.h"