Indeed. Some of your changes look like they are applicable (or at least not be detremental) to the common implementation. Pretty much everything except for the connection dialog stuff could go in the common code. Then just subclass it and add the backend specific code there. Saves duplication.