diff --git a/gstreamer-sharp/Makefile.am b/gstreamer-sharp/Makefile.am
index 30ea4d5851..4836ed543c 100644
--- a/gstreamer-sharp/Makefile.am
+++ b/gstreamer-sharp/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = . glue coreplugins baseplugins
+SUBDIRS = . glue coreplugins baseplugins goodplugins badplugins
TARGET = $(ASSEMBLY)
noinst_DATA = $(TARGET)
diff --git a/gstreamer-sharp/badplugins/Makefile.am b/gstreamer-sharp/badplugins/Makefile.am
new file mode 100644
index 0000000000..915c3d185e
--- /dev/null
+++ b/gstreamer-sharp/badplugins/Makefile.am
@@ -0,0 +1,31 @@
+ELEMENTS = dshowvideosink dshowvideosrc dshowaudiosrc
+
+NAMESPACE = Gst.BadPlugins
+INSPECT_FILES = $(patsubst %,$(srcdir)/inspect/%.raw,$(ELEMENTS))
+METADATA_FILES = $(srcdir)/decodebin2.metadata $(srcdir)/playbin2.metadata
+CS_FILES = $(patsubst %,$(builddir)/generated/%.cs,$(ELEMENTS))
+XML_FILES = $(patsubst %,$(builddir)/%.xml,$(ELEMENTS))
+
+EXTRA_DIST = $(METADATA_FILES) $(INSPECT_FILES)
+CLEANFILES = $(XML_FILES) $(CS_FILES)
+MAINTAINERCLEANFILES = Makefile.in
+
+plugins-update: $(patsubst $(srcdir)/inspect/%.raw, inspect-%, $(INSPECT_FILES))
+inspect-%:
+ $(top_builddir)/elementgen/gsts-xmlinspect $(patsubst inspect-%,%,$@) > inspect/$(patsubst inspect-%,%,$@).raw
+
+all: $(XML_FILES) $(CS_FILES)
+ touch generated
+
+generated/%.cs: $(top_builddir)/elementgen/element-gen.exe $(top_builddir)/gstreamer-sharp/gstreamer-api.xml $(builddir)/%.xml
+ @mkdir -p generated
+ $(MONO) $(top_builddir)/elementgen/element-gen.exe --namespace=$(NAMESPACE) \
+ --api=$(top_builddir)/gstreamer-sharp/gstreamer-api.xml --input=$(patsubst generated/%.cs,$(builddir)/%.xml,$@) --customfile=$(patsubst generated/%.cs,$(srcdir)/%.custom,$@) --interfacesdir=$(top_srcdir)/elementgen/interfaces > $@
+
+%.xml: $(top_builddir)/parser/gst-gapi-fixup.exe $(srcdir)/inspect/%.raw $(srcdir)/%.metadata
+ cp $(patsubst %.xml,$(srcdir)/inspect/%.raw,$@) $(builddir)/$@
+ chmod +w $(builddir)/$@
+ $(MONO) $(top_builddir)/parser/gst-gapi-fixup.exe --api=$(builddir)/$@ --metadata=$(patsubst %.xml,$(srcdir)/%.metadata,$@)
+
+%.xml: $(top_builddir)/parser/gst-gapi-fixup.exe $(srcdir)/inspect/%.raw
+ cp $(patsubst %.xml,$(srcdir)/inspect/%.raw,$@) $(builddir)/$@
diff --git a/gstreamer-sharp/badplugins/inspect/dshowaudiosrc.raw b/gstreamer-sharp/badplugins/inspect/dshowaudiosrc.raw
new file mode 100644
index 0000000000..abc9bb2931
--- /dev/null
+++ b/gstreamer-sharp/badplugins/inspect/dshowaudiosrc.raw
@@ -0,0 +1,142 @@
+
+ dshowaudiosrc
+
+ Directshow audio capture source
+ Source/Audio
+ Receive data from a directshow audio capture graph
+ Sebastien Moutte <sebastien@moutte.net>
+
+
+
+
+
+
+
+
+
+ src
+ src
+ always
+ audio/x-raw-int, endianness=(int){ 1234 }, signed=(boolean){ true, false }, width=(int)16, depth=(int)16, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]; audio/x-raw-int, signed=(boolean){ true, false }, width=(int)8, depth=(int)8, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2 ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src
+ src
+ src
+
+
+
+
+
+
+
+
+
+
+
+
+ buffer-time
+ gint64
+ Buffer Time
+ Size of audio buffer in microseconds
+ RW
+
+ 200000
+
+
+ latency-time
+ gint64
+ Latency Time
+ Audio latency in microseconds
+ RW
+
+ 10000
+
+
+ actual-buffer-time
+ gint64
+ Actual Buffer Time
+ Actual configured size of audio buffer in microseconds
+ R
+
+ -1
+
+
+ actual-latency-time
+ gint64
+ Actual Latency Time
+ Actual configured audio latency in microseconds
+ R
+
+ -1
+
+
+ provide-clock
+ gboolean
+ Provide Clock
+ Provide a clock to be used as the global pipeline clock
+ RW
+ TRUE
+
+
+ slave-method
+ GstBaseAudioSrcSlaveMethod
+ Slave Method
+ Algorithm to use to match the rate of the masterclock
+ RW
+ 2
+
+
+
+
+
+
+
+
+ device
+ gchararray
+ Device
+ Directshow device reference (classID/name)
+ RW
+ NULL
+
+
+ device-name
+ gchararray
+ Device name
+ Human-readable name of the sound device
+ RW
+ NULL
+
+
+
+
+
+
+
diff --git a/gstreamer-sharp/badplugins/inspect/dshowvideosink.raw b/gstreamer-sharp/badplugins/inspect/dshowvideosink.raw
new file mode 100644
index 0000000000..d85fd807e9
--- /dev/null
+++ b/gstreamer-sharp/badplugins/inspect/dshowvideosink.raw
@@ -0,0 +1,86 @@
+
+ dshowvideosink
+
+ DirectShow video sink
+ Sink/Video
+ Display data using a DirectShow video renderer
+ Pioneers of the Inevitable <songbird@songbirdnest.com>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sink
+ sink
+ always
+ video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc){ YUY2, UYVY, YUVY, YV12 }
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sink
+ sink
+ sink
+
+
+
+
+
+
+
+
+
+
+
+
+
+ force-aspect-ratio
+ gboolean
+ Force aspect ratio
+ When enabled, scaling will respect original aspect ratio
+ RW
+ FALSE
+
+
+ fullscreen
+ gboolean
+ Full screen mode
+ Use full-screen mode (not available when using XOverlay)
+ RW
+ FALSE
+
+
+ renderer
+ gchararray
+ Renderer
+ Force usage of specific DirectShow renderer (VMR9 or VMR)
+ RW
+ NULL
+
+
+
+
+
+
+
diff --git a/gstreamer-sharp/badplugins/inspect/dshowvideosrc.raw b/gstreamer-sharp/badplugins/inspect/dshowvideosrc.raw
new file mode 100644
index 0000000000..6067056e81
--- /dev/null
+++ b/gstreamer-sharp/badplugins/inspect/dshowvideosrc.raw
@@ -0,0 +1,78 @@
+
+ dshowvideosrc
+
+ DirectShow video capture source
+ Source/Video
+ Receive data from a directshow video capture graph
+ Sebastien Moutte <sebastien@moutte.net>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src
+ src
+ always
+ video/x-raw-rgb, bpp=(int)24, depth=(int)24, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ]; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)I420; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)UYVY; video/x-raw-yuv, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)YUY2; video/x-dv, systemstream=(boolean)false, width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ], framerate=(fraction)[ 0/1, 2147483647/1 ], format=(fourcc)dvsd; video/x-dv, systemstream=(boolean)true
+
+
+
+
+
+
+
+
+
+
+
+
+
+ src
+ src
+ src
+
+
+
+
+
+
+
+
+
+
+
+
+ device
+ gchararray
+ Device
+ Directshow device path (@..classID/name)
+ RW
+ NULL
+
+
+ device-name
+ gchararray
+ Device name
+ Human-readable name of the video device
+ RW
+ NULL
+
+
+
+
+
+
+
diff --git a/gstreamer-sharp/goodplugins/Makefile.am b/gstreamer-sharp/goodplugins/Makefile.am
new file mode 100644
index 0000000000..c998087213
--- /dev/null
+++ b/gstreamer-sharp/goodplugins/Makefile.am
@@ -0,0 +1,31 @@
+ELEMENTS = directdrawsink
+
+NAMESPACE = Gst.GoodPlugins
+INSPECT_FILES = $(patsubst %,$(srcdir)/inspect/%.raw,$(ELEMENTS))
+METADATA_FILES = $(srcdir)/decodebin2.metadata $(srcdir)/playbin2.metadata
+CS_FILES = $(patsubst %,$(builddir)/generated/%.cs,$(ELEMENTS))
+XML_FILES = $(patsubst %,$(builddir)/%.xml,$(ELEMENTS))
+
+EXTRA_DIST = $(METADATA_FILES) $(INSPECT_FILES)
+CLEANFILES = $(XML_FILES) $(CS_FILES)
+MAINTAINERCLEANFILES = Makefile.in
+
+plugins-update: $(patsubst $(srcdir)/inspect/%.raw, inspect-%, $(INSPECT_FILES))
+inspect-%:
+ $(top_builddir)/elementgen/gsts-xmlinspect $(patsubst inspect-%,%,$@) > inspect/$(patsubst inspect-%,%,$@).raw
+
+all: $(XML_FILES) $(CS_FILES)
+ touch generated
+
+generated/%.cs: $(top_builddir)/elementgen/element-gen.exe $(top_builddir)/gstreamer-sharp/gstreamer-api.xml $(builddir)/%.xml
+ @mkdir -p generated
+ $(MONO) $(top_builddir)/elementgen/element-gen.exe --namespace=$(NAMESPACE) \
+ --api=$(top_builddir)/gstreamer-sharp/gstreamer-api.xml --input=$(patsubst generated/%.cs,$(builddir)/%.xml,$@) --customfile=$(patsubst generated/%.cs,$(srcdir)/%.custom,$@) --interfacesdir=$(top_srcdir)/elementgen/interfaces > $@
+
+%.xml: $(top_builddir)/parser/gst-gapi-fixup.exe $(srcdir)/inspect/%.raw $(srcdir)/%.metadata
+ cp $(patsubst %.xml,$(srcdir)/inspect/%.raw,$@) $(builddir)/$@
+ chmod +w $(builddir)/$@
+ $(MONO) $(top_builddir)/parser/gst-gapi-fixup.exe --api=$(builddir)/$@ --metadata=$(patsubst %.xml,$(srcdir)/%.metadata,$@)
+
+%.xml: $(top_builddir)/parser/gst-gapi-fixup.exe $(srcdir)/inspect/%.raw
+ cp $(patsubst %.xml,$(srcdir)/inspect/%.raw,$@) $(builddir)/$@
diff --git a/gstreamer-sharp/goodplugins/inspect/directdrawsink.raw b/gstreamer-sharp/goodplugins/inspect/directdrawsink.raw
new file mode 100644
index 0000000000..5d6656626d
--- /dev/null
+++ b/gstreamer-sharp/goodplugins/inspect/directdrawsink.raw
@@ -0,0 +1,81 @@
+
+ directdrawsink
+
+ Direct Draw Video Sink
+ Sink/Video
+ Output to a video card via Direct Draw
+ Sebastien Moutte <sebastien@moutte.net>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sink
+ sink
+ always
+ video/x-raw-rgb, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 1, 2147483647 ], height=(int)[ 1, 2147483647 ]
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sink
+ sink
+ sink
+
+
+
+
+
+
+
+
+
+
+
+
+
+ show-preroll-frame
+ gboolean
+ Show preroll frame
+ Whether to render video frames during preroll
+ RW
+ TRUE
+
+
+ force-aspect-ratio
+ gboolean
+ Force aspect ratio
+ When enabled, scaling will respect original aspect ratio
+ RW
+ FALSE
+
+
+
+
+
+
+