protected void initializeKeyExchangeFactory(ComponentFactory keyexchange) {
		// sshd has its own version of these classes so they will not be on its
		// classpath, this is why we use class.forname
		try {
			Class<?> DiffieHellmanGroup14Sha1 = Class
					.forName("com.sshtools.ssh.components.jce.DiffieHellmanGroup14Sha1");
			Class<?> DiffieHellmanGroup1Sha1 = Class
					.forName("com.sshtools.ssh.components.jce.DiffieHellmanGroup1Sha1");
			Class<?> DiffieHellmanGroupExchangeSha1 = Class
					.forName("com.sshtools.ssh.components.jce.DiffieHellmanGroupExchangeSha1");
			Class<?> DiffieHellmanGroupExchangeSha256 = Class
					.forName("com.sshtools.ssh.components.jce.DiffieHellmanGroupExchangeSha256");

			if (testKeyExchangeAlgorithm("diffie-hellman-group14-sha1",
					DiffieHellmanGroup14Sha1)) {
				keyexchange.add("diffie-hellman-group14-sha1",
						DiffieHellmanGroup14Sha1);
			}

			if (testKeyExchangeAlgorithm("diffie-hellman-group1-sha1",
					DiffieHellmanGroup1Sha1)) {
				keyexchange.add("diffie-hellman-group1-sha1",
						DiffieHellmanGroup1Sha1);
			}

			if (testKeyExchangeAlgorithm("diffie-hellman-group-exchange-sha1",
					DiffieHellmanGroupExchangeSha1)) {
				keyexchange.add("diffie-hellman-group-exchange-sha1",
						DiffieHellmanGroupExchangeSha1);
			}

			if (testKeyExchangeAlgorithm(
					"diffie-hellman-group-exchange-sha256",
					DiffieHellmanGroupExchangeSha256)) {
				keyexchange.add("diffie-hellman-group-exchange-sha256",
						DiffieHellmanGroupExchangeSha256);
			}
			
			keyexchange.add("ecdh-sha2-nistp256", DiffieHellmanEcdhNistp256.class);
			keyexchange.add("ecdh-sha2-nistp384", DiffieHellmanEcdhNistp384.class);
//			keyexchange.add("ecdh-sha2-nistp521", DiffieHellmanEcdhNistp521.class);

		} catch (ClassNotFoundException e) {
			// This is expected for SSHD
		}
	}