diff --git a/Changelog b/Changelog
deleted file mode 100644
index e189380..0000000
--- a/Changelog
+++ /dev/null
@@ -1,226 +0,0 @@
-* 2018-06-14 Scott Talbert <swt@techie.net>
-- congruity-20 is released
-- congruity/mhgui: fix installation with Python 2 (thanks Chris Mayo)
-
-* 2018-06-09 Scott Talbert <swt@techie.net>
-- congruity-19 is released
-- mhgui: Numerous updates to WSDL/XSD to match Logitech changes
-- mhgui: Allow setting input to 'None' in Setup Watch TV and Setup Activities
-- mhgui: Numerous fixes to the login process
-- mhgui: Provide a different error message if a members.harmonyremote.com
-  account is used
-- congruity/mhgui: Add support for wxPython 3.0
-- mhgui: Add the ability to adjust device delays
-- mhgui: Add support for Harmony 350
-- mhgui: Add --help argument
-- mhgui: Align controls in Welcome and AddDevice
-- mhgui: Add device names to AdjustDeviceDelays and AdjustPowerSettings
-- mhgui: Catch URLErrors during login
-- congruity: Allow GNOME to label congruity in ALT-TAB switcher
-- mhgui: Fix Configure Device for Harmony 600/650/700
-- mhgui: Add support for saving username/password via Secret service
-- mhgui: Only attempt login if details are entered
-- mhgui: Fix creating activities for Harmony 650
-- mhgui: Fix saving Watch TV for Harmony 200/300/350
-- mhgui: Fix exception when deleting a remote
-- congruity/mhgui: Add support for wxPython 4 (Phoenix)
-- congruity/mhgui: Add support for Python 3
-- congruity/mhgui: Modernize Python installation (Makefile -> setup.py)
-- mhgui: Switch to use https when talking to SourceForge / config download
-
-* 2014-03-29 Scott Talbert <swt@techie.net>
-- congruity-18 is released
-- mhgui: Added support for Harmony 650
-- mhgui: Added support for Harmony Link
-- mhgui: Added support for configuring the Watch TV button on Harmony 200/300
-- mhgui: Numerous updates to WSDL/XSD to match Logitech changes
-- mhgui: Update Device Configuration page to clearly show which commands are
-  mapped and which are not (already mapped commands are shown in light grey)
-- mhgui: All long running tasks (website or remote communication) are now run
-  in a separate thread to avoid stalling the UI.  A throbber was added to
-  provide an indication that a background operation is in progress.
-- mhgui: Added .desktop and a man page
-- mhgui: Added support for modifying power up/down settings (adding delays,
-  additional commands, etc.)
-- mhgui: Added command line option to enable Suds debugging
-- mhgui: Added capability to delete remotes from an account
-
-* 2013-06-11 Scott Talbert <swt@techie.net>
-- congruity-17 is released
-- mhgui: Update XSD to match Logitech changes.  (mhgui is broken otherwise)
-- mhgui: Fix bug where 'Update Button' functionality was broken.
-- mhgui: Fetch the WSDL/XSD files via http instead of locally (by default).
-  This will allow updating the WSDL/XSD in the future without having to
-  release a new version of congruity.
-
-* 2013-04-16 Scott Talbert <swt@techie.net>
-- congruity-16 is released
-- Port congruity to the new libconcord API which enables support for a
-  significant number of new remotes (200/300, 890/895, 900/1000/1100, One).
-- Add mhgui which provides an alternative front end to myharmony.com website,
-  enabling support for Harmony 200/300.
-- Fixed an issue with certain remotes (e.g., 525) where the remote is not
-  detected after a reset.
-
-* 2010-??-?? Stephen Warren <s-t-concordance@wwwdotorg.org>
-- Fixed messages to refer to a "finish" button instead of a "next" button.
-  Related: Refer to "clicking" this button instead of "pressing" it.
-- Detect at least some bad IR learning results.
-
-* 2010-08-01 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-15 is released
-- Call new APIs in libconcord-0.22, for Harmony 700 support.
-- Tweak WrappedStaticText.UpdateText again, so it shows all text and doesn't
-  wrap it strangely, at least with Lucids's wxpython 2.8.10.1-0ubuntu1.
-
-* 2009-12-16 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-14 is released
-- replace remote.png with a GPL-licensed version provided by 
-  Mathieu Trudel-Lapierre <mathieu.tl@gmail.com>
-- Tweak WrappedStaticText.UpdateText so it shows all text and doesn't wrap it
-  strangely, at least with Jaunty's wxpython 2.8.9.1-0ubuntu6.
-
-* 2009-08-04 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-13 is released
-- Update MIME types in .desktop file
-  Patch by Adam Williamson <awilliam@redhat.com>
-
-  Apparently, these new MIME types match what the Logitech server sends
-  when you perform a download:
-  https://bugzilla.redhat.com/show_bug.cgi?id=506536#c12
-
-  However, Fedora still packages definitions of these MIME types as part of
-  libconcord. Packagers for other distributions should double-check the
-  Fedora packaging of libconcord; see file libconcord-0.21-mime-type-def.patch
-  which adds file concordance-0.21/libconcord/libconcord.xml to the
-  libconcord sources.
-
-* 2009-06-17 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-12 is released
-- Add congruity.desktop to release script
-
-* 2009-06-17 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-11 is released
-- Fix Pronto hex import
-  Patch by Andreas Schulz <Andreas.R.Schulz@gmx.de>
-- Throw runtime error dialog if wxPython version is not at least 2.8
-- Add .desktop file
-  Patch by Adam Williamson <awilliam@redhat.com>
-
-* 2009-03-09 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-10 is released
-- Implement IR learning feature, with support for learning from the original
-  remote using the Harmony, or reading the signal from a "Pronto Hex" file.
-  (Merge of /branches/irlean)
-  Parts based on code by Andreas Schulz <Andreas.R.Schulz@gmx.de>
-- Various internal code changes to support IR learning and general cleanup.
-- Implement --no-web command-line option, which prevents posting any data
-  to the Harmony website. This can be useful when testing congruity.
-- Change default install prefix to /usr/local; this makes typical end-user
-  manual installs slightly simpler. Also, automatically patch install location
-  into the app during installation.
-- If libconcord import fails, display the entire backtrace information, to
-  enable easier debugging of the issue.
-- Enhance README
-
-* 2008-09-07 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-9 is released
-- Use a different remote.png, with a known free license.
-
-* 2008-07-03 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-8 is released
-- Centralize cancel/exit handling,
-  and clean up any libconcord resources when exiting the application.
-- Add thread-safe cancelling to ConnectPanel.
-- Work around a typo in libconcord 0.20's Python bindings.
-- Provide a GUI message if libconcord can't be loaded, in case congruity
-  wasn't run from a terminal.
-
-* 2008-07-02 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- Increase connect timeout after a reset operation, just to make sure
-  we don't miss the remote coming back.
-- Fix Makefile to create all directories files are written to, and add
-  a few more variables that can be tweaked e.g. by packaging scripts.
-* On behalf of Andreas Schulz <Andreas.R.Schulz@gmx.de>
-- Use a simpler and potentially more reliable fix for GTK buttons not
-  accepting clicks if the mouse was inside the widget when enabled.
-
-* 2008-07-01 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- Command-line parsing errors are displayed by the GUI, instead of being
-  echo'd to stdout. This makes errors visible when congruity is launched
-  without a terminal
-
-* 2008-06-25..2008-07-01 Stephen Warren <s-t-concordance@wwwdotorg.org>
-* Inspired by Andreas Schulz <Andreas.R.Schulz@gmx.de>
-- Significant internal structural changes to the implementation, which
-  simplify things a lot, and make program flow far more obvious, localized,
-  and correctly polymorphic.
-- Add a separate "connect" page, so that the other pages don't have to
-  re-implement this common function.
-
-* 2008-06-17 Stephen Warren <s-t-concordance@wwwdotorg.org>
-* On behalf of Andreas Schulz <Andreas.R.Schulz@gmx.de>
-- Fix issue where next button wouldn't respond to clicks if the pointer was
-  already within the button when it was re-enabled.
-
-* 2008-04-14 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-7 is released
-- Switched license to GPLv3+ to be compatible with libconcord by default.
-  Contact me if you want the code under a different license, but please
-  note that you won't be able to use relicensed code with libconcord.
-- Added a Makefile for easy installation.
-  Thanks to Phil Dibowitz for the contribution.
-- Added a manual page.
-- Added a few useful URLs to README.txt.
-- Fixed reliance on syntax specific to Python 2.5.
-
-* 2008-04-13 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-6 is released
-- Search for images in /usr/share/congruity, the source directory, then
-  CWD. This should allow easy system-wide installation of congruity.
-- libconcord.py is no longer distributed with congruity; it is now part
-  of libconcord itself (see libconcord/bindings/python/).
-- Apparently forgot to release LICENSE.txt before.
-
-* 2008-04-07 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-5 is released
-- This release solely operates using libconcord; "screen-scraping" the output
-  from the concordance application is no longer supported.
-- Implement firmware upgrade.
-- Minor tweaks for operation on MS-Windows.
-- congruity now sets the time on the remote after any reboot.
-
-* 2008-03-29 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- congruity-4 is released
-- Renamed package from harmonygui to congruity, in line with the
-  coming rename of the harmonycontrol project to concordance/libconcord.
-- Changes to match latest CVS libconcord API changes
-
-* 2008-02-24 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- harmonygui-3 is released
-- Added README.txt.
-- Added LICENSING.txt, to account for images too.
-- Remove GUI for initial web connection in update mode; the libharmony
-  branch code doesn't print this status information, so now we act like
-  it was never there.
-- Code re-org, to allow for multiple back-ends.
-- Added a back-end that calls libharmony.so directly using ctypes.
-
-* 2008-02-10 Stephen Warren <s-t-concordance@wwwdotorg.org>
-- harmonygui-2 is released
-- Updated ezhexparser to recognize firmware update files.
-- Updated GUI to handle firmware updates, by informing user its
-  not yet supported.
-- Separated ezhexparser and tuiparser operation mode enumerations.
-- Enhanced ptyrun error handling, so it's more obvious what happened
-  when the harmony application can't be found in the $PATH.
-- Updated harmonyfake to use ^H characters to re-write output, not
-  \r. This matches the real harmony app.
-- Minor typo cleanups in messages.
-- Added licensing information.
-- Added this Changelog
-
-* 2008-02-05 Stephen Warren <s-t-concordance@wwwdotorg.org> 
-- harmonygui-1 is released
-- Initial release.
-
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..cf9021c
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,12 @@
+Metadata-Version: 2.1
+Name: congruity
+Version: 20
+Summary: Applications for programming Logitech Harmony remote controls
+Home-page: https://sourceforge.net/projects/congruity/
+License: UNKNOWN
+Platform: UNKNOWN
+License-File: LICENSE.txt
+License-File: COPYING
+
+UNKNOWN
+
diff --git a/congruity.egg-info/PKG-INFO b/congruity.egg-info/PKG-INFO
new file mode 100644
index 0000000..cf9021c
--- /dev/null
+++ b/congruity.egg-info/PKG-INFO
@@ -0,0 +1,12 @@
+Metadata-Version: 2.1
+Name: congruity
+Version: 20
+Summary: Applications for programming Logitech Harmony remote controls
+Home-page: https://sourceforge.net/projects/congruity/
+License: UNKNOWN
+Platform: UNKNOWN
+License-File: LICENSE.txt
+License-File: COPYING
+
+UNKNOWN
+
diff --git a/congruity.egg-info/SOURCES.txt b/congruity.egg-info/SOURCES.txt
new file mode 100644
index 0000000..6babdaa
--- /dev/null
+++ b/congruity.egg-info/SOURCES.txt
@@ -0,0 +1,41 @@
+COPYING
+LICENSE.txt
+README.txt
+congruity.1
+congruity.desktop
+mhgui.1
+mhgui.desktop
+setup.py
+congruity/__init__.py
+congruity/account.xsd
+congruity/activity.xsd
+congruity/am_data.xsd
+congruity/arrays.xsd
+congruity/button_mapping.xsd
+congruity/congruity.py
+congruity/data.xsd
+congruity/discovery.xsd
+congruity/dm_data.xsd
+congruity/dm_operation.xsd
+congruity/harmony.wsdl
+congruity/icon-complete.png
+congruity/icon-failed.png
+congruity/icon-in-progress.png
+congruity/icon-unstarted.png
+congruity/ir_data.xsd
+congruity/mhgui.py
+congruity/mhmanager.py
+congruity/operation.xsd
+congruity/product.xsd
+congruity/remote.png
+congruity/search_match.xsd
+congruity/serialization.xsd
+congruity/throbber.gif
+congruity/user_button_mapping.xsd
+congruity/user_feature.xsd
+congruity.egg-info/PKG-INFO
+congruity.egg-info/SOURCES.txt
+congruity.egg-info/dependency_links.txt
+congruity.egg-info/entry_points.txt
+congruity.egg-info/not-zip-safe
+congruity.egg-info/top_level.txt
\ No newline at end of file
diff --git a/congruity.egg-info/dependency_links.txt b/congruity.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/congruity.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/congruity.egg-info/entry_points.txt b/congruity.egg-info/entry_points.txt
new file mode 100644
index 0000000..b6a7872
--- /dev/null
+++ b/congruity.egg-info/entry_points.txt
@@ -0,0 +1,4 @@
+[gui_scripts]
+congruity = congruity.congruity:main
+mhgui = congruity.mhgui:main
+
diff --git a/congruity.egg-info/not-zip-safe b/congruity.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/congruity.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/congruity.egg-info/top_level.txt b/congruity.egg-info/top_level.txt
new file mode 100644
index 0000000..d6a58da
--- /dev/null
+++ b/congruity.egg-info/top_level.txt
@@ -0,0 +1 @@
+congruity
diff --git a/congruity/account.xsd b/congruity/account.xsd
index 53c25ea..af890d2 100644
--- a/congruity/account.xsd
+++ b/congruity/account.xsd
@@ -7,7 +7,7 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
 
   <complexType name="Device">
     <sequence>
