diff --git a/configure.ac b/configure.ac
index fa52dde..b703212 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1648,7 +1648,6 @@ gst/vmnc/Makefile
 gst/xdgmime/Makefile
 gst-libs/Makefile
 gst-libs/gst/Makefile
-gst-libs/gst/dshow/Makefile
 gst-libs/gst/interfaces/Makefile
 gst-libs/gst/signalprocessor/Makefile
 gst-libs/gst/video/Makefile
diff --git a/gst-libs/gst/Makefile.am b/gst-libs/gst/Makefile.am
index b123a4c..e48cdd8 100644
--- a/gst-libs/gst/Makefile.am
+++ b/gst-libs/gst/Makefile.am
@@ -2,4 +2,4 @@
 SUBDIRS = interfaces signalprocessor video
 
 noinst_HEADERS = gst-i18n-plugin.h gettext.h
-DIST_SUBDIRS = dshow interfaces signalprocessor video
+DIST_SUBDIRS = interfaces signalprocessor video
diff --git a/gst-libs/gst/dshow/Makefile.am b/gst-libs/gst/dshow/Makefile.am
deleted file mode 100644
index 04d84c3..0000000
--- a/gst-libs/gst/dshow/Makefile.am
+++ /dev/null
@@ -1,11 +0,0 @@
-lib_LTLIBRARIES = libgstdshow-@GST_MAJORMINOR@.la
-
-libgstdshow_@GST_MAJORMINOR@_la_SOURCES = gstdshow.cpp gstdshowfakesink.cpp gstdshowfakesrc.cpp gstdshowinterface.cpp
-libgstdshow_@GST_MAJORMINOR@_la_CXXFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) \
-	$(GST_PLUGINS_BASE_CFLAGS) -DLIBDSHOW_EXPORTS
-libgstdshow_@GST_MAJORMINOR@_la_LIBADD = $(GST_BASE_LIBS)
-libgstdshow_@GST_MAJORMINOR@_la_LDFLAGS = $(GST_ALL_LDFLAGS)
-libgstdshow_@GST_MAJORMINOR@_la_LIBTOOLFLAGS = --tag=disable-static
-
-libgstdshow_@GST_MAJORMINOR@includedir = $(includedir)/gstreamer-@GST_MAJORMINOR@/gst/dshow
-libgstdshow_@GST_MAJORMINOR@include_HEADERS = gstdshow.h gstdshowfakesink.h gstdshowfakesrc.h gstdshowinterface.h
diff --git a/gst-libs/gst/dshow/gstdshow.cpp b/gst-libs/gst/dshow/gstdshow.cpp
deleted file mode 100644
index 4d419d1..0000000
--- a/gst-libs/gst/dshow/gstdshow.cpp
+++ /dev/null
@@ -1,355 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshow.cpp:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gstdshow.h"
-#include "gstdshowfakesink.h"
-#include "gstdshowfakesrc.h"
-
-CFactoryTemplate g_Templates[]=
-{
-  { 
-    L"DSHOW fake sink filter"
-    , &CLSID_DshowFakeSink
-    , CDshowFakeSink::CreateInstance
-    , NULL
-    , NULL
-  },
-  { 
-    L"DSHOW fake src filter"
-    , &CLSID_DshowFakeSrc
-    , CDshowFakeSrc::CreateInstance
-    , NULL
-    , NULL
-  },
-
-};
-
-int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]);
-static HINSTANCE g_hModule = NULL;
-
-extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
-BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
-{
-  if (!g_hModule)
-    g_hModule = (HINSTANCE)hModule;
-
-  return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
-}
-
-STDAPI DllRegisterServer()
-{
-  return AMovieDllRegisterServer2 (TRUE);
-}
-
-STDAPI DllUnregisterServer()
-{
-  return AMovieDllRegisterServer2 (FALSE);
-}
-
-BOOL gst_dshow_register_fakefilters ()
-{
-  return (DllRegisterServer() == S_OK) ? TRUE : FALSE;
-}
-
-void 
-gst_dshow_free_mediatype (AM_MEDIA_TYPE *pmt)
-{
-  if (pmt != NULL) {    
-    if (pmt->cbFormat != 0) {
-      CoTaskMemFree((PVOID)pmt->pbFormat);
-      pmt->cbFormat = 0;
-      pmt->pbFormat = NULL;
-    }
-    if (pmt->pUnk != NULL) {
-      /* Unecessary because pUnk should not be used, but safest. */
-      pmt->pUnk->Release();
-      pmt->pUnk = NULL;
-    }
-
-    CoTaskMemFree(pmt);
-  }
-}
-
-void 
-gst_dshow_free_pin_mediatype (gpointer pt)
-{
-  GstCapturePinMediaType * pin_mediatype = (GstCapturePinMediaType *) pt;
-  if (pin_mediatype) {
-    if (pin_mediatype->capture_pin) {
-      pin_mediatype->capture_pin->Release();
-      pin_mediatype->capture_pin = NULL;
-    }
-    if (pin_mediatype->mediatype) {
-      gst_dshow_free_mediatype (pin_mediatype->mediatype);
-      pin_mediatype->mediatype = NULL;
-    }
-  }
-}
-
-
-void 
-gst_dshow_free_pins_mediatypes (GList *pins_mediatypes)
-{
-  guint i = 0;
-  for (; i < g_list_length (pins_mediatypes); i++) {
-    GList *mylist = g_list_nth (pins_mediatypes, i);
-    if (mylist && mylist->data)
-      gst_dshow_free_pin_mediatype ((GstCapturePinMediaType *)mylist->data);
-  }
-  g_list_free (pins_mediatypes);
-}
-
-gboolean 
-gst_dshow_get_pin_from_filter (IBaseFilter *filter, PIN_DIRECTION pindir, IPin **pin)
-{
-  gboolean ret = FALSE;
-  IEnumPins *enumpins = NULL;
-  IPin *pintmp = NULL;
-  HRESULT hres; 
-  *pin = NULL;
-
-  hres = filter->EnumPins (&enumpins);
-  if (FAILED(hres)) {
-    return ret;
-  }
-
-  while (enumpins->Next (1, &pintmp, NULL) == S_OK)
-  {
-    PIN_DIRECTION pindirtmp;
-    hres = pintmp->QueryDirection (&pindirtmp);
-    if (hres == S_OK && pindir == pindirtmp) {
-      *pin = pintmp;
-      ret = TRUE;
-        break;
-    }
-    pintmp->Release ();
-  }
-  enumpins->Release ();
-
-  return ret;
-}
-
-gboolean gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype, 
-                               CLSID output_majortype, CLSID output_subtype, 
-                               gchar * prefered_filter_name, IBaseFilter **filter)
-{
-  gboolean ret = FALSE;
-  HRESULT hres;
-  GUID arrayInTypes[2];
-  GUID arrayOutTypes[2];
-  IFilterMapper2 *mapper = NULL;
-  IEnumMoniker *enum_moniker = NULL;
-  IMoniker *moniker = NULL;
-  ULONG fetched;
-  gchar *prefered_filter_upper = NULL;
-  gboolean exit = FALSE;
-
-  /* initialize output parameter */
-  if (filter)
-    *filter = NULL;
-
-  /* create a private copy of prefered filter substring in upper case */
-  if (prefered_filter_name) {
-    prefered_filter_upper = g_strdup (prefered_filter_name);
-    strupr (prefered_filter_upper);
-  }
-
-  hres = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC, 
-      IID_IFilterMapper2, (void **) &mapper);
-  if (FAILED(hres))
-    goto clean;
-  
-  memcpy(&arrayInTypes[0], &input_majortype, sizeof (CLSID));
-  memcpy(&arrayInTypes[1], &input_subtype, sizeof (CLSID));
-  memcpy(&arrayOutTypes[0], &output_majortype, sizeof (CLSID));
-  memcpy(&arrayOutTypes[1], &output_subtype, sizeof (CLSID));
-
-  hres = mapper->EnumMatchingFilters (&enum_moniker, 0, FALSE, MERIT_DO_NOT_USE+1, 
-          TRUE, 1, arrayInTypes, NULL, NULL, FALSE, 
-          TRUE, 1, arrayOutTypes, NULL, NULL);
-  if (FAILED(hres))
-    goto clean;
-  
-  enum_moniker->Reset ();
-  
-  while(hres = enum_moniker->Next (1, &moniker, &fetched),hres == S_OK
-    && !exit) {
-    IBaseFilter *filter_temp = NULL;
-    IPropertyBag *property_bag = NULL;
-    gchar * friendly_name = NULL;
-
-    hres = moniker->BindToStorage (NULL, NULL, IID_IPropertyBag, (void **)&property_bag);
-    if(SUCCEEDED(hres) && property_bag) {
-      VARIANT varFriendlyName;
-      VariantInit (&varFriendlyName);
-      
-      hres = property_bag->Read (L"FriendlyName", &varFriendlyName, NULL);
-      if(hres == S_OK && varFriendlyName.bstrVal) {
-         friendly_name = g_utf16_to_utf8((const gunichar2*)varFriendlyName.bstrVal, 
-            wcslen(varFriendlyName.bstrVal), NULL, NULL, NULL);        
-         if (friendly_name)
-           strupr (friendly_name);
-        SysFreeString (varFriendlyName.bstrVal);
-      }
-      property_bag->Release ();
-    }
-
-    hres = moniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&filter_temp);    
-    if(SUCCEEDED(hres) && filter_temp) {
-      ret = TRUE;
-      if (filter) {
-        if (*filter)
-          (*filter)->Release ();
-
-        *filter = filter_temp;
-        (*filter)->AddRef ();
-
-        if (prefered_filter_upper && friendly_name &&
-          strstr(friendly_name, prefered_filter_upper))
-          exit = TRUE;
-      }
-
-      /* if we just want to know if the formats are supported OR 
-          if we don't care about what will be the filter used 
-          => we can stop enumeration */
-      if (!filter || !prefered_filter_upper)
-        exit = TRUE;
-
-      filter_temp->Release ();
-    }
-
-    if (friendly_name)
-      g_free (friendly_name);
-    moniker->Release ();
-  }
-
-clean:
-  if (prefered_filter_upper)
-    g_free (prefered_filter_upper);
-  if (enum_moniker)
-    enum_moniker->Release ();
-  if (mapper)
-    mapper->Release ();
-
-  return ret;
-}
-
-
-gchar *
-gst_dshow_getdevice_from_devicename  (GUID *device_category, gchar **device_name)
-{
-  gchar *ret = NULL;
-  ICreateDevEnum *devices_enum = NULL;
-  IEnumMoniker *enum_moniker = NULL;
-  IMoniker *moniker = NULL;
-  HRESULT hres = S_FALSE;
-  ULONG fetched;
-  gboolean bfound = FALSE;
-  
-  hres = CoCreateInstance (CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
-      IID_ICreateDevEnum, (void**)&devices_enum);
-  if(hres != S_OK) {
-    /*error*/
-    goto clean;
-  }
-
-  hres = devices_enum->CreateClassEnumerator (*device_category,
-      &enum_moniker, 0);
-  if (hres != S_OK || !enum_moniker) {
-    /*error*/
-    goto clean;
-  }
-
-  enum_moniker->Reset ();
-  
-  while(hres = enum_moniker->Next (1, &moniker, &fetched),hres == S_OK
-    && !bfound) {
-    IPropertyBag *property_bag = NULL;
-    hres = moniker->BindToStorage(NULL, NULL, IID_IPropertyBag, (void **)&property_bag);
-    if(SUCCEEDED(hres) && property_bag) {
-      VARIANT varFriendlyName;
-      VariantInit (&varFriendlyName);
-      
-      hres = property_bag->Read (L"FriendlyName", &varFriendlyName, NULL);
-      if(hres == S_OK && varFriendlyName.bstrVal) {
-        gchar * friendly_name = g_utf16_to_utf8((const gunichar2*)varFriendlyName.bstrVal, 
-            wcslen(varFriendlyName.bstrVal), NULL, NULL, NULL);
-
-        if (!*device_name) {
-          *device_name = g_strdup (friendly_name);
-        }
-
-        if (_stricmp(*device_name, friendly_name) == 0) {
-          WCHAR *wszDisplayName = NULL;
-          hres = moniker->GetDisplayName (NULL, NULL, &wszDisplayName);
-          if(hres == S_OK && wszDisplayName) {
-            ret = g_utf16_to_utf8((const gunichar2*)wszDisplayName, 
-             wcslen(wszDisplayName), NULL, NULL, NULL);
-            CoTaskMemFree (wszDisplayName);
-          }
-          bfound = TRUE;
-        }
-        SysFreeString (varFriendlyName.bstrVal);
-      }
-      property_bag->Release ();
-    }
-    moniker->Release ();
-  }
-
-clean:
-  if (enum_moniker) {
-    enum_moniker->Release ();
-  }
-
-  if (devices_enum) {
-    devices_enum->Release ();
-  }
-
-  return ret;
-}
-
-gboolean 
-gst_dshow_show_propertypage (IBaseFilter *base_filter)
-{
-  gboolean ret = FALSE;
-  ISpecifyPropertyPages *pProp = NULL;
-  HRESULT hres = base_filter->QueryInterface (IID_ISpecifyPropertyPages, (void **)&pProp);
-  if (SUCCEEDED(hres)) 
-  {
-    /* Get the filter's name and IUnknown pointer.*/
-    FILTER_INFO FilterInfo;
-    CAUUID caGUID;
-    IUnknown *pFilterUnk = NULL;
-    hres = base_filter->QueryFilterInfo (&FilterInfo); 
-    base_filter->QueryInterface (IID_IUnknown, (void **)&pFilterUnk);
-
-    /* Show the page. */
-    pProp->GetPages (&caGUID);
-    pProp->Release ();
-    OleCreatePropertyFrame(GetDesktopWindow(), 0, 0, FilterInfo.achName,
-        1, &pFilterUnk, caGUID.cElems, caGUID.pElems, 0, 0, NULL);
-
-    pFilterUnk->Release ();
-    FilterInfo.pGraph->Release ();
-    CoTaskMemFree(caGUID.pElems);
-  }
-  return ret;
-}
diff --git a/gst-libs/gst/dshow/gstdshow.h b/gst-libs/gst/dshow/gstdshow.h
deleted file mode 100644
index 3d1520d..0000000
--- a/gst-libs/gst/dshow/gstdshow.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshow.h:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef _GSTDSHOW_
-#define _GSTDSHOW_
-
-#include <windows.h>
-
-#include <glib.h>
-
-#ifdef LIBDSHOW_EXPORTS
-#include <streams.h>
-#include <atlbase.h>
-#define DSHOW_API __declspec(dllexport)
-#else
-#define DSHOW_API __declspec(dllimport)
-#endif
-
-typedef struct _GstCapturePinMediaType
-{
-  AM_MEDIA_TYPE *mediatype;
-  IPin *capture_pin;
-} GstCapturePinMediaType;
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-/* register fake filters as COM object and as Direct Show filters in the registry */
-BOOL gst_dshow_register_fakefilters ();
-
-/* free memory of the input pin mediatype */
-void gst_dshow_free_pin_mediatype (gpointer pt);
-
-/* free memory of the input dshow mediatype */
-void gst_dshow_free_mediatype (AM_MEDIA_TYPE *pmt);
-
-/* free the memory of all mediatypes of the input list if pin mediatype */
-void gst_dshow_free_pins_mediatypes (GList *mediatypes);
-
-/* get a pin from directshow filter */
-gboolean gst_dshow_get_pin_from_filter (IBaseFilter *filter, PIN_DIRECTION pindir, IPin **pin);
-
-/* find and return a filter according to the input and output types */
-gboolean gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype, 
-                               CLSID output_majortype, CLSID output_subtype,
-                               gchar * prefered_filter_name, IBaseFilter **filter);
-
-/* get the dshow device path from device friendly name. 
-If friendly name is not set, it will return the first available device */
-gchar *gst_dshow_getdevice_from_devicename (GUID *device_category, gchar **device_name);
-
-/* show the capture filter property page (generally used to setup the device). the page is modal*/
-gboolean gst_dshow_show_propertypage (IBaseFilter *base_filter);
-
-
-#ifdef  __cplusplus
-}
-#endif
-
-#endif /* _GSTDSHOW_ */
\ No newline at end of file
diff --git a/gst-libs/gst/dshow/gstdshowfakesink.cpp b/gst-libs/gst/dshow/gstdshowfakesink.cpp
deleted file mode 100644
index e3a5f0b..0000000
--- a/gst-libs/gst/dshow/gstdshowfakesink.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshowfakesink.cpp:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gstdshowfakesink.h"
-
-
-CDshowFakeSink::CDshowFakeSink()
-  : m_hres(S_OK), CBaseRenderer(CLSID_DshowFakeSink, "DshowFakeSink", NULL, &m_hres)
-{
-  m_callback = NULL;
-}
-
-CDshowFakeSink::~CDshowFakeSink()
-{
-
-}
-
-//Object creation.
-CUnknown* WINAPI CDshowFakeSink::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 
-{
-	CDshowFakeSink *pNewObject = new CDshowFakeSink();
-  if (pNewObject == NULL) {
-    *pHr = E_OUTOFMEMORY;
-  }
-  return pNewObject;
-} 
-
-STDMETHODIMP CDshowFakeSink::QueryInterface(REFIID riid, void **ppvObject)
-{
-  if (riid == IID_IGstDshowInterface) {
-      *ppvObject = (IGstDshowInterface*) this;
-      AddRef();
-      return S_OK;
-  }
-  else
-    return CBaseRenderer::QueryInterface (riid, ppvObject);
-}
-
-ULONG STDMETHODCALLTYPE CDshowFakeSink::AddRef()
-{
-  return CBaseRenderer::AddRef();
-}
-
-ULONG STDMETHODCALLTYPE CDshowFakeSink::Release()
-{
-  return CBaseRenderer::Release();
-}
-
-
-STDMETHODIMP CDshowFakeSink::gst_set_media_type (AM_MEDIA_TYPE *pmt)
-{
-  m_MediaType.Set (*pmt);
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeSink::gst_set_buffer_callback (push_buffer_func push, byte *data)
-{
-  m_callback = push;
-  m_data = data;
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeSink::gst_push_buffer (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount)
-{
-  return E_NOTIMPL;
-}
-
-STDMETHODIMP CDshowFakeSink::gst_flush ()
-{
-  return E_NOTIMPL;
-}
-
-STDMETHODIMP CDshowFakeSink::gst_set_sample_size(unsigned int size)
-{
-  return E_NOTIMPL;
-}
-
-HRESULT CDshowFakeSink::CheckMediaType(const CMediaType *pmt)
-{
-  VIDEOINFOHEADER *p1;
-  VIDEOINFOHEADER *p2;
-  if(pmt != NULL)
-  {
-    p1 = (VIDEOINFOHEADER *)pmt->Format();
-    p2 = (VIDEOINFOHEADER *)m_MediaType.Format();
-    if (*pmt == m_MediaType)
-      return S_OK;
-  }
-
-  return S_FALSE;
-}
-
-HRESULT CDshowFakeSink::DoRenderSample(IMediaSample *pMediaSample)
-{
-  if(pMediaSample && m_callback)
-  {
-    BYTE *pBuffer = NULL;
-    LONGLONG lStart = 0, lStop = 0;
-    pMediaSample->GetPointer(&pBuffer);
-    long size = pMediaSample->GetActualDataLength();
-    pMediaSample->GetTime(&lStart, &lStop);
-    lStart*=100;
-    lStop*=100;
-    m_callback(pBuffer, size, m_data, lStart, lStop);
-  }
-  
-  return S_OK;
-}
diff --git a/gst-libs/gst/dshow/gstdshowfakesink.h b/gst-libs/gst/dshow/gstdshowfakesink.h
deleted file mode 100644
index 7f419b2..0000000
--- a/gst-libs/gst/dshow/gstdshowfakesink.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshowfakesink.h:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gstdshowinterface.h"
-
-class CDshowFakeSink :  public CBaseRenderer,
-                        public IGstDshowInterface
-{
-public:
-  CDshowFakeSink ();
-  virtual ~CDshowFakeSink ();
-
-  static CUnknown * WINAPI CreateInstance (LPUNKNOWN pUnk, HRESULT *pHr);
-
-  virtual HRESULT CheckMediaType (const CMediaType *pmt);
-  virtual HRESULT DoRenderSample (IMediaSample *pMediaSample);
-  
-  STDMETHOD (QueryInterface)(REFIID riid, void **ppvObject);
-  ULONG STDMETHODCALLTYPE AddRef();
-  ULONG STDMETHODCALLTYPE Release();
-  STDMETHOD (gst_set_media_type) (AM_MEDIA_TYPE *pmt);
-  STDMETHOD (gst_set_buffer_callback) (push_buffer_func push, byte *data);
-  STDMETHOD (gst_push_buffer) (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount);
-  STDMETHOD (gst_flush) ();
-  STDMETHOD (gst_set_sample_size) (unsigned int size);
-
-protected:
-  HRESULT m_hres;
-  CMediaType m_MediaType;
-  push_buffer_func m_callback;
-  byte *m_data;
-};
\ No newline at end of file
diff --git a/gst-libs/gst/dshow/gstdshowfakesrc.cpp b/gst-libs/gst/dshow/gstdshowfakesrc.cpp
deleted file mode 100644
index 2c6bcc8..0000000
--- a/gst-libs/gst/dshow/gstdshowfakesrc.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshowfakesrc.cpp:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gstdshowfakesrc.h"
-
-static CCritSec g_pCriticSec;
-
-/* output pin*/
-CDshowFakeOutputPin::CDshowFakeOutputPin (CBaseFilter *pFilter, CCritSec *sec):
-  CBaseOutputPin("FakeOutputPin", pFilter, sec, &m_hres, L"output")
-{
-}
-
-CDshowFakeOutputPin::~CDshowFakeOutputPin()
-{
-
-}
-
-HRESULT CDshowFakeOutputPin::GetMediaType(int iPosition, CMediaType *pMediaType)
-{
-  if(iPosition == 0) {
-    *pMediaType = m_MediaType;
-    return S_OK;
-  }
-  
-  return VFW_S_NO_MORE_ITEMS;
-}
-
-HRESULT CDshowFakeOutputPin::CheckMediaType(const CMediaType *pmt)
-{
-    if (m_MediaType == *pmt) {
-        return S_OK;
-    }
-
-    return S_FALSE;
-}
-
-HRESULT CDshowFakeOutputPin::DecideBufferSize (IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest)
-{
-  ALLOCATOR_PROPERTIES properties;
-  ppropInputRequest->cbBuffer = m_SampleSize;
-  ppropInputRequest->cBuffers = 1;
-  HRESULT hres = pAlloc->SetProperties(ppropInputRequest, &properties);
-  pAlloc->Commit();
-
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeOutputPin::SetMediaType (AM_MEDIA_TYPE *pmt)
-{
-  m_MediaType.Set (*pmt);
-  m_SampleSize = m_MediaType.GetSampleSize();
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeOutputPin::PushBuffer(byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount)
-{
-  IMediaSample *pSample = NULL;
-  
-  if (start != -1) {
-    start /= 100;
-    stop /= 100;
-  }
-
-  HRESULT hres = GetDeliveryBuffer(&pSample, NULL, NULL, 0);
-  if (hres == S_OK && pSample)
-  {
-    BYTE *sample_buffer;
-    pSample->GetPointer(&sample_buffer);
-    if(sample_buffer)
-    {
-      memcpy (sample_buffer, buffer, size);
-      pSample->SetActualDataLength(size);
-    }
-    if (discount)
-      pSample->SetDiscontinuity(TRUE);
-    else
-      pSample->SetDiscontinuity(FALSE);
-    
-    pSample->SetSyncPoint(TRUE);
-    pSample->SetPreroll(FALSE);
-  
-    if (start != -1)
-      pSample->SetTime(&start, &stop);
-
-    hres = Deliver(pSample);
-    pSample->Release();
-  }
-
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeOutputPin::Flush ()
-{
-  DeliverBeginFlush();
-  DeliverEndFlush();
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeOutputPin::SetSampleSize (unsigned int size)
-{
-  m_SampleSize = size;
-  return S_OK;
-}
-
-/* filter */
-CDshowFakeSrc::CDshowFakeSrc():CBaseFilter("DshowFakeSink", NULL, &g_pCriticSec, CLSID_DshowFakeSrc)
-{
-  m_pOutputPin = new CDshowFakeOutputPin((CSource *)this, m_pLock);
-}
-
-CDshowFakeSrc::~CDshowFakeSrc()
-{
-  if (m_pOutputPin)
-    delete m_pOutputPin;
-}
-
-//Object creation.
-CUnknown* WINAPI CDshowFakeSrc::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 
-{
-	CDshowFakeSrc *pNewObject = new CDshowFakeSrc();
-  if (pNewObject == NULL) {
-    *pHr = E_OUTOFMEMORY;
-  }
-  return pNewObject;
-} 
-
-int CDshowFakeSrc::GetPinCount()
-{
-  return 1;
-}
-
-CBasePin *CDshowFakeSrc::GetPin(int n)
-{
-  return (CBasePin *)m_pOutputPin;
-}
-
-
-STDMETHODIMP CDshowFakeSrc::QueryInterface(REFIID riid, void **ppvObject)
-{
-  if (riid == IID_IGstDshowInterface) {
-      *ppvObject = (IGstDshowInterface*) this;
-      AddRef();
-      return S_OK;
-  }
-  else
-    return CBaseFilter::QueryInterface (riid, ppvObject);
-}
-
-ULONG STDMETHODCALLTYPE CDshowFakeSrc::AddRef()
-{
-  return CBaseFilter::AddRef();
-}
-
-ULONG STDMETHODCALLTYPE CDshowFakeSrc::Release()
-{
-  return CBaseFilter::Release();
-}
-
-STDMETHODIMP CDshowFakeSrc::gst_set_media_type (AM_MEDIA_TYPE *pmt)
-{
-  m_pOutputPin->SetMediaType(pmt); 
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeSrc::gst_set_buffer_callback (push_buffer_func push, byte *data)
-{
-  return E_NOTIMPL;
-}
-
-STDMETHODIMP CDshowFakeSrc::gst_push_buffer (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount)
-{
-  m_pOutputPin->PushBuffer(buffer, start, stop, size, discount);
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeSrc::gst_flush ()
-{
-  m_pOutputPin->Flush();
-  return S_OK;
-}
-
-STDMETHODIMP CDshowFakeSrc::gst_set_sample_size(unsigned int size)
-{
-  m_pOutputPin->SetSampleSize(size);
-  return S_OK;
-}
\ No newline at end of file
diff --git a/gst-libs/gst/dshow/gstdshowfakesrc.h b/gst-libs/gst/dshow/gstdshowfakesrc.h
deleted file mode 100644
index 0688431..0000000
--- a/gst-libs/gst/dshow/gstdshowfakesrc.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshowfakesrc.h:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gstdshowinterface.h"
-#include <gst/gst.h>
-
-class CDshowFakeOutputPin : public CBaseOutputPin
-{
-protected:
-/* members */
-  HRESULT m_hres;
-  CMediaType m_MediaType;
-  unsigned int m_SampleSize;
-
-public:
-/* methods */
-  CDshowFakeOutputPin (CBaseFilter *pFilter, CCritSec *sec);
-  ~CDshowFakeOutputPin ();
-  
-  virtual HRESULT CheckMediaType(const CMediaType *pmt);
-  HRESULT GetMediaType(int iPosition, CMediaType *pMediaType);
-  virtual HRESULT DecideBufferSize (IMemAllocator *pAlloc, ALLOCATOR_PROPERTIES *ppropInputRequest);
-  STDMETHOD (SetMediaType) (AM_MEDIA_TYPE *pmt);
-  STDMETHOD (PushBuffer) (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount);
-  STDMETHOD (Flush) ();
-  STDMETHOD (SetSampleSize) (unsigned int size);
-};
-
-class CDshowFakeSrc : public CBaseFilter,
-                      public IGstDshowInterface
-{
-public:
-/* members */
-  CDshowFakeOutputPin *m_pOutputPin;
-
-/* methods */
-  CDshowFakeSrc ();
-  virtual ~CDshowFakeSrc ();
-
-  static CUnknown * WINAPI CreateInstance (LPUNKNOWN pUnk, HRESULT *pHr);
-  
-  virtual int GetPinCount();
-  virtual CBasePin *GetPin(int n);
-  
-  STDMETHOD (QueryInterface)(REFIID riid, void **ppvObject);
-  ULONG STDMETHODCALLTYPE AddRef();
-  ULONG STDMETHODCALLTYPE Release();
-
-  STDMETHOD (gst_set_media_type) (AM_MEDIA_TYPE *pmt);
-  STDMETHOD (gst_set_buffer_callback) (push_buffer_func push, byte *data);
-  STDMETHOD (gst_push_buffer) (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount);
-  STDMETHOD (gst_flush) ();
-  STDMETHOD (gst_set_sample_size) (unsigned int size);
-};
\ No newline at end of file
diff --git a/gst-libs/gst/dshow/gstdshowinterface.cpp b/gst-libs/gst/dshow/gstdshowinterface.cpp
deleted file mode 100644
index 3dba7c2..0000000
--- a/gst-libs/gst/dshow/gstdshowinterface.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshowinterface.cpp:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "gstdshowinterface.h"
-
-
-//{6A780808-9725-4d0b-8695-A4DD8D210773}
-const GUID CLSID_DshowFakeSink
-                    = { 0x6a780808, 0x9725, 0x4d0b, { 0x86, 0x95,  0xa4,  0xdd,  0x8d,  0x21,  0x7,  0x73 } };
-
-// {1E38DAED-8A6E-4DEA-A482-A878761D11CB}
-const GUID CLSID_DshowFakeSrc = 
-{ 0x1e38daed, 0x8a6e, 0x4dea, { 0xa4, 0x82, 0xa8, 0x78, 0x76, 0x1d, 0x11, 0xcb } };
-
-// {FC36764C-6CD4-4C73-900F-3F40BF3F191A}
-static const GUID IID_IGstDshowInterface = 
-{ 0xfc36764c, 0x6cd4, 0x4c73, { 0x90, 0xf, 0x3f, 0x40, 0xbf, 0x3f, 0x19, 0x1a } };
diff --git a/gst-libs/gst/dshow/gstdshowinterface.h b/gst-libs/gst/dshow/gstdshowinterface.h
deleted file mode 100644
index 1a19a61..0000000
--- a/gst-libs/gst/dshow/gstdshowinterface.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* GStreamer
- * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshowinterface.h:
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_DHOW_INTERFACE_H__
-#define __GST_DHOW_INTERFACE_H__
-
-#include "gstdshow.h"
-
-#ifdef LIBDSHOW_EXPORTS
-typedef bool (*push_buffer_func) (byte *buffer, long size, byte *src_object, UINT64 start, UINT64 stop);
-#endif /* LIBDSHOW_EXPORTS */
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 440
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifdef __cplusplus
-extern "C"{
-#endif 
-
-
-extern DSHOW_API const GUID CLSID_DshowFakeSink; 
-extern DSHOW_API const GUID CLSID_DshowFakeSrc; 
-extern DSHOW_API const GUID IID_IGstDshowInterface;
-
-#define CLSID_DSHOWFAKESINK_STRING "{6A780808-9725-4d0b-8695-A4DD8D210773}"
-#define CLSID_DSHOWFAKESRC_STRING "{1E38DAED-8A6E-4DEA-A482-A878761D11CB}"
-
-typedef interface IGstDshowInterface IGstDshowInterface;
-
-/* header files for imported files */
-#include "oaidl.h"
-#include "ocidl.h"
-
-void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
-void __RPC_USER MIDL_user_free( void __RPC_FAR * ); 
-
-#ifndef __IGstDshowInterface_INTERFACE_DEFINED__
-#define __IGstDshowInterface_INTERFACE_DEFINED__
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-    
-    MIDL_INTERFACE("542C0A24-8BD1-46cb-AA57-3E46D006D2F3")
-    IGstDshowInterface : public IUnknown
-    {
-    public:
-        virtual HRESULT STDMETHODCALLTYPE gst_set_media_type( 
-            AM_MEDIA_TYPE __RPC_FAR *pmt) = 0;
-
-        virtual HRESULT STDMETHODCALLTYPE gst_set_buffer_callback( 
-            push_buffer_func push, byte *data) = 0;
-
-        virtual HRESULT STDMETHODCALLTYPE gst_push_buffer( 
-            byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount) = 0;
-        
-        virtual HRESULT STDMETHODCALLTYPE gst_flush() = 0;
-
-        virtual HRESULT STDMETHODCALLTYPE gst_set_sample_size(unsigned int size) = 0;
-    };
-    
-#else 	/* C style interface */
-
-    typedef struct IGstDshowInterfaceVtbl
-    {
-        BEGIN_INTERFACE
-        
-        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( 
-            IGstDshowInterface __RPC_FAR * This,
-            REFIID riid,
-            void __RPC_FAR *__RPC_FAR *ppvObject);
-        
-        ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( 
-            IGstDshowInterface __RPC_FAR * This);
-        
-        ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( 
-            IGstDshowInterface __RPC_FAR * This);
-        
-        HRESULT (STDMETHODCALLTYPE  *gst_set_media_type )( 
-            IGstDshowInterface __RPC_FAR * This,
-            AM_MEDIA_TYPE *pmt);
-
-        HRESULT (STDMETHODCALLTYPE *gst_set_buffer_callback) ( 
-            IGstDshowInterface __RPC_FAR * This,
-            byte * push, byte *data);
-
-        HRESULT (STDMETHODCALLTYPE *gst_push_buffer) ( 
-            IGstDshowInterface __RPC_FAR * This,
-            byte *buffer, __int64 start, __int64 stop,
-            unsigned int size, boolean discount);
-
-        HRESULT (STDMETHODCALLTYPE *gst_flush) ( 
-            IGstDshowInterface __RPC_FAR * This);
-        
-        HRESULT (STDMETHODCALLTYPE *gst_set_sample_size) ( 
-            IGstDshowInterface __RPC_FAR * This,
-            unsigned int size);
-
-        END_INTERFACE
-    } IGstDshowInterfaceVtbl;
-
-    interface IGstDshowInterface
-    {
-        CONST_VTBL struct IGstDshowInterfaceVtbl __RPC_FAR *lpVtbl;
-    };
-
-#define IGstDshowInterface_QueryInterface(This,riid,ppvObject)	\
-    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
-
-#define IGstDshowInterface_AddRef(This)	\
-    (This)->lpVtbl -> AddRef(This)
-
-#define IGstDshowInterface_Release(This)	\
-    (This)->lpVtbl -> Release(This)
-
-#define IGstDshowInterface_gst_set_media_type(This, mediatype)	\
-    (This)->lpVtbl -> gst_set_media_type(This, mediatype)
-
-#define IGstDshowInterface_gst_set_buffer_callback(This, push, data)	\
-    (This)->lpVtbl -> gst_set_buffer_callback(This, push, data)
-
-#define IGstDshowInterface_gst_push_buffer(This, buffer, start, stop, size, discount)	\
-    (This)->lpVtbl -> gst_push_buffer(This, buffer, start, stop, size, discount)
-
-#define IGstDshowInterface_gst_flush(This)	\
-    (This)->lpVtbl -> gst_flush(This)
-
-#define IGstDshowInterface_gst_set_sample_size(This, size)	\
-    (This)->lpVtbl -> gst_set_sample_size(This, size)
-
-#endif 	/* C style interface */
-
-#endif 	/* __IGstDshowInterface_INTERFACE_DEFINED__ */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GST_DSHOW_INTERFACE_H__ */
\ No newline at end of file
diff --git a/sys/dshowsrcwrapper/Makefile.am b/sys/dshowsrcwrapper/Makefile.am
index 38895a1..3ec4d64 100644
--- a/sys/dshowsrcwrapper/Makefile.am
+++ b/sys/dshowsrcwrapper/Makefile.am
@@ -1,10 +1,14 @@
-plugin_LTLIBRARIES = libgstdshowsrcwrapper.la
+# This plugin isn't buildable with autotools at this point in time, so just
+# ensure everything's listed in EXTRA_DIST
 
-libgstdshowsrcwrapper_la_SOURCES = gstdshowaudiosrc.c gstdshowsrcwrapper.c gstdshowvideosrc.c
-
-libgstdshowsrcwrapper_la_CFLAGS = $(GST_CFLAGS)
-libgstdshowsrcwrapper_la_LIBADD = $(GST_LIBS)
-libgstdshowsrcwrapper_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
-libgstdshowsrcwrapper_la_LIBTOOLFLAGS = --tag=disable-static
-
-noinst_HEADERS = gstdshowaudiosrc.h gstdshowsrcwrapper.h gstdshowvideosrc.h
+EXTRA_DIST = \
+  gstdshowaudiosrc.c \
+  gstdshowaudiosrc.h \
+  gstdshow.cpp \
+  gstdshowfakesink.cpp \
+  gstdshowfakesink.h \
+  gstdshow.h \
+  gstdshowinterface.h \
+  gstdshowsrcwrapper.cpp \
+  gstdshowvideosrc.c \
+  gstdshowvideosrc.h
diff --git a/sys/dshowsrcwrapper/gstdshow.cpp b/sys/dshowsrcwrapper/gstdshow.cpp
new file mode 100644
index 0000000..ed27d63
--- /dev/null
+++ b/sys/dshowsrcwrapper/gstdshow.cpp
@@ -0,0 +1,346 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
+ *
+ * gstdshow.cpp:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gstdshow.h"
+#include "gstdshowfakesink.h"
+
+CFactoryTemplate g_Templates[]=
+{
+  { 
+    L"DSHOW fake sink filter"
+    , &CLSID_DshowFakeSink
+    , CDshowFakeSink::CreateInstance
+    , NULL
+    , NULL
+  }
+};
+
+int g_cTemplates = sizeof(g_Templates)/sizeof(g_Templates[0]);
+static HINSTANCE g_hModule = NULL;
+
+extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
+BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
+{
+  if (!g_hModule)
+    g_hModule = (HINSTANCE)hModule;
+
+  return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
+}
+
+STDAPI DllRegisterServer()
+{
+  return AMovieDllRegisterServer2 (TRUE);
+}
+
+STDAPI DllUnregisterServer()
+{
+  return AMovieDllRegisterServer2 (FALSE);
+}
+
+HRESULT gst_dshow_register_fakefilters ()
+{
+  return DllRegisterServer();
+}
+
+void 
+gst_dshow_free_mediatype (AM_MEDIA_TYPE *pmt)
+{
+  if (pmt != NULL) {    
+    if (pmt->cbFormat != 0) {
+      CoTaskMemFree((PVOID)pmt->pbFormat);
+      pmt->cbFormat = 0;
+      pmt->pbFormat = NULL;
+    }
+    if (pmt->pUnk != NULL) {
+      /* Unecessary because pUnk should not be used, but safest. */
+      pmt->pUnk->Release();
+      pmt->pUnk = NULL;
+    }
+
+    CoTaskMemFree(pmt);
+  }
+}
+
+void 
+gst_dshow_free_pin_mediatype (gpointer pt)
+{
+  GstCapturePinMediaType * pin_mediatype = (GstCapturePinMediaType *) pt;
+  if (pin_mediatype) {
+    if (pin_mediatype->capture_pin) {
+      pin_mediatype->capture_pin->Release();
+      pin_mediatype->capture_pin = NULL;
+    }
+    if (pin_mediatype->mediatype) {
+      gst_dshow_free_mediatype (pin_mediatype->mediatype);
+      pin_mediatype->mediatype = NULL;
+    }
+  }
+}
+
+
+void 
+gst_dshow_free_pins_mediatypes (GList *pins_mediatypes)
+{
+  guint i = 0;
+  for (; i < g_list_length (pins_mediatypes); i++) {
+    GList *mylist = g_list_nth (pins_mediatypes, i);
+    if (mylist && mylist->data)
+      gst_dshow_free_pin_mediatype ((GstCapturePinMediaType *)mylist->data);
+  }
+  g_list_free (pins_mediatypes);
+}
+
+gboolean 
+gst_dshow_get_pin_from_filter (IBaseFilter *filter, PIN_DIRECTION pindir, IPin **pin)
+{
+  gboolean ret = FALSE;
+  IEnumPins *enumpins = NULL;
+  IPin *pintmp = NULL;
+  HRESULT hres; 
+  *pin = NULL;
+
+  hres = filter->EnumPins (&enumpins);
+  if (FAILED(hres)) {
+    return ret;
+  }
+
+  while (enumpins->Next (1, &pintmp, NULL) == S_OK)
+  {
+    PIN_DIRECTION pindirtmp;
+    hres = pintmp->QueryDirection (&pindirtmp);
+    if (hres == S_OK && pindir == pindirtmp) {
+      *pin = pintmp;
+      ret = TRUE;
+        break;
+    }
+    pintmp->Release ();
+  }
+  enumpins->Release ();
+
+  return ret;
+}
+
+gboolean gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype, 
+                               CLSID output_majortype, CLSID output_subtype, 
+                               gchar * prefered_filter_name, IBaseFilter **filter)
+{
+  gboolean ret = FALSE;
+  HRESULT hres;
+  GUID arrayInTypes[2];
+  GUID arrayOutTypes[2];
+  IFilterMapper2 *mapper = NULL;
+  IEnumMoniker *enum_moniker = NULL;
+  IMoniker *moniker = NULL;
+  ULONG fetched;
+  gchar *prefered_filter_upper = NULL;
+  gboolean exit = FALSE;
+
+  /* initialize output parameter */
+  if (filter)
+    *filter = NULL;
+
+  /* create a private copy of prefered filter substring in upper case */
+  if (prefered_filter_name) {
+    prefered_filter_upper = g_strdup (prefered_filter_name);
+    _strupr (prefered_filter_upper);
+  }
+
+  hres = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC, 
+      IID_IFilterMapper2, (void **) &mapper);
+  if (FAILED(hres))
+    goto clean;
+  
+  memcpy(&arrayInTypes[0], &input_majortype, sizeof (CLSID));
+  memcpy(&arrayInTypes[1], &input_subtype, sizeof (CLSID));
+  memcpy(&arrayOutTypes[0], &output_majortype, sizeof (CLSID));
+  memcpy(&arrayOutTypes[1], &output_subtype, sizeof (CLSID));
+
+  hres = mapper->EnumMatchingFilters (&enum_moniker, 0, FALSE, MERIT_DO_NOT_USE+1, 
+          TRUE, 1, arrayInTypes, NULL, NULL, FALSE, 
+          TRUE, 1, arrayOutTypes, NULL, NULL);
+  if (FAILED(hres))
+    goto clean;
+  
+  enum_moniker->Reset ();
+  
+  while(hres = enum_moniker->Next (1, &moniker, &fetched),hres == S_OK
+    && !exit) {
+    IBaseFilter *filter_temp = NULL;
+    IPropertyBag *property_bag = NULL;
+    gchar * friendly_name = NULL;
+
+    hres = moniker->BindToStorage (NULL, NULL, IID_IPropertyBag, (void **)&property_bag);
+    if(SUCCEEDED(hres) && property_bag) {
+      VARIANT varFriendlyName;
+      VariantInit (&varFriendlyName);
+      
+      hres = property_bag->Read (L"FriendlyName", &varFriendlyName, NULL);
+      if(hres == S_OK && varFriendlyName.bstrVal) {
+         friendly_name = g_utf16_to_utf8((const gunichar2*)varFriendlyName.bstrVal, 
+            wcslen(varFriendlyName.bstrVal), NULL, NULL, NULL);        
+         if (friendly_name)
+           _strupr (friendly_name);
+        SysFreeString (varFriendlyName.bstrVal);
+      }
+      property_bag->Release ();
+    }
+
+    hres = moniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&filter_temp);    
+    if(SUCCEEDED(hres) && filter_temp) {
+      ret = TRUE;
+      if (filter) {
+        if (*filter)
+          (*filter)->Release ();
+
+        *filter = filter_temp;
+        (*filter)->AddRef ();
+
+        if (prefered_filter_upper && friendly_name &&
+          strstr(friendly_name, prefered_filter_upper))
+          exit = TRUE;
+      }
+
+      /* if we just want to know if the formats are supported OR 
+          if we don't care about what will be the filter used 
+          => we can stop enumeration */
+      if (!filter || !prefered_filter_upper)
+        exit = TRUE;
+
+      filter_temp->Release ();
+    }
+
+    if (friendly_name)
+      g_free (friendly_name);
+    moniker->Release ();
+  }
+
+clean:
+  if (prefered_filter_upper)
+    g_free (prefered_filter_upper);
+  if (enum_moniker)
+    enum_moniker->Release ();
+  if (mapper)
+    mapper->Release ();
+
+  return ret;
+}
+
+
+gchar *
+gst_dshow_getdevice_from_devicename  (const GUID *device_category, gchar **device_name)
+{
+  gchar *ret = NULL;
+  ICreateDevEnum *devices_enum = NULL;
+  IEnumMoniker *enum_moniker = NULL;
+  IMoniker *moniker = NULL;
+  HRESULT hres = S_FALSE;
+  ULONG fetched;
+  gboolean bfound = FALSE;
+  
+  hres = CoCreateInstance (CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
+      IID_ICreateDevEnum, (void**)&devices_enum);
+  if(hres != S_OK) {
+    /*error*/
+    goto clean;
+  }
+
+  hres = devices_enum->CreateClassEnumerator (*device_category,
+      &enum_moniker, 0);
+  if (hres != S_OK || !enum_moniker) {
+    /*error*/
+    goto clean;
+  }
+
+  enum_moniker->Reset ();
+  
+  while(hres = enum_moniker->Next (1, &moniker, &fetched),hres == S_OK
+    && !bfound) {
+    IPropertyBag *property_bag = NULL;
+    hres = moniker->BindToStorage(NULL, NULL, IID_IPropertyBag, (void **)&property_bag);
+    if(SUCCEEDED(hres) && property_bag) {
+      VARIANT varFriendlyName;
+      VariantInit (&varFriendlyName);
+      
+      hres = property_bag->Read (L"FriendlyName", &varFriendlyName, NULL);
+      if(hres == S_OK && varFriendlyName.bstrVal) {
+        gchar * friendly_name = g_utf16_to_utf8((const gunichar2*)varFriendlyName.bstrVal, 
+            wcslen(varFriendlyName.bstrVal), NULL, NULL, NULL);
+
+        if (!*device_name) {
+          *device_name = g_strdup (friendly_name);
+        }
+
+        if (_stricmp(*device_name, friendly_name) == 0) {
+          WCHAR *wszDisplayName = NULL;
+          hres = moniker->GetDisplayName (NULL, NULL, &wszDisplayName);
+          if(hres == S_OK && wszDisplayName) {
+            ret = g_utf16_to_utf8((const gunichar2*)wszDisplayName, 
+             wcslen(wszDisplayName), NULL, NULL, NULL);
+            CoTaskMemFree (wszDisplayName);
+          }
+          bfound = TRUE;
+        }
+        SysFreeString (varFriendlyName.bstrVal);
+      }
+      property_bag->Release ();
+    }
+    moniker->Release ();
+  }
+
+clean:
+  if (enum_moniker) {
+    enum_moniker->Release ();
+  }
+
+  if (devices_enum) {
+    devices_enum->Release ();
+  }
+
+  return ret;
+}
+
+gboolean 
+gst_dshow_show_propertypage (IBaseFilter *base_filter)
+{
+  gboolean ret = FALSE;
+  ISpecifyPropertyPages *pProp = NULL;
+  HRESULT hres = base_filter->QueryInterface (IID_ISpecifyPropertyPages, (void **)&pProp);
+  if (SUCCEEDED(hres)) 
+  {
+    /* Get the filter's name and IUnknown pointer.*/
+    FILTER_INFO FilterInfo;
+    CAUUID caGUID;
+    IUnknown *pFilterUnk = NULL;
+    hres = base_filter->QueryFilterInfo (&FilterInfo); 
+    base_filter->QueryInterface (IID_IUnknown, (void **)&pFilterUnk);
+
+    /* Show the page. */
+    pProp->GetPages (&caGUID);
+    pProp->Release ();
+    OleCreatePropertyFrame(GetDesktopWindow(), 0, 0, FilterInfo.achName,
+        1, &pFilterUnk, caGUID.cElems, caGUID.pElems, 0, 0, NULL);
+
+    pFilterUnk->Release ();
+    FilterInfo.pGraph->Release ();
+    CoTaskMemFree(caGUID.pElems);
+  }
+  return ret;
+}
diff --git a/sys/dshowsrcwrapper/gstdshow.h b/sys/dshowsrcwrapper/gstdshow.h
new file mode 100644
index 0000000..ec360b3
--- /dev/null
+++ b/sys/dshowsrcwrapper/gstdshow.h
@@ -0,0 +1,76 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
+ *
+ * gstdshow.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef _GSTDSHOW_
+#define _GSTDSHOW_
+
+#ifdef __cplusplus
+#include <streams.h>
+#endif
+#include <windows.h>
+#include <objbase.h>
+#include <dshow.h>
+#include <Rpc.h>
+
+#include <glib.h>
+
+typedef struct _GstCapturePinMediaType
+{
+  AM_MEDIA_TYPE *mediatype;
+  IPin *capture_pin;
+} GstCapturePinMediaType;
+
+#ifdef  __cplusplus
+extern "C" {
+#endif
+
+/* register fake filters as COM object and as Direct Show filters in the registry */
+HRESULT gst_dshow_register_fakefilters ();
+
+/* free memory of the input pin mediatype */
+void gst_dshow_free_pin_mediatype (gpointer pt);
+
+/* free memory of the input dshow mediatype */
+void gst_dshow_free_mediatype (AM_MEDIA_TYPE *pmt);
+
+/* free the memory of all mediatypes of the input list if pin mediatype */
+void gst_dshow_free_pins_mediatypes (GList *mediatypes);
+
+/* get a pin from directshow filter */
+gboolean gst_dshow_get_pin_from_filter (IBaseFilter *filter, PIN_DIRECTION pindir, IPin **pin);
+
+/* find and return a filter according to the input and output types */
+gboolean gst_dshow_find_filter(CLSID input_majortype, CLSID input_subtype, 
+                               CLSID output_majortype, CLSID output_subtype,
+                               gchar * prefered_filter_name, IBaseFilter **filter);
+
+/* get the dshow device path from device friendly name. 
+If friendly name is not set, it will return the first available device */
+gchar *gst_dshow_getdevice_from_devicename (const GUID *device_category, gchar **device_name);
+
+/* show the capture filter property page (generally used to setup the device). the page is modal*/
+gboolean gst_dshow_show_propertypage (IBaseFilter *base_filter);
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif /* _GSTDSHOW_ */
\ No newline at end of file
diff --git a/sys/dshowsrcwrapper/gstdshowaudiosrc.c b/sys/dshowsrcwrapper/gstdshowaudiosrc.c
index d6edf47..dcc4e38 100644
--- a/sys/dshowsrcwrapper/gstdshowaudiosrc.c
+++ b/sys/dshowsrcwrapper/gstdshowaudiosrc.c
@@ -19,12 +19,12 @@
  * Boston, MA 02111-1307, USA.
  */
 
-#include "gstdshowaudiosrc.h"
-
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
+#include "gstdshowaudiosrc.h"
+
 static const GstElementDetails gst_dshowaudiosrc_details =
 GST_ELEMENT_DETAILS ("Directshow audio capture source",
     "Source/Audio",
@@ -451,7 +451,7 @@ gst_dshowaudiosrc_get_caps (GstBaseSrc * basesrc)
               &cbReturned);
 
           /* we only want capture pins */
-          if (UuidCompare (&pin_category, &PIN_CATEGORY_CAPTURE,
+          if (UuidCompare (&pin_category, (UUID *) &PIN_CATEGORY_CAPTURE,
                   &rpcstatus) == 0) {
             IAMStreamConfig *streamcaps = NULL;
 
@@ -825,10 +825,10 @@ gst_dshowaudiosrc_getcaps_from_streamcaps (GstDshowAudioSrc * src, IPin * pin,
       if (!caps)
         caps = gst_caps_new_empty ();
 
-      if ((UuidCompare (&pin_mediatype->mediatype->subtype, &MEDIASUBTYPE_PCM,
+      if ((UuidCompare (&pin_mediatype->mediatype->subtype, (UUID *) &MEDIASUBTYPE_PCM,
                   &rpcstatus) == 0 && rpcstatus == RPC_S_OK)
           && (UuidCompare (&pin_mediatype->mediatype->formattype,
-                  &FORMAT_WaveFormatEx, &rpcstatus) == 0
+                  (UUID *) &FORMAT_WaveFormatEx, &rpcstatus) == 0
               && rpcstatus == RPC_S_OK)) {
         WAVEFORMATEX *wavformat =
             (WAVEFORMATEX *) pin_mediatype->mediatype->pbFormat;
diff --git a/sys/dshowsrcwrapper/gstdshowaudiosrc.h b/sys/dshowsrcwrapper/gstdshowaudiosrc.h
index fb57101..b814701 100644
--- a/sys/dshowsrcwrapper/gstdshowaudiosrc.h
+++ b/sys/dshowsrcwrapper/gstdshowaudiosrc.h
@@ -27,7 +27,8 @@
 #include <gst/audio/gstaudiosrc.h>
 #include <gst/interfaces/propertyprobe.h>
 
-#include "gstdshowsrcwrapper.h"
+#include "gstdshow.h"
+#include "gstdshowinterface.h"
 
 G_BEGIN_DECLS
 #define GST_TYPE_DSHOWAUDIOSRC              (gst_dshowaudiosrc_get_type())
diff --git a/sys/dshowsrcwrapper/gstdshowfakesink.cpp b/sys/dshowsrcwrapper/gstdshowfakesink.cpp
new file mode 100644
index 0000000..afc0a5e
--- /dev/null
+++ b/sys/dshowsrcwrapper/gstdshowfakesink.cpp
@@ -0,0 +1,127 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
+ *
+ * gstdshowfakesink.cpp:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gstdshowfakesink.h"
+
+
+CDshowFakeSink::CDshowFakeSink()
+  : m_hres(S_OK), CBaseRenderer(CLSID_DshowFakeSink, "DshowFakeSink", NULL, &m_hres)
+{
+  m_callback = NULL;
+}
+
+CDshowFakeSink::~CDshowFakeSink()
+{
+
+}
+
+//Object creation.
+CUnknown* WINAPI CDshowFakeSink::CreateInstance(LPUNKNOWN pUnk, HRESULT *pHr) 
+{
+	CDshowFakeSink *pNewObject = new CDshowFakeSink();
+  g_print ("CDshowFakeSink::CreateInstance\n");
+  if (pNewObject == NULL) {
+    *pHr = E_OUTOFMEMORY;
+  }
+  return pNewObject;
+} 
+
+STDMETHODIMP CDshowFakeSink::QueryInterface(REFIID riid, void **ppvObject)
+{
+  if (riid == IID_IGstDshowInterface) {
+      *ppvObject = (IGstDshowInterface*) this;
+      AddRef();
+      return S_OK;
+  }
+  else
+    return CBaseRenderer::QueryInterface (riid, ppvObject);
+}
+
+ULONG STDMETHODCALLTYPE CDshowFakeSink::AddRef()
+{
+  return CBaseRenderer::AddRef();
+}
+
+ULONG STDMETHODCALLTYPE CDshowFakeSink::Release()
+{
+  return CBaseRenderer::Release();
+}
+
+
+STDMETHODIMP CDshowFakeSink::gst_set_media_type (AM_MEDIA_TYPE *pmt)
+{
+  m_MediaType.Set (*pmt);
+  return S_OK;
+}
+
+STDMETHODIMP CDshowFakeSink::gst_set_buffer_callback (push_buffer_func push, byte *data)
+{
+  m_callback = push;
+  m_data = data;
+  return S_OK;
+}
+
+STDMETHODIMP CDshowFakeSink::gst_push_buffer (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount)
+{
+  return E_NOTIMPL;
+}
+
+STDMETHODIMP CDshowFakeSink::gst_flush ()
+{
+  return E_NOTIMPL;
+}
+
+STDMETHODIMP CDshowFakeSink::gst_set_sample_size(unsigned int size)
+{
+  return E_NOTIMPL;
+}
+
+HRESULT CDshowFakeSink::CheckMediaType(const CMediaType *pmt)
+{
+  VIDEOINFOHEADER *p1;
+  VIDEOINFOHEADER *p2;
+  if(pmt != NULL)
+  {
+    p1 = (VIDEOINFOHEADER *)pmt->Format();
+    p2 = (VIDEOINFOHEADER *)m_MediaType.Format();
+    if (*pmt == m_MediaType)
+      return S_OK;
+  }
+
+  return S_FALSE;
+}
+
+HRESULT CDshowFakeSink::DoRenderSample(IMediaSample *pMediaSample)
+{
+  if(pMediaSample && m_callback)
+  {
+    BYTE *pBuffer = NULL;
+    LONGLONG lStart = 0, lStop = 0;
+    pMediaSample->GetPointer(&pBuffer);
+    long size = pMediaSample->GetActualDataLength();
+    pMediaSample->GetTime(&lStart, &lStop);
+    lStart*=100;
+    lStop*=100;
+    m_callback(pBuffer, size, m_data, lStart, lStop);
+  }
+  
+  return S_OK;
+}
diff --git a/sys/dshowsrcwrapper/gstdshowfakesink.h b/sys/dshowsrcwrapper/gstdshowfakesink.h
new file mode 100644
index 0000000..7f419b2
--- /dev/null
+++ b/sys/dshowsrcwrapper/gstdshowfakesink.h
@@ -0,0 +1,50 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
+ *
+ * gstdshowfakesink.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "gstdshowinterface.h"
+
+class CDshowFakeSink :  public CBaseRenderer,
+                        public IGstDshowInterface
+{
+public:
+  CDshowFakeSink ();
+  virtual ~CDshowFakeSink ();
+
+  static CUnknown * WINAPI CreateInstance (LPUNKNOWN pUnk, HRESULT *pHr);
+
+  virtual HRESULT CheckMediaType (const CMediaType *pmt);
+  virtual HRESULT DoRenderSample (IMediaSample *pMediaSample);
+  
+  STDMETHOD (QueryInterface)(REFIID riid, void **ppvObject);
+  ULONG STDMETHODCALLTYPE AddRef();
+  ULONG STDMETHODCALLTYPE Release();
+  STDMETHOD (gst_set_media_type) (AM_MEDIA_TYPE *pmt);
+  STDMETHOD (gst_set_buffer_callback) (push_buffer_func push, byte *data);
+  STDMETHOD (gst_push_buffer) (byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount);
+  STDMETHOD (gst_flush) ();
+  STDMETHOD (gst_set_sample_size) (unsigned int size);
+
+protected:
+  HRESULT m_hres;
+  CMediaType m_MediaType;
+  push_buffer_func m_callback;
+  byte *m_data;
+};
\ No newline at end of file
diff --git a/sys/dshowsrcwrapper/gstdshowinterface.h b/sys/dshowsrcwrapper/gstdshowinterface.h
new file mode 100644
index 0000000..68328b9
--- /dev/null
+++ b/sys/dshowsrcwrapper/gstdshowinterface.h
@@ -0,0 +1,163 @@
+/* GStreamer
+ * Copyright (C) 2007 Sebastien Moutte <sebastien@moutte.net>
+ *
+ * gstdshowinterface.h:
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_DHOW_INTERFACE_H__
+#define __GST_DHOW_INTERFACE_H__
+
+#include "gstdshow.h"
+
+#ifdef  __cplusplus
+typedef bool (*push_buffer_func) (byte *buffer, long size, byte *src_object, UINT64 start, UINT64 stop);
+#endif
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 440
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+//{6A780808-9725-4d0b-8695-A4DD8D210773}
+static const GUID CLSID_DshowFakeSink
+  = { 0x6a780808, 0x9725, 0x4d0b, { 0x86, 0x95,  0xa4,  0xdd,  0x8d,  0x21,  0x7,  0x73 } };
+
+// {FC36764C-6CD4-4C73-900F-3F40BF3F191A}
+static const GUID IID_IGstDshowInterface = 
+  { 0xfc36764c, 0x6cd4, 0x4c73, { 0x90, 0xf, 0x3f, 0x40, 0xbf, 0x3f, 0x19, 0x1a } };
+
+#define CLSID_DSHOWFAKESINK_STRING "{6A780808-9725-4d0b-8695-A4DD8D210773}"
+
+typedef interface IGstDshowInterface IGstDshowInterface;
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+
+void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void __RPC_FAR * ); 
+
+#ifndef __IGstDshowInterface_INTERFACE_DEFINED__
+#define __IGstDshowInterface_INTERFACE_DEFINED__
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+    
+    MIDL_INTERFACE("542C0A24-8BD1-46cb-AA57-3E46D006D2F3")
+    IGstDshowInterface : public IUnknown
+    {
+    public:
+        virtual HRESULT STDMETHODCALLTYPE gst_set_media_type( 
+            AM_MEDIA_TYPE __RPC_FAR *pmt) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE gst_set_buffer_callback( 
+            push_buffer_func push, byte *data) = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE gst_push_buffer( 
+            byte *buffer, __int64 start, __int64 stop, unsigned int size, bool discount) = 0;
+        
+        virtual HRESULT STDMETHODCALLTYPE gst_flush() = 0;
+
+        virtual HRESULT STDMETHODCALLTYPE gst_set_sample_size(unsigned int size) = 0;
+    };
+    
+#else 	/* C style interface */
+
+    typedef struct IGstDshowInterfaceVtbl
+    {
+        BEGIN_INTERFACE
+        
+        HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )( 
+            IGstDshowInterface __RPC_FAR * This,
+            REFIID riid,
+            void __RPC_FAR *__RPC_FAR *ppvObject);
+        
+        ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )( 
+            IGstDshowInterface __RPC_FAR * This);
+        
+        ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )( 
+            IGstDshowInterface __RPC_FAR * This);
+        
+        HRESULT (STDMETHODCALLTYPE  *gst_set_media_type )( 
+            IGstDshowInterface __RPC_FAR * This,
+            AM_MEDIA_TYPE *pmt);
+
+        HRESULT (STDMETHODCALLTYPE *gst_set_buffer_callback) ( 
+            IGstDshowInterface __RPC_FAR * This,
+            byte * push, byte *data);
+
+        HRESULT (STDMETHODCALLTYPE *gst_push_buffer) ( 
+            IGstDshowInterface __RPC_FAR * This,
+            byte *buffer, __int64 start, __int64 stop,
+            unsigned int size, boolean discount);
+
+        HRESULT (STDMETHODCALLTYPE *gst_flush) ( 
+            IGstDshowInterface __RPC_FAR * This);
+        
+        HRESULT (STDMETHODCALLTYPE *gst_set_sample_size) ( 
+            IGstDshowInterface __RPC_FAR * This,
+            unsigned int size);
+
+        END_INTERFACE
+    } IGstDshowInterfaceVtbl;
+
+    interface IGstDshowInterface
+    {
+        CONST_VTBL struct IGstDshowInterfaceVtbl __RPC_FAR *lpVtbl;
+    };
+
+#define IGstDshowInterface_QueryInterface(This,riid,ppvObject)	\
+    (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IGstDshowInterface_AddRef(This)	\
+    (This)->lpVtbl -> AddRef(This)
+
+#define IGstDshowInterface_Release(This)	\
+    (This)->lpVtbl -> Release(This)
+
+#define IGstDshowInterface_gst_set_media_type(This, mediatype)	\
+    (This)->lpVtbl -> gst_set_media_type(This, mediatype)
+
+#define IGstDshowInterface_gst_set_buffer_callback(This, push, data)	\
+    (This)->lpVtbl -> gst_set_buffer_callback(This, push, data)
+
+#define IGstDshowInterface_gst_push_buffer(This, buffer, start, stop, size, discount)	\
+    (This)->lpVtbl -> gst_push_buffer(This, buffer, start, stop, size, discount)
+
+#define IGstDshowInterface_gst_flush(This)	\
+    (This)->lpVtbl -> gst_flush(This)
+
+#define IGstDshowInterface_gst_set_sample_size(This, size)	\
+    (This)->lpVtbl -> gst_set_sample_size(This, size)
+
+#endif 	/* C style interface */
+
+#endif 	/* __IGstDshowInterface_INTERFACE_DEFINED__ */
+
+#endif /* __GST_DSHOW_INTERFACE_H__ */
\ No newline at end of file
diff --git a/sys/dshowsrcwrapper/gstdshowsrcwrapper.c b/sys/dshowsrcwrapper/gstdshowsrcwrapper.c
deleted file mode 100644
index 803fd80..0000000
--- a/sys/dshowsrcwrapper/gstdshowsrcwrapper.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* GStreamer
- * Copyright (C)  2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshowsrcwrapper.c: 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gstdshowaudiosrc.h"
-#include "gstdshowvideosrc.h"
-
-const GUID CLSID_GstreamerSrcFilter
-    =
-    { 0x6a780808, 0x9725, 0x4d0b, {0x86, 0x95, 0xa4, 0xdd, 0x8d, 0x21, 0x7,
-        0x73} };
-
-const GUID IID_IGstSrcInterface =
-    { 0x542c0a24, 0x8bd1, 0x46cb, {0xaa, 0x57, 0x3e, 0x46, 0xd0, 0x6, 0xd2,
-        0xf3} };
-
-
-static gboolean
-plugin_init (GstPlugin * plugin)
-{
-  /* register fake filters */
-  gst_dshow_register_fakefilters ();
-
-  if (!gst_element_register (plugin, "dshowaudiosrc",
-          GST_RANK_NONE,
-          GST_TYPE_DSHOWAUDIOSRC) ||
-      !gst_element_register (plugin, "dshowvideosrc",
-          GST_RANK_NONE, GST_TYPE_DSHOWVIDEOSRC))
-    return FALSE;
-
-  return TRUE;
-}
-
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
-    GST_VERSION_MINOR,
-    "dshowsrcwrapper",
-    "DirectShow sources wrapper plugin",
-    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
diff --git a/sys/dshowsrcwrapper/gstdshowsrcwrapper.cpp b/sys/dshowsrcwrapper/gstdshowsrcwrapper.cpp
new file mode 100644
index 0000000..1e9a8aa
--- /dev/null
+++ b/sys/dshowsrcwrapper/gstdshowsrcwrapper.cpp
@@ -0,0 +1,66 @@
+/* GStreamer
+ * Copyright (C)  2007 Sebastien Moutte <sebastien@moutte.net>
+ *
+ * gstdshowsrcwrapper.c: 
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "gstdshowaudiosrc.h"
+#include "gstdshowvideosrc.h"
+
+const GUID CLSID_GstreamerSrcFilter
+    =
+    { 0x6a780808, 0x9725, 0x4d0b, {0x86, 0x95, 0xa4, 0xdd, 0x8d, 0x21, 0x7,
+        0x73} };
+
+const GUID IID_IGstSrcInterface =
+    { 0x542c0a24, 0x8bd1, 0x46cb, {0xaa, 0x57, 0x3e, 0x46, 0xd0, 0x6, 0xd2,
+        0xf3} };
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+  /* register fake filters */
+  HRESULT hr = gst_dshow_register_fakefilters ();
+  if (FAILED (hr)) {
+    g_warning ("failed to register directshow fakesink filter: 0x%x\n", hr);
+    return FALSE;
+  }
+
+  if (!gst_element_register (plugin, "dshowaudiosrc",
+          GST_RANK_NONE,
+          GST_TYPE_DSHOWAUDIOSRC) ||
+      !gst_element_register (plugin, "dshowvideosrc",
+          GST_RANK_NONE, GST_TYPE_DSHOWVIDEOSRC))
+    return FALSE;
+
+  return TRUE;
+}
+
+extern "C" {
+
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
+    GST_VERSION_MINOR,
+    "dshowsrcwrapper",
+    "DirectShow sources wrapper plugin",
+    plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
+
+}
diff --git a/sys/dshowsrcwrapper/gstdshowsrcwrapper.h b/sys/dshowsrcwrapper/gstdshowsrcwrapper.h
deleted file mode 100644
index d94d49f..0000000
--- a/sys/dshowsrcwrapper/gstdshowsrcwrapper.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* GStreamer
- * Copyright (C)  2007 Sebastien Moutte <sebastien@moutte.net>
- *
- * gstdshowsrcwrapper.h: 
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library 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
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GST_DSHOW_H__
-#define __GST_DSHOW_H__
-
-#include <windows.h>
-#include <objbase.h>
-#include <dshow.h>
-#include <Rpc.h>
-
-#include <gst/dshow/gstdshowinterface.h>
-
-#pragma warning( disable : 4090 4024)
-
-#endif /* __GST_DSHOW_H__ */
diff --git a/sys/dshowsrcwrapper/gstdshowvideosrc.c b/sys/dshowsrcwrapper/gstdshowvideosrc.c
index 4a37778..a54751b 100644
--- a/sys/dshowsrcwrapper/gstdshowvideosrc.c
+++ b/sys/dshowsrcwrapper/gstdshowvideosrc.c
@@ -19,12 +19,12 @@
  * Boston, MA 02111-1307, USA.
  */
 
-#include "gstdshowvideosrc.h"
-
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
+#include "gstdshowvideosrc.h"
+
 static const GstElementDetails gst_dshowvideosrc_details =
 GST_ELEMENT_DETAILS ("DirectShow video capture source",
     "Source/Video",
@@ -520,7 +520,7 @@ gst_dshowvideosrc_get_caps (GstBaseSrc * basesrc)
               &cbReturned);
 
           /* we only want capture pins */
-          if (UuidCompare (&pin_category, &PIN_CATEGORY_CAPTURE,
+          if (UuidCompare (&pin_category, (UUID *) &PIN_CATEGORY_CAPTURE,
                   &rpcstatus) == 0) {
             IAMStreamConfig *streamcaps = NULL;
 
@@ -625,7 +625,7 @@ gst_dshowvideosrc_start (GstBaseSrc * bsrc)
       &IID_IBaseFilter, (LPVOID *) & src->dshow_fakesink);
   if (hres != S_OK || !src->dshow_fakesink) {
     GST_CAT_ERROR (dshowvideosrc_debug,
-        "Can't create an instance of our dshow fakesink filter (error=%d)",
+        "Can't create an instance of our dshow fakesink filter (error=0x%x)",
         hres);
     goto error;
   }
@@ -898,10 +898,10 @@ gst_dshowvideosrc_getcaps_from_streamcaps (GstDshowVideoSrc * src, IPin * pin,
         caps = gst_caps_new_empty ();
 
       /* I420 */
-      if ((UuidCompare (&pin_mediatype->mediatype->subtype, &MEDIASUBTYPE_I420,
+      if ((UuidCompare (&pin_mediatype->mediatype->subtype, (UUID *) &MEDIASUBTYPE_I420,
                   &rpcstatus) == 0 && rpcstatus == RPC_S_OK)
           && (UuidCompare (&pin_mediatype->mediatype->formattype,
-                  &FORMAT_VideoInfo, &rpcstatus) == 0
+                  (UUID *) &FORMAT_VideoInfo, &rpcstatus) == 0
               && rpcstatus == RPC_S_OK)) {
         video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
 
@@ -923,10 +923,10 @@ gst_dshowvideosrc_getcaps_from_streamcaps (GstDshowVideoSrc * src, IPin * pin,
       }
 
       /* RGB24 */
-      if ((UuidCompare (&pin_mediatype->mediatype->subtype, &MEDIASUBTYPE_RGB24,
+      if ((UuidCompare (&pin_mediatype->mediatype->subtype, (UUID *) &MEDIASUBTYPE_RGB24,
                   &rpcstatus) == 0 && rpcstatus == RPC_S_OK)
           && (UuidCompare (&pin_mediatype->mediatype->formattype,
-                  &FORMAT_VideoInfo, &rpcstatus) == 0
+                  (UUID *) &FORMAT_VideoInfo, &rpcstatus) == 0
               && rpcstatus == RPC_S_OK)) {
         video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
 
@@ -952,10 +952,10 @@ gst_dshowvideosrc_getcaps_from_streamcaps (GstDshowVideoSrc * src, IPin * pin,
       }
 
       /* DVSD */
-      if ((UuidCompare (&pin_mediatype->mediatype->subtype, &MEDIASUBTYPE_dvsd,
+      if ((UuidCompare (&pin_mediatype->mediatype->subtype, (UUID *) &MEDIASUBTYPE_dvsd,
                   &rpcstatus) == 0 && rpcstatus == RPC_S_OK)
           && (UuidCompare (&pin_mediatype->mediatype->formattype,
-                  &FORMAT_VideoInfo, &rpcstatus) == 0
+                  (UUID *) &FORMAT_VideoInfo, &rpcstatus) == 0
               && rpcstatus == RPC_S_OK)) {
         video_info = (VIDEOINFOHEADER *) pin_mediatype->mediatype->pbFormat;
 
@@ -978,10 +978,10 @@ gst_dshowvideosrc_getcaps_from_streamcaps (GstDshowVideoSrc * src, IPin * pin,
       }
 
       /* DV stream */
-      if ((UuidCompare (&pin_mediatype->mediatype->subtype, &MEDIASUBTYPE_dvsd,
+      if ((UuidCompare (&pin_mediatype->mediatype->subtype, (UUID *) &MEDIASUBTYPE_dvsd,
                   &rpcstatus) == 0 && rpcstatus == RPC_S_OK)
           && (UuidCompare (&pin_mediatype->mediatype->formattype,
-                  &FORMAT_DvInfo, &rpcstatus) == 0 && rpcstatus == RPC_S_OK)) {
+                  (UUID *) &FORMAT_DvInfo, &rpcstatus) == 0 && rpcstatus == RPC_S_OK)) {
 
         mediacaps = gst_caps_new_simple ("video/x-dv",
             "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
diff --git a/sys/dshowsrcwrapper/gstdshowvideosrc.h b/sys/dshowsrcwrapper/gstdshowvideosrc.h
index 8bc52fa..b7bfbb1 100644
--- a/sys/dshowsrcwrapper/gstdshowvideosrc.h
+++ b/sys/dshowsrcwrapper/gstdshowvideosrc.h
@@ -22,11 +22,13 @@
 #ifndef __GST_DSHOWVIDEOSRC_H__
 #define __GST_DSHOWVIDEOSRC_H__
 
+#include <glib.h>
 #include <gst/gst.h>
 #include <gst/base/gstpushsrc.h>
 #include <gst/interfaces/propertyprobe.h>
 
-#include "gstdshowsrcwrapper.h"
+#include "gstdshow.h"
+#include "gstdshowinterface.h"
 
 // 30323449-0000-0010-8000-00AA00389B71            MEDIASUBTYPE_I420
 DEFINE_GUID(MEDIASUBTYPE_I420, 0x30323449, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71);
diff --git a/win32/common/libgstdshow.def b/win32/common/libgstdshow.def
index d5e6d57..ee8586c 100644
--- a/win32/common/libgstdshow.def
+++ b/win32/common/libgstdshow.def
@@ -4,12 +4,5 @@ EXPORTS
     DllCanUnloadNow     PRIVATE
     DllRegisterServer   PRIVATE
     DllUnregisterServer PRIVATE
-	
-	gst_dshow_find_filter
-	gst_dshow_free_mediatype
-	gst_dshow_free_pin_mediatype
-	gst_dshow_free_pins_mediatypes
-	gst_dshow_get_pin_from_filter
-	gst_dshow_getdevice_from_devicename
-	gst_dshow_register_fakefilters
+    
 	
diff --git a/win32/vs6/gst_plugins_bad.dsw b/win32/vs6/gst_plugins_bad.dsw
index ba3fd2f..388fd82 100644
--- a/win32/vs6/gst_plugins_bad.dsw
+++ b/win32/vs6/gst_plugins_bad.dsw
@@ -39,18 +39,6 @@ Package=<4>
 
 ###############################################################################
 
-Project: "libgstdshowsrcwrapper"=".\libdshowsrcwrapper.dsp" - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
 Project: "libgstflv"=".\libgstflv.dsp" - Package Owner=<4>
 
 Package=<5>
diff --git a/win32/vs6/libdshowsrcwrapper.dsp b/win32/vs6/libdshowsrcwrapper.dsp
deleted file mode 100644
index 6486f95..0000000
--- a/win32/vs6/libdshowsrcwrapper.dsp
+++ /dev/null
@@ -1,137 +0,0 @@
-# Microsoft Developer Studio Project File - Name="libgstdshowsrcwrapper" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=libgstdshowsrcwrapper - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "libdshowsrcwrapper.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "libdshowsrcwrapper.mak" CFG="libgstdshowsrcwrapper - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "libgstdshowsrcwrapper - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "libgstdshowsrcwrapper - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "libgstdshowsrcwrapper - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDSHOWSRCWRAPPER_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../gst-libs" /I "../../../gst-plugins-base/gst-libs" /I "../../../gstreamer/libs" /I "../common" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DSHOWSRCWRAPPER_EXPORTS" /D "HAVE_CONFIG_H" /D "COBJMACROS" /D "_WIN32_DCOM" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40c /d "NDEBUG"
-# ADD RSC /l 0x40c /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 libgstdshow-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstaudio-0.10.lib libgstinterfaces-0.10.lib glib-2.0.lib gobject-2.0.lib ole32.lib oleaut32.lib Rpcrt4.lib Strmiids.lib user32.lib /nologo /dll /machine:I386 /out:"Release/libgstdshowsrcwrapper.dll" /libpath:"../../../dshowfakefilters/release" /libpath:"../gstreamer/win32/vs6/release" /libpath:"../gst-plugins-base/win32/vs6/release" /libpath:"./release"
-# Begin Special Build Tool
-TargetPath=.\Release\libgstdshowsrcwrapper.dll
-SOURCE="$(InputPath)"
-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\lib\gstreamer-0.10
-# End Special Build Tool
-
-!ELSEIF  "$(CFG)" == "libgstdshowsrcwrapper - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBGSTDSHOWSRCWRAPPER_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../gst-libs" /I "../../../gst-plugins-base/gst-libs" /I "../../../gstreamer/libs" /I "../common" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "DSHOWSRCWRAPPER_EXPORTS" /D "HAVE_CONFIG_H" /D "COBJMACROS" /D "_WIN32_DCOM" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x40c /d "_DEBUG"
-# ADD RSC /l 0x40c /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libgstdshow-0.10.lib libgstreamer-0.10.lib libgstbase-0.10.lib libgstaudio-0.10.lib libgstinterfaces-0.10.lib glib-2.0D.lib gobject-2.0D.lib ole32.lib oleaut32.lib Rpcrt4.lib user32.lib strmiids.lib /nologo /dll /debug /machine:I386 /out:"Debug/libgstdshowsrcwrapper.dll" /pdbtype:sept /libpath:"../gstreamer/win32/vs6/debug" /libpath:"../gst-plugins-base/win32/vs6/debug" /libpath:"./debug"
-# Begin Special Build Tool
-TargetPath=.\Debug\libgstdshowsrcwrapper.dll
-SOURCE="$(InputPath)"
-PostBuild_Cmds=copy /Y $(TargetPath) c:\gstreamer\debug\lib\gstreamer-0.10
-# End Special Build Tool
-
-!ENDIF 
-
-# Begin Target
-
-# Name "libgstdshowsrcwrapper - Win32 Release"
-# Name "libgstdshowsrcwrapper - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\sys\dshowsrcwrapper\gstdshowaudiosrc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\sys\dshowsrcwrapper\gstdshowsrcwrapper.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\sys\dshowsrcwrapper\gstdshowvideosrc.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\sys\dshowsrcwrapper\gstdshowaudiosrc.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\sys\dshowsrcwrapper\gstdshowsrcwrapper.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\sys\dshowsrcwrapper\gstdshowvideosrc.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/win32/vs8/gst-plugins-bad.sln b/win32/vs8/gst-plugins-bad.sln
index 13386d2..109210c 100644
--- a/win32/vs8/gst-plugins-bad.sln
+++ b/win32/vs8/gst-plugins-bad.sln
@@ -1,25 +1,25 @@
-Microsoft Visual Studio Solution File, Format Version 9.00
-# Visual Studio 2005
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstdirectsound", "libgstdirectsound.vcproj", "{566A2EB9-984C-4027-86DD-EDC7B390C679}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstdirectdraw", "libgstdirectdraw.vcproj", "{1594A623-5529-4B86-BD4A-694CF0BDB5C4}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Release|Win32 = Release|Win32
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{566A2EB9-984C-4027-86DD-EDC7B390C679}.Debug|Win32.ActiveCfg = Debug|Win32
-		{566A2EB9-984C-4027-86DD-EDC7B390C679}.Debug|Win32.Build.0 = Debug|Win32
-		{566A2EB9-984C-4027-86DD-EDC7B390C679}.Release|Win32.ActiveCfg = Release|Win32
-		{566A2EB9-984C-4027-86DD-EDC7B390C679}.Release|Win32.Build.0 = Release|Win32
-		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Debug|Win32.ActiveCfg = Debug|Win32
-		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Debug|Win32.Build.0 = Debug|Win32
-		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Release|Win32.ActiveCfg = Release|Win32
-		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Release|Win32.Build.0 = Release|Win32
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstdirectdraw", "libgstdirectdraw.vcproj", "{1594A623-5529-4B86-BD4A-694CF0BDB5C4}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libgstdshowsrcwrapper", "libdshowsrcwrapper.vcproj", "{42EC1484-5031-4962-9E45-C990BB77EB37}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Debug|Win32.ActiveCfg = Debug|Win32
+		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Debug|Win32.Build.0 = Debug|Win32
+		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Release|Win32.ActiveCfg = Release|Win32
+		{1594A623-5529-4B86-BD4A-694CF0BDB5C4}.Release|Win32.Build.0 = Release|Win32
+		{42EC1484-5031-4962-9E45-C990BB77EB37}.Debug|Win32.ActiveCfg = Debug|Win32
+		{42EC1484-5031-4962-9E45-C990BB77EB37}.Debug|Win32.Build.0 = Debug|Win32
+		{42EC1484-5031-4962-9E45-C990BB77EB37}.Release|Win32.ActiveCfg = Release|Win32
+		{42EC1484-5031-4962-9E45-C990BB77EB37}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal
