diff --git a/Makefile.am b/Makefile.am
index 14dbc41e5e..2a1fb4a541 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,8 +1,8 @@
DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc
-SUBDIRS = ges tests common m4
+SUBDIRS = ges tests common m4 docs
-DIST_SUBDIRS = ges tests common m4
+DIST_SUBDIRS = $(SUBDIRS)
# include before EXTRA_DIST for win32 assignment
#include $(top_srcdir)/common/win32.mak
diff --git a/configure.ac b/configure.ac
index d92036289d..e0db1f7c51 100644
--- a/configure.ac
+++ b/configure.ac
@@ -243,5 +243,8 @@ ges/Makefile
tests/Makefile
tests/check/Makefile
tests/examples/Makefile
+docs/Makefile
+docs/version.entities
+docs/libs/Makefile
)
AC_OUTPUT
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644
index 0000000000..f782512c1a
--- /dev/null
+++ b/docs/Makefile.am
@@ -0,0 +1,11 @@
+if ENABLE_GTK_DOC
+DOCS_SUBDIRS = libs
+else
+DOCS_SUBDIRS =
+endif
+
+SUBDIRS = $(DOCS_SUBDIRS)
+DIST_SUBDIRS = libs
+
+EXTRA_DIST = \
+ version.entities.in
diff --git a/docs/libs/Makefile.am b/docs/libs/Makefile.am
new file mode 100644
index 0000000000..70e19b09f8
--- /dev/null
+++ b/docs/libs/Makefile.am
@@ -0,0 +1,103 @@
+GST_DOC_SCANOBJ = $(top_srcdir)/common/gstdoc-scangobj
+
+## Process this file with automake to produce Makefile.in
+
+# The name of the module, e.g. 'glib'.
+MODULE=ges
+DOC_MODULE=$(MODULE)
+
+# for upload-doc.mak
+DOC=$(MODULE)
+FORMATS=html
+html: html-build.stamp
+include $(top_srcdir)/common/upload-doc.mak
+
+# generated basefiles
+#basefiles = \
+## $(DOC_MODULE).types \
+# $(DOC_MODULE)-sections.txt \
+# $(DOC_MODULE)-docs.sgml
+
+# ugly hack to make -unused.sgml work
+#unused-build.stamp:
+# BUILDDIR=`pwd` && \
+# cd $(srcdir)/tmpl && \
+# ln -sf gstreamer-libs-unused.sgml \
+# $$BUILDDIR/tmpl/gstreamer-libs-@GST_MAJORMINOR@-unused.sgml
+# touch unused-build.stamp
+
+# these rules are added to create parallel docs using GST_MAJORMINOR
+#$(basefiles): gstreamer-libs-@GST_MAJORMINOR@%: gstreamer-libs%
+# cp $< $@
+
+#CLEANFILES = $(basefiles)
+
+# The top-level SGML file. Change it if you want.
+DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.sgml
+
+# The directory containing the source code. Relative to $(top_srcdir).
+# gtk-doc will search all .c & .h files beneath here for inline comments
+# documenting functions and macros.
+DOC_SOURCE_DIR = $(top_srcdir)/ges/
+
+SCAN_OPTIONS=
+
+# FIXME :
+# there's something wrong with gstreamer-sections.txt not being in the dist
+# maybe it doesn't resolve; we're adding it below for now
+#EXTRA_DIST = gstreamer.types.in gstreamer.hierarchy $(DOC_MODULE)-sections.txt gstreamer-sections.txt $(DOC_MAIN_SGML_FILE)
+
+# Extra options to supply to gtkdoc-mkdb.
+MKDB_OPTIONS=--sgml-mode --source-suffixes=c,h,cc,m
+
+# Extra options to supply to gtkdoc-fixref.
+FIXXREF_OPTIONS=--extra-dir=$(GLIB_PREFIX)/share/gtk-doc/html \
+ --extra-dir=$(GST_PREFIX)/share/gtk-doc/html \
+ --extra-dir=$(GSTPB_PREFIX)/share/gtk-doc/html
+
+# Used for dependencies.
+HFILE_GLOB=$(DOC_SOURCE_DIR)/ges-*.h
+CFILE_GLOB=$(DOC_SOURCE_DIR)/ges-*.c
+
+SCANOBJ_DEPS =
+# Extra options to supply to gtkdoc-scan.
+SCANOBJ_OPTIONS=--type-init-func="g_type_init();gst_init(&argc,&argv)"
+
+# Header files to ignore when scanning.
+IGNORE_HFILES = gesmarshal.h ges-internal.h
+IGNORE_CFILES =
+
+# we add all .h files of elements that have signals/args we want
+# sadly this also pulls in the private methods - maybe we should
+# move those around in the source ?
+# also, we should add some stuff here conditionally based on whether
+# or not the plugin will actually build
+# but I'm not sure about that - it might be this Just Works given that
+# the registry won't have the element
+
+EXTRA_HFILES = \
+ $(top_srcdir)/ges/ges-types.h
+
+# Images to copy into HTML directory.
+HTML_IMAGES =
+
+# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
+content_files =
+
+# Other files to distribute.
+extra_files =
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed if your app/lib
+# contains GtkObjects/GObjects and you want to document signals and properties.
+GTKDOC_CFLAGS = $(GST_BASE_CFLAGS) -I$(top_builddir)
+GTKDOC_LIBS = $(SCANOBJ_DEPS) $(GST_BASE_LIBS)
+
+GTKDOC_CC=$(LIBTOOL) --tag=CC --mode=compile $(CC)
+GTKDOC_LD=$(LIBTOOL) --tag=CC --mode=link $(CC)
+
+# If you need to override some of the declarations, place them in this file
+# and uncomment this line.
+#DOC_OVERRIDES = $(DOC_MODULE)-overrides.txt
+DOC_OVERRIDES =
+
+include $(top_srcdir)/common/gtk-doc.mak
diff --git a/docs/libs/ges-docs.sgml b/docs/libs/ges-docs.sgml
new file mode 100644
index 0000000000..3f740beefc
--- /dev/null
+++ b/docs/libs/ges-docs.sgml
@@ -0,0 +1,41 @@
+
+
+%version-entities;
+]>
+
+
+
+ GStreamer Editing Services &GES_VERSION; Reference Manual
+
+ for GStreamer Editing Services &GST_MAJORMINOR; (&GES_VERSION;)
+
+
+
+
+
+
+ Base Classes
+
+
+
+
+
+
+
+
+
+
+
+ Simple Timeline interface
+
+
+
+
+ Convenience classes
+
+
+
+
+
diff --git a/docs/libs/ges-sections.txt b/docs/libs/ges-sections.txt
new file mode 100644
index 0000000000..ea0555884b
--- /dev/null
+++ b/docs/libs/ges-sections.txt
@@ -0,0 +1,229 @@
+ges/ges.h
+
+
+ges
+GStreamer Editing Services
+ges_init
+
+
+ges-track
+
GESTrack
+GESTrack
+GESTrackClass
+FillTrackObjectFunc
+FillTrackObjectUserFunc
+GESTrackType
+ges_track_add_object
+ges_track_audio_raw_new
+ges_track_get_type
+ges_track_new
+ges_track_remove_object
+ges_track_set_caps
+ges_track_set_timeline
+ges_track_video_raw_new
+
+ges_track_type_get_type
+GES_IS_TRACK
+GES_IS_TRACK_CLASS
+GES_TRACK
+GES_TRACK_CLASS
+GES_TRACK_GET_CLASS
+GES_TYPE_TRACK
+GES_TYPE_TRACK_TYPE
+
+
+
+ges-track-object
+GESTrackObject
+GESTrackObject
+GESTrackObjectClass
+ges_track_object_new
+ges_track_object_set_duration_internal
+ges_track_object_set_inpoint_internal
+ges_track_object_set_priority_internal
+ges_track_object_set_start_internal
+ges_track_object_set_timeline_object
+ges_track_object_set_track
+
+ges_track_object_get_type
+GES_IS_TRACK_OBJECT
+GES_IS_TRACK_OBJECT_CLASS
+GES_TRACK_OBJECT
+GES_TRACK_OBJECT_CLASS
+GES_TRACK_OBJECT_GET_CLASS
+GES_TYPE_TRACK_OBJECT
+
+
+
+ges-track-source
+GESTrackSource
+GESTrackSource
+GESTrackSourceClass
+ges_track_source_new
+
+GES_TRACK_SOURCE
+GES_TRACK_SOURCE_CLASS
+GES_TRACK_SOURCE_GET_CLASS
+GES_TYPE_TRACK_SOURCE
+GES_IS_TRACK_SOURCE
+GES_IS_TRACK_SOURCE_CLASS
+ges_track_source_get_type
+
+
+
+ges-timeline
+GESTimeline
+GESTimeline
+GESTimelineClass
+ges_timeline_remove_layer
+ges_timeline_remove_track
+ges_timeline_save
+ges_timeline_add_layer
+ges_timeline_add_track
+ges_timeline_get_track_for_pad
+ges_timeline_load_from_uri
+ges_timeline_new
+
+ges_timeline_get_type
+GES_IS_TIMELINE
+GES_IS_TIMELINE_CLASS
+GES_TIMELINE
+GES_TIMELINE_CLASS
+GES_TIMELINE_GET_CLASS
+GES_TYPE_TIMELINE
+
+
+
+
+ges-timeline-layer
+GESTimelineLayer
+GESTimelineLayer
+GESTimelineLayerClass
+ges_timeline_layer_add_object
+ges_timeline_layer_new
+ges_timeline_layer_remove_object
+ges_timeline_layer_set_timeline
+
+ges_timeline_layer_get_type
+GES_IS_TIMELINE_LAYER
+GES_IS_TIMELINE_LAYER_CLASS
+GES_TIMELINE_LAYER
+GES_TIMELINE_LAYER_CLASS
+GES_TIMELINE_LAYER_GET_CLASS
+GES_TYPE_TIMELINE_LAYER
+
+
+
+
+ges-timeline-object
+GESTimelineObject
+GESTimelineObject
+GESTimelineObjectClass
+ges_timeline_object_set_inpoint
+ges_timeline_object_set_layer
+ges_timeline_object_set_priority
+ges_timeline_object_set_start
+ges_timeline_object_create_track_object
+ges_timeline_object_fill_track_object
+ges_timeline_object_new
+ges_timeline_object_release_track_object
+ges_timeline_object_set_duration
+
+GES_IS_TIMELINE_OBJECT
+GES_IS_TIMELINE_OBJECT_CLASS
+GES_TIMELINE_OBJECT
+GES_TIMELINE_OBJECT_CLASS
+GES_TIMELINE_OBJECT_GET_CLASS
+GES_TYPE_TIMELINE_OBJECT
+ges_timeline_object_get_type
+
+
+
+
+ges-timeline-pipeline
+GESTimelinePipeline
+GESTimelinePipeline
+GESTimelinePipelineClass
+ges_timeline_pipeline_add_timeline
+ges_timeline_pipeline_new
+
+ges_timeline_pipeline_get_type
+GES_TIMELINE_PIPELINE
+GES_TIMELINE_PIPELINE_CLASS
+GES_TIMELINE_PIPELINE_GET_CLASS
+GES_IS_TIMELINE_PIPELINE
+GES_IS_TIMELINE_PIPELINE_CLASS
+GES_TYPE_TIMELINE_PIPELINE
+
+
+
+
+ges-timeline-source
+GESTimelineSource
+GESTimelineSource
+GESTimelineSourceClass
+ges_timeline_source_new
+
+ges_timeline_source_get_type
+GES_IS_TIMELINE_SOURCE
+GES_IS_TIMELINE_SOURCE_CLASS
+GES_TIMELINE_SOURCE
+GES_TIMELINE_SOURCE_CLASS
+GES_TIMELINE_SOURCE_GET_CLASS
+GES_TYPE_TIMELINE_SOURCE
+
+
+
+
+ges-timeline-transition
+GESTimelineTransition
+GESTimelineTransition
+GESTimelineTransitionClass
+ges_timeline_transition_new
+
+GES_IS_TIMELINE_TRANSITION
+GES_IS_TIMELINE_TRANSITION_CLASS
+GES_TIMELINE_TRANSITION
+GES_TIMELINE_TRANSITION_CLASS
+GES_TIMELINE_TRANSITION_GET_CLASS
+GES_TYPE_TIMELINE_TRANSITION
+ges_timeline_transition_get_type
+
+
+
+
+ges-custom-timeline-source
+GESCustomTimelineSource
+GESCustomTimelineSource
+GESCustomTimelineSourceClass
+ges_custom_timeline_source_new
+
+ges_cust_timeline_src_get_type
+GES_CUSTOM_TIMELINE_SOURCE
+GES_CUSTOM_TIMELINE_SOURCE_CLASS
+GES_CUSTOM_TIMELINE_SOURCE_GET_CLASS
+GES_IS_CUSTOM_TIMELINE_SOURCE
+GES_IS_CUSTOM_TIMELINE_SOURCE_CLASS
+GES_TYPE_CUSTOM_TIMELINE_SOURCE
+
+
+
+
+ges-simple-timeline-layer
+GESSimpleTimelineLayer
+GESSimpleTimelineLayer
+GESSimpleTimelineLayerClass
+ges_simple_timeline_layer_add_object
+ges_simple_timeline_layer_move_object
+ges_simple_timeline_layer_new
+ges_simple_timeline_layer_remove_object
+
+ges_simple_timeline_layer_get_type
+GES_IS_SIMPLE_TIMELINE_LAYER
+GES_IS_SIMPLE_TIMELINE_LAYER_CLASS
+GES_SIMPLE_TIMELINE_LAYER
+GES_SIMPLE_TIMELINE_LAYER_CLASS
+GES_SIMPLE_TIMELINE_LAYER_GET_CLASS
+GES_TYPE_SIMPLE_TIMELINE_LAYER
+
+
diff --git a/docs/libs/scanobj-build.stamp b/docs/libs/scanobj-build.stamp
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/version.entities.in b/docs/version.entities.in
new file mode 100644
index 0000000000..b2646a8653
--- /dev/null
+++ b/docs/version.entities.in
@@ -0,0 +1,2 @@
+
+