@@ -63,6 +63,7 @@
       <element name="DateCreated" type="xsd:string"/>
       <element name="Dongles" type="xsd:string"/>
       <element name="FirstConnectDate" type="xsd:string"/>
+      <element name="FirstProvisionedDate" type="xsd:string"/>
       <element name="FirstSyncDate" type="xsd:string"/>
       <element name="GlobalRemoteId" type="xsd:string"/>
       <element name="GlobalRemoteRefurbishedDate" type="xsd:string" nillable="true"/>
@@ -80,6 +81,7 @@
       <element name="KeyboardLayout" type="xsd:string"/>
       <element name="KeyboardLocale" type="xsd:string" nillable="true"/>
       <element name="LastProductIdentifier" type="xsd:string"/>
+      <element name="LastProvisionedDate" type="xsd:string"/>
       <element name="LastSyncDate" type="xsd:string"/>
       <element name="LogitechProductId" type="xsd:string"/>
       <element name="LogitechSerial" type="xsd:string"/>
@@ -127,6 +129,7 @@
       <element name="ContactMe" type="xsd:string"/>
       <element name="CountryType" type="xsd:string"/>
       <element name="CustomerId" type="xsd:string" nillable="true"/>
+      <element name="DataConsent" type="xsd:string" nillable="true"/>
       <element name="Email" type="xsd:string"/>
       <element name="FirstName" type="xsd:string"/>
       <element name="InstallerId" type="xsd:string" nillable="true"/>
