Index: /applications/editors/josm/plugins/native-password-manager/netbeans-keyring-patches.diff
===================================================================
--- /applications/editors/josm/plugins/native-password-manager/netbeans-keyring-patches.diff	(revision 26360)
+++ /applications/editors/josm/plugins/native-password-manager/netbeans-keyring-patches.diff	(revision 26361)
@@ -1,6 +1,6 @@
 Index: native-password-manager/src/org/netbeans/modules/keyring/fallback/FallbackProvider.java
 ===================================================================
---- native-password-manager.orig/src/org/netbeans/modules/keyring/fallback/FallbackProvider.java	2011-07-15 21:52:52.064972526 +0200
-+++ native-password-manager/src/org/netbeans/modules/keyring/fallback/FallbackProvider.java	2011-07-15 21:17:50.000000000 +0200
+--- native-password-manager.orig/src/org/netbeans/modules/keyring/fallback/FallbackProvider.java	2011-07-18 13:04:37.141522563 +0200
++++ native-password-manager/src/org/netbeans/modules/keyring/fallback/FallbackProvider.java	2011-07-18 13:09:34.194995561 +0200
 @@ -42,49 +42,41 @@
  
@@ -40,18 +40,18 @@
      private EncryptionProvider encryption;
 - 
-+    private IPreferences pre;
-+    
++    private IPreferences prefs;
++
 +    // simple interface for a generic preferences store
 +    public interface IPreferences {
-+        String get(String key, String def);
-+        void put(String key, String val);
++        byte[] getByteArray(String key, byte[] def);
++        void putByteArray(String key, byte[] val);
 +        void remove(String key);
 +    }
 +
-+    public FallbackProvider(EncryptionProvider encryption, IPreferences pref) {
++    public FallbackProvider(EncryptionProvider encryption, IPreferences prefs) {
 +        this.encryption = encryption;
-+        this.pre = pref;
++        this.prefs = prefs;
 +    }
-+    
++
      public boolean enabled() {
 -        for (EncryptionProvider p : Lookup.getDefault().lookupAll(EncryptionProvider.class)) {
@@ -71,5 +71,5 @@
              }
          }
-@@ -92,65 +84,21 @@
+@@ -92,65 +84,20 @@
          return false;
      }
@@ -87,11 +87,5 @@
 -                return false;
 -            }
-+    private boolean testSampleKey() {
-+        encryption.freshKeyring(true);
-+        if (_save(SAMPLE_KEY, (SAMPLE_KEY + UUID.randomUUID()).toCharArray(),
-+                "Sample value ensuring that decryption is working.")) {
-+            LOG.fine("saved sample key");
-+            return true;
-         } else {
+-        } else {
 -            encryption.freshKeyring(false);
 -            while (true) {
@@ -128,5 +122,11 @@
 -                LOG.log(Level.INFO, null, x);
 -            }
--        } else {
++    private boolean testSampleKey() {
++        encryption.freshKeyring(true);
++        if (_save(SAMPLE_KEY, (SAMPLE_KEY + UUID.randomUUID()).toCharArray(),
++                "Sample value ensuring that decryption is working.")) {
++            LOG.fine("saved sample key");
++            return true;
+         } else {
 -            LOG.fine("refused to delete stored passwords");
 +            LOG.fine("could not save sample key");
@@ -142,10 +142,9 @@
      public char[] read(String key) {
 -        byte[] ciphertext = prefs().getByteArray(key, null);
-+        String ciphertext_string = pre.get(key, null);
-+        byte[] ciphertext = ciphertext_string == null ? null : Utils.chars2Bytes(ciphertext_string.toCharArray());
++        byte[] ciphertext = prefs.getByteArray(key, null);
          if (ciphertext == null) {
              return null;
          }
-@@ -166,47 +114,24 @@
+@@ -166,47 +113,18 @@
          _save(key, password, description);
      }
@@ -153,17 +152,13 @@
 -        Preferences prefs = prefs();
          try {
--            prefs.putByteArray(key, encryption.encrypt(password));
-+            byte[] encryptedPasswordByteArray = encryption.encrypt(password);
-+            String encryptedPassword = encryptedPasswordByteArray == null ? null : String.valueOf(Utils.bytes2Chars(encryptedPasswordByteArray));
-+            pre.put(key, encryptedPassword);
+             prefs.putByteArray(key, encryption.encrypt(password));
          } catch (Exception x) {
              LOG.log(Level.FINE, "failed to encrypt password for " + key, x);
              return false;
          }
-         if (description != null) {
-             // Preferences interface gives no access to *.properties comments, so:
+-        if (description != null) {
+-            // Preferences interface gives no access to *.properties comments, so:
 -            prefs.put(key + DESCRIPTION, description);
-+            pre.put(key + DESCRIPTION, description);
-         }
+-        }
          return true;
      }
@@ -171,8 +166,8 @@
      public void delete(String key) {
 -        Preferences prefs = prefs();
--        prefs.remove(key);
--        prefs.remove(key + DESCRIPTION);
--    }
--
+         prefs.remove(key);
+         prefs.remove(key + DESCRIPTION);
+     }
+ 
 -    public Void call() throws Exception { // encryption changing
 -        LOG.fine("encryption changing");
@@ -196,13 +191,11 @@
 -        LOG.fine("encryption changing finished");
 -        return null;
-+        pre.remove(key);
-+        pre.remove(key + DESCRIPTION);
-     }
- 
+-    }
+-
  }
 Index: native-password-manager/src/org/netbeans/modules/keyring/gnome/GnomeProvider.java
 ===================================================================
