Index: applications/editors/josm/plugins/geochat/build.xml
===================================================================
--- applications/editors/josm/plugins/geochat/build.xml	(revision 29587)
+++ applications/editors/josm/plugins/geochat/build.xml	(revision 29588)
@@ -15,5 +15,5 @@
 
     <!-- enter the SVN commit message -->
-    <property name="commit.message" value="GeoChat"/>
+    <property name="commit.message" value="[josm_geochat] copypaste from keyboard, font size advanced parameters"/>
     <!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
     <property name="plugin.main.version" value="4666"/>
Index: applications/editors/josm/plugins/geochat/src/geochat/ChatPaneManager.java
===================================================================
--- applications/editors/josm/plugins/geochat/src/geochat/ChatPaneManager.java	(revision 29587)
+++ applications/editors/josm/plugins/geochat/src/geochat/ChatPaneManager.java	(revision 29588)
@@ -10,4 +10,5 @@
 import javax.swing.event.ChangeListener;
 import javax.swing.text.*;
+import org.openstreetmap.josm.Main;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -134,8 +135,9 @@
         chatPane.setEditable(false);
         Font font = chatPane.getFont();
-        float size = -1.0f; // Main.pref.getInteger("geochat.fontsize", -1); <- we don't need this
-        if( size < 8 )
-            size += font.getSize2D();
-        chatPane.setFont(font.deriveFont(size));
+        float sizeParameter = Main.pref.getInteger("geochat.panel.fontsize", -1); 
+        float size = sizeParameter;
+        if ( sizeParameter <= 0 ) size += font.getSize2D();
+        chatPane.setFont(font.deriveFont( size ));
+
 //        DefaultCaret caret = (DefaultCaret)chatPane.getCaret(); // does not work
 //        caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
Index: applications/editors/josm/plugins/geochat/src/geochat/GeoChatPanel.java
===================================================================
--- applications/editors/josm/plugins/geochat/src/geochat/GeoChatPanel.java	(revision 29587)
+++ applications/editors/josm/plugins/geochat/src/geochat/GeoChatPanel.java	(revision 29588)
@@ -56,5 +56,11 @@
             }
         };
-
+        
+        Font font = input.getFont();
+        float sizeParameter = Main.pref.getInteger("geochat.input.fontsize", 0); 
+        float size = sizeParameter;
+        if ( sizeParameter <= 0 ) size += font.getSize2D();
+        input.setFont(font.deriveFont( size ));
+        
         String defaultUserName = constructUserName();
         loginPanel = createLoginPanel(defaultUserName);
Index: applications/editors/josm/plugins/geochat/src/geochat/JPanelTextField.java
===================================================================
--- applications/editors/josm/plugins/geochat/src/geochat/JPanelTextField.java	(revision 29587)
+++ applications/editors/josm/plugins/geochat/src/geochat/JPanelTextField.java	(revision 29588)
@@ -3,6 +3,7 @@
 
 import java.awt.KeyboardFocusManager;
+import java.awt.event.InputEvent;
 import java.awt.event.KeyEvent;
-import java.util.*;
+import java.util.HashSet;
 import javax.swing.*;
 import javax.swing.text.DefaultEditorKit;
@@ -18,9 +19,10 @@
  */
 public class JPanelTextField extends JTextField {
-
+    
     public JPanelTextField() {
         setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, new HashSet<KeyStroke>());
         PopupMenuLauncher launcher = new PopupMenuLauncher(createEditMenu());
         addMouseListener(launcher);
+        standardKeys = getInputMap(JComponent.WHEN_FOCUSED).allKeys();
     }
 
@@ -39,4 +41,8 @@
         return item;
     }
+
+    // list of "standard" OS keys for JTextFiels = cursor moving, selection, copy/paste
+    private final KeyStroke[] standardKeys;
+    private static final int MODIFIERS_MASK = InputEvent.META_DOWN_MASK | InputEvent.CTRL_DOWN_MASK | InputEvent.ALT_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK;
 
     @Override
@@ -74,8 +80,18 @@
                 if( Main.map != null && Main.map.mapView != null )
                     Main.map.mapView.requestFocus();
+            } 
+
+            boolean keyIsStandard = false;
+            for (KeyStroke ks: standardKeys) {
+                if (code == ks.getKeyCode() && 
+                       (e.getModifiersEx() & MODIFIERS_MASK) == (ks.getModifiers() & MODIFIERS_MASK)) {
+                    keyIsStandard = true;
+                    break;
+                }
             }
             // Do not pass other events to JOSM
-            if( code != KeyEvent.VK_LEFT && code != KeyEvent.VK_HOME && code != KeyEvent.VK_RIGHT && code != KeyEvent.VK_END && code != KeyEvent.VK_BACK_SPACE && code != KeyEvent.VK_DELETE )
+            if( !keyIsStandard ) {
                 e.consume();
+            }
         }
         super.processKeyEvent(e);