@@ -137,6 +140,7 @@
       <element name="Longitude" type="xsd:string" nillable="true"/>
       <element name="Password" type="xsd:string" nillable="true"/>
       <element name="RemoteLanguage" type="xsd:string" nillable="true"/>
+      <element name="Sub" type="xsd:string" nillable="true"/>
       <element name="TimeZone" type="xsd:string" nillable="true"/>
       <element name="UserKey" type="xsd:string"/>
       <element name="UserTimeZone" type="xsd:string" nillable="true"/>
diff --git a/congruity/activity.xsd b/congruity/activity.xsd
index bdf90d8..ee011e4 100644
--- a/congruity/activity.xsd
+++ b/congruity/activity.xsd
@@ -7,8 +7,8 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
-  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" location="arrays.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
+  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" schemaLocation="arrays.xsd"/>
 
   <complexType name="DeviceWithCapabilities">
     <sequence>
diff --git a/congruity/arrays.xsd b/congruity/arrays.xsd
index 235ea3f..9511ae0 100644
--- a/congruity/arrays.xsd
+++ b/congruity/arrays.xsd
@@ -9,10 +9,16 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.DataContract.Activity" location="activity.xsd"/>
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.DataContract.UserFeature" location="user_feature.xsd"/>
-  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/" location="serialization.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.DataContract.Activity" schemaLocation="activity.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.DataContract.UserFeature" schemaLocation="user_feature.xsd"/>
+  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="serialization.xsd"/>
+
+  <complexType name="Attributes">
+     <sequence>
+        <element name="int" type="xsd:int"/>
+    </sequence>
+  </complexType>
 
   <complexType name="taughtCommandIds">
     <sequence>