---- native-password-manager.orig/src/org/netbeans/modules/keyring/gnome/GnomeProvider.java	2011-07-15 21:53:22.269122311 +0200
-+++ native-password-manager/src/org/netbeans/modules/keyring/gnome/GnomeProvider.java	2011-07-15 21:17:50.000000000 +0200
+--- native-password-manager.orig/src/org/netbeans/modules/keyring/gnome/GnomeProvider.java	2011-07-18 13:04:37.141522563 +0200
++++ native-password-manager/src/org/netbeans/modules/keyring/gnome/GnomeProvider.java	2011-07-18 13:05:00.841640080 +0200
 @@ -43,16 +43,11 @@
  package org.netbeans.modules.keyring.gnome;
@@ -240,6 +233,6 @@
 Index: native-password-manager/src/org/netbeans/modules/keyring/kde/KWalletProvider.java
 ===================================================================
---- native-password-manager.orig/src/org/netbeans/modules/keyring/kde/KWalletProvider.java	2011-07-15 21:53:37.837199499 +0200
-+++ native-password-manager/src/org/netbeans/modules/keyring/kde/KWalletProvider.java	2011-07-15 21:17:50.000000000 +0200
+--- native-password-manager.orig/src/org/netbeans/modules/keyring/kde/KWalletProvider.java	2011-07-18 13:04:37.149522597 +0200
++++ native-password-manager/src/org/netbeans/modules/keyring/kde/KWalletProvider.java	2011-07-18 13:05:00.849640122 +0200
 @@ -45,20 +45,15 @@
  import java.io.BufferedReader;
@@ -280,6 +273,6 @@
 Index: native-password-manager/src/org/netbeans/modules/keyring/mac/MacProvider.java
 ===================================================================
---- native-password-manager.orig/src/org/netbeans/modules/keyring/mac/MacProvider.java	2011-07-15 21:53:47.897249389 +0200
-+++ native-password-manager/src/org/netbeans/modules/keyring/mac/MacProvider.java	2011-07-15 21:17:50.000000000 +0200
+--- native-password-manager.orig/src/org/netbeans/modules/keyring/mac/MacProvider.java	2011-07-18 13:04:37.157522639 +0200
++++ native-password-manager/src/org/netbeans/modules/keyring/mac/MacProvider.java	2011-07-18 13:05:00.849640122 +0200
 @@ -47,26 +47,19 @@
  import java.util.logging.Level;
@@ -331,6 +324,6 @@
 Index: native-password-manager/src/org/netbeans/modules/keyring/win32/Win32Protect.java
 ===================================================================
---- native-password-manager.orig/src/org/netbeans/modules/keyring/win32/Win32Protect.java	2011-07-15 21:53:58.733303122 +0200
-+++ native-password-manager/src/org/netbeans/modules/keyring/win32/Win32Protect.java	2011-07-15 21:17:50.000000000 +0200
+--- native-password-manager.orig/src/org/netbeans/modules/keyring/win32/Win32Protect.java	2011-07-18 13:04:37.165522672 +0200
++++ native-password-manager/src/org/netbeans/modules/keyring/win32/Win32Protect.java	2011-07-18 13:05:00.849640122 +0200
 @@ -54,28 +54,18 @@
  import java.util.logging.Logger;
Index: /applications/editors/josm/plugins/native-password-manager/src/org/netbeans/modules/keyring/fallback/FallbackProvider.java
===================================================================
--- /applications/editors/josm/plugins/native-password-manager/src/org/netbeans/modules/keyring/fallback/FallbackProvider.java	(revision 26360)
+++ /applications/editors/josm/plugins/native-password-manager/src/org/netbeans/modules/keyring/fallback/FallbackProvider.java	(revision 26361)
@@ -60,18 +60,18 @@
 
     private EncryptionProvider encryption;
