The primary problem I see is that we call the functions regardless of whether the prerequisites for using their functionality are met. This is also where the DX10.1 bug occurred. The OOP nature of the COM interface allowed the GetDevice call succeed (10.1 devices derive from 10) but the needed DX10 preparation failed earlier as 10.1 uses other DLLs. I think having some more basic checks there might prevent us trouble in the future.