diff --git a/congruity/button_mapping.xsd b/congruity/button_mapping.xsd
index 6d167f2..c93d0c0 100644
--- a/congruity/button_mapping.xsd
+++ b/congruity/button_mapping.xsd
@@ -6,7 +6,7 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
 
   <complexType name="ButtonAssignment" abstract="true">
     <sequence>
diff --git a/congruity/dm_data.xsd b/congruity/dm_data.xsd
index 62f51de..a6d72c7 100644
--- a/congruity/dm_data.xsd
+++ b/congruity/dm_data.xsd
@@ -6,7 +6,7 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
 
   <complexType name="Device">
     <sequence>
@@ -28,6 +28,7 @@
       <element name="PictureId" type="xsd:string"/>
       <element name="PressMinRepeats" type="xsd:string"/>
       <element name="ActivityIds" type="xsd:string"/>
+      <element name="AppLaunchConfigs" type="xsd:string"/>
       <element name="AutoDetectedDevice" type="ns1:AutoDetectedDevice"/>
       <element name="BTAddress" type="xsd:string" nillable="true"/>
       <element name="Characterization" type="xsd:string"/>
@@ -42,6 +43,7 @@
       <element name="DeviceTypeDisplayName" type="xsd:string"/>
       <element name="DongleIndex" type="xsd:string"/>
       <element name="DongleRFID" type="xsd:string"/>