-    private IPreferences pre;
-    
+    private IPreferences prefs;
+
     // simple interface for a generic preferences store
     public interface IPreferences {
-        String get(String key, String def);
-        void put(String key, String val);
+        byte[] getByteArray(String key, byte[] def);
+        void putByteArray(String key, byte[] val);
         void remove(String key);
     }
 
-    public FallbackProvider(EncryptionProvider encryption, IPreferences pref) {
+    public FallbackProvider(EncryptionProvider encryption, IPreferences prefs) {
         this.encryption = encryption;
-        this.pre = pref;
+        this.prefs = prefs;
     }
-    
+
     public boolean enabled() {
         if (encryption.enabled()) {
@@ -98,6 +98,5 @@
 
     public char[] read(String key) {
-        String ciphertext_string = pre.get(key, null);
-        byte[] ciphertext = ciphertext_string == null ? null : Utils.chars2Bytes(ciphertext_string.toCharArray());
+        byte[] ciphertext = prefs.getByteArray(key, null);
         if (ciphertext == null) {
             return null;
@@ -116,14 +115,8 @@
     private boolean _save(String key, char[] password, String description) {
         try {
-            byte[] encryptedPasswordByteArray = encryption.encrypt(password);
-            String encryptedPassword = encryptedPasswordByteArray == null ? null : String.valueOf(Utils.bytes2Chars(encryptedPasswordByteArray));
-            pre.put(key, encryptedPassword);
+            prefs.putByteArray(key, encryption.encrypt(password));
         } catch (Exception x) {
             LOG.log(Level.FINE, "failed to encrypt password for " + key, x);
             return false;
-        }
-        if (description != null) {
-            // Preferences interface gives no access to *.properties comments, so:
-            pre.put(key + DESCRIPTION, description);
         }
         return true;
@@ -131,6 +124,6 @@
 
     public void delete(String key) {
-        pre.remove(key);
-        pre.remove(key + DESCRIPTION);
+        prefs.remove(key);
+        prefs.remove(key + DESCRIPTION);
     }
 
Index: /applications/editors/josm/plugins/native-password-manager/src/org/openstreetmap/josm/plugins/npm/InitializationWizard.java
===================================================================
--- /applications/editors/josm/plugins/native-password-manager/src/org/openstreetmap/josm/plugins/npm/InitializationWizard.java	(revision 26360)
+++ /applications/editors/josm/plugins/native-password-manager/src/org/openstreetmap/josm/plugins/npm/InitializationWizard.java	(revision 26361)
@@ -399,10 +399,10 @@
         NPMType[] potentialManagers;
         
-        if (Main.platform instanceof PlatformHookUnixoid) {
-            potentialManagers = new NPMType[] { NPMType.GNOME_KEYRING, NPMType.KWALLET };
+        if (Main.platform instanceof PlatformHookWindows) {
+            potentialManagers = new NPMType[] { NPMType.CRYPT32 };
         } else if (Main.platform instanceof PlatformHookOsx) {
             potentialManagers = new NPMType[] { NPMType.KEYCHAIN };
-        } else if (Main.platform instanceof PlatformHookWindows) {
-            potentialManagers = new NPMType[] { NPMType.CRYPT32 };
+        } else if (Main.platform instanceof PlatformHookUnixoid) {
+            potentialManagers = new NPMType[] { NPMType.GNOME_KEYRING, NPMType.KWALLET };
         } else
             throw new AssertionError();
Index: /applications/editors/josm/plugins/native-password-manager/src/org/openstreetmap/josm/plugins/npm/Win32Provider.java
===================================================================
--- /applications/editors/josm/plugins/native-password-manager/src/org/openstreetmap/josm/plugins/npm/Win32Provider.java	(revision 26360)
+++ /applications/editors/josm/plugins/native-password-manager/src/org/openstreetmap/josm/plugins/npm/Win32Provider.java	(revision 26361)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.npm;
+
+import org.apache.commons.codec.binary.Base64;
 
 import org.netbeans.modules.keyring.fallback.FallbackProvider;
@@ -9,10 +11,12 @@
     
     private static class JOSMPreferences implements IPreferences {
-        @Override public String get(String key, String def) {
-            return Main.pref.get(key, def);
+    
+        @Override public byte[] getByteArray(String key, byte[] def) {
+            String p = Main.pref.get(key, null);
+            return p == null ? def : Base64.decodeBase64(p);
         }
 
-        @Override public void put(String key, String val) {
-            Main.pref.put(key, val);
+        @Override public void putByteArray(String key, byte[] val) {
+            Main.pref.put(key, val == null ? null : Base64.encodeBase64String(val));
         }
 