+      <element name="FriendlyName" type="xsd:string"/>
       <element name="GlobalDeviceVersionId" type="ns1:GlobalDeviceVersionId"/>
       <element name="GlobalLanguageVersionId" type="ns1:GlobalLanguageVersionId"/>
       <element name="GroupName" type="xsd:string" nillable="true"/>
diff --git a/congruity/dm_operation.xsd b/congruity/dm_operation.xsd
index 8bec11c..703a0e7 100644
--- a/congruity/dm_operation.xsd
+++ b/congruity/dm_operation.xsd
@@ -11,12 +11,12 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Manager.DeviceManager.Contracts.Data.SearchMatch" location="search_match.xsd"/>
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data.Operation" location="operation.xsd"/>
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Manager.DeviceManager.Contracts.Data" location="dm_data.xsd"/>
-  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" location="arrays.xsd"/>
-  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/" location="serialization.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Manager.DeviceManager.Contracts.Data.SearchMatch" schemaLocation="search_match.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data.Operation" schemaLocation="operation.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Manager.DeviceManager.Contracts.Data" schemaLocation="dm_data.xsd"/>
+  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" schemaLocation="arrays.xsd"/>
+  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="serialization.xsd"/>
 
   <complexType name="Operation">
     <sequence>
diff --git a/congruity/mhmanager.py b/congruity/mhmanager.py
index ec0e2de..1f78f6a 100644
--- a/congruity/mhmanager.py
+++ b/congruity/mhmanager.py
@@ -27,6 +27,7 @@ import sys
 import random
 import datetime
 import json
+import html
 from six.moves.html_parser import HTMLParser
 from suds.cache import ObjectCache
 from suds.client import Client
@@ -168,28 +169,23 @@ class MHManager():
     # account.
     def Login(self, email, password):
         baseUrl = "https://setup.myharmony.com"
-        url = baseUrl + "/MartiniWeb/Account/TestLoginAndMW?provider=hp&&verify=true&toucheck=true"
+        url = baseUrl + "/martiniweb/account/ProceedWithLIPLogin?provider=hp&state=&toucheck=True"
         data = json.dumps({'email': email, 'password': password}).encode('utf-8')
         headers = {'Content-Type': 'application/json'}
         request = urllib.request.Request(url, data, headers)
         response = urllib.request.urlopen(request)
         # For some reason the response to this is double-encoded
         jsonResponse = json.loads(json.loads(response.read().decode('utf-8')))
-        if "mwResult" in jsonResponse:
-            if jsonResponse["mwResult"]: # members.harmonyremote.com acct
+        if jsonResponse == 401:
+            url = baseUrl + '/martiniweb/Home/TestMWLoginUser'
+            request = urllib.request.Request(url, data, headers)
+            response = urllib.request.urlopen(request)
+            jsonResponse = json.loads(response.read().decode('utf-8'))
+            if jsonResponse["Result"]: # members.harmonyremote.com acct
                 return None
             else:
                 return False
 
-        url = baseUrl + "/MartiniWeb/Home/Login?i=" + jsonResponse["id_token"]
-        url += "&a=" + jsonResponse["access_token"] + "&cl=en-US"
-        request = urllib.request.Request(url)
-        response = urllib.request.urlopen(request)
-        parser = LoginResponseHTMLParser()
-        parser.feed(response.read().decode('utf-8'))
-        initparams = dict(u.split("=", 1) for u in parser.initparams.split(","))
-        self.contentServiceAuthKey = initparams['ContentServiceAuthKey']
-
         url = "https://svcs.myharmony.com/CompositeSecurityServices/Security.svc/json2/signin"
         data = json.dumps({'id_token': jsonResponse['id_token'],
                            'access_token': jsonResponse['access_token']}).encode('utf-8')
@@ -577,7 +573,7 @@ class MHManager():
         response = conn.getresponse()
         data = response.read().decode('utf-8')
         parser = CountryListHTMLParser()
-        parser.feed(parser.unescape(data))
+        parser.feed(html.unescape(data))
         return [parser.country_codes, parser.countries]
 
     def AddRemote(self, serialNumber, skinId, usbPid, usbVid):
@@ -1071,13 +1067,6 @@ class MHAccountDetails:
         password = ""
         keepMeInformed = ""
 
-class LoginResponseHTMLParser(HTMLParser):
-    def handle_starttag(self, tag, attrs):
-        if tag == 'param' and ('name', 'initparams') in attrs:
-            for key, value in attrs:
-                if key == 'value':
-                    self.initparams = value
-
 class CreateAccountResponseHTMLParser(HTMLParser):
     def __init__(self):
         HTMLParser.__init__(self)
diff --git a/congruity/operation.xsd b/congruity/operation.xsd
index cbf7ef1..53a3417 100644
--- a/congruity/operation.xsd
+++ b/congruity/operation.xsd
@@ -9,10 +9,10 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Manager.DeviceManager.Contracts.Data.SearchMatch" location="search_match.xsd"/>
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Manager.DeviceManager.Contracts.Data.Operation" location="dm_operation.xsd"/>
-  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/" location="serialization.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Manager.DeviceManager.Contracts.Data.SearchMatch" schemaLocation="search_match.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Manager.DeviceManager.Contracts.Data.Operation" schemaLocation="dm_operation.xsd"/>
+  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/" schemaLocation="serialization.xsd"/>
 
   <complexType name="AddOperationBase">
     <sequence>
diff --git a/congruity/product.xsd b/congruity/product.xsd
index baf5350..326f1ee 100644
--- a/congruity/product.xsd
+++ b/congruity/product.xsd
@@ -6,7 +6,7 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
 
   <complexType name="CompilerArchitecture">
     <sequence>
diff --git a/congruity/search_match.xsd b/congruity/search_match.xsd
index 282fd94..d7425bf 100644
--- a/congruity/search_match.xsd
+++ b/congruity/search_match.xsd
@@ -6,7 +6,7 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
 
   <complexType name="PublicDeviceSearchMatch">
     <sequence>
@@ -22,6 +22,7 @@
       <element name="GlobalLanguageVersionId" type="ns1:GlobalLanguageVersionId"/>
       <element name="Id" type="ns1:Id"/>
       <element name="IsMultiCode" type="xsd:string"/>
+      <element name="PrioritizedDeviceCapabilityList" type="ns1:DeviceCapabilitiesWithPriority"/>
     </sequence>
   </complexType>
 
diff --git a/congruity/user_button_mapping.xsd b/congruity/user_button_mapping.xsd
index 50d86d6..536949d 100644
--- a/congruity/user_button_mapping.xsd
+++ b/congruity/user_button_mapping.xsd
@@ -6,7 +6,7 @@
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
 
   <complexType name="AbstractButtonAction" abstract="true">
     <sequence>
@@ -27,6 +27,16 @@
     </complexContent>
   </complexType>
 
+  <complexType name="ButtonClientAction">
+    <complexContent>
+      <extension base="ns15:AbstractButtonAction">
+	<sequence>
+          <element name="ActionName" type="xsd:string"/>
+	</sequence>
+      </extension>
+    </complexContent>
+  </complexType>
+
   <complexType name="ButtonCommandAction">
     <complexContent>
       <extension base="ns15:AbstractButtonAction">
diff --git a/congruity/user_feature.xsd b/congruity/user_feature.xsd
index db7a69e..774583e 100644
--- a/congruity/user_feature.xsd
+++ b/congruity/user_feature.xsd
@@ -1,12 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <schema targetNamespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.DataContract.UserFeature"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+  xmlns:ns9="http://schemas.microsoft.com/2003/10/Serialization/Arrays"
   xmlns:ns1="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data"
   xmlns:ns12="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.DataContract.UserFeature"
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   attributeFormDefault="qualified">
-  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" location="data.xsd"/>
+  <import namespace="http://schemas.datacontract.org/2004/07/Logitech.Harmony.Services.Common.Contracts.Data" schemaLocation="data.xsd"/>
+  <import namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" schemaLocation="arrays.xsd"/>
 
   <complexType name="AbstractIRAction" abstract="true">
     <sequence>
@@ -54,6 +56,19 @@
     </sequence>
   </complexType>
 
+  <complexType name="PortType">
+     <sequence>
+        <element name="Attributes" type="ns9:Attributes"/>
+        <element name="Name" type="xsd:string"/>
+    </sequence>
+  </complexType>
+
+  <complexType name="PortTypes">
+     <sequence>
+        <element name="PortTypes" type="ns12:PortType"/>
+    </sequence>
+  </complexType>
+
   <complexType name="Input">
     <sequence>
       <element name="ActionId" type="xsd:string"/>
@@ -69,6 +84,7 @@
       <element name="IsActiveInput" type="xsd:string"/>
       <element name="IsAutoSwitch" type="xsd:string" nillable="true"/>
       <element name="IsOnline" type="xsd:string"/>
+      <element name="PortTypes" type="ns12:PortTypes"/>
       <element name="PressDuration" type="xsd:string"/>
       <element name="StateName" type="xsd:string" nillable="true"/>
       <element name="StateValue" type="xsd:string" nillable="true"/>
@@ -87,6 +103,8 @@
       <element name="IsActiveOutput" type="xsd:boolean"/>
       <element name="NoOfPorts" type="xsd:string"/>
       <element name="OutputName" type="xsd:string"/>
+      <element name="OutputOrder" type="xsd:string"/>
+      <element name="PortTypes" type="ns12:PortTypes"/>
     </sequence>
   </complexType>
 
diff --git a/icon-sources.txt b/icon-sources.txt
deleted file mode 100644
index 61141cb..0000000
--- a/icon-sources.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-icon-failed.png
-  /usr/share/icons/gnome/32x32/emblems/emblem-important.png
-  gnome-icon-theme-2.22.0-6.fc9.noarch
-  GPL+
-
-icon-complete.png
-  /usr/share/icons/gnome/48x48/emblems/emblem-certified.png
-  Resized and recolored
-  gnome-icon-theme-2.22.0-6.fc9.noarch
-  GPL+
-
-icon-in-progress.png
-  /usr/share/f-spot/icons/hicolor/32x32/emblems/emblem-event.png
-  f-spot-0.4.3.1-1.fc9.i386
-  GPL
-
-icon-unstarted.png
-  Part of congruity
-  GPLv3+
-
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..8bfd5a1
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,4 @@
+[egg_info]
+tag_build = 
+tag_date = 0
+