Index: /applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintDialog.java
===================================================================
--- /applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintDialog.java	(revision 27315)
+++ /applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintDialog.java	(revision 27316)
@@ -172,5 +172,8 @@
         final GBC std = GBC.std().insets(0,5,5,0);
         std.fill = GBC.HORIZONTAL;
-        final GBC twocolumns  = GBC.std().insets(0,5,5,0).span(2).fill(GBC.HORIZONTAL);
+        final GBC twoColumns   = GBC.std().insets(0,5,5,0).span(2);
+        twoColumns.fill = GBC.HORIZONTAL;
+        final GBC threeColumns = GBC.std().insets(0,5,5,0).span(3);
+        threeColumns.fill = GBC.HORIZONTAL;
         
         JLabel caption;
@@ -178,22 +181,22 @@
         int row = 0;
         caption = new JLabel(tr("Printer")+":");
-        add(caption, std.grid(2, row));
+        add(caption, twoColumns.grid(2, row));
         printerField = new JTextField();
         printerField.setEditable(false);
-        add(printerField, std.grid(3, row));
+        add(printerField, std.grid(GBC.RELATIVE, row));
 
         row++;
         caption = new JLabel(tr("Media")+":");
-        add(caption, std.grid(2, row));
+        add(caption, twoColumns.grid(2, row));
         paperField = new JTextField();
         paperField.setEditable(false);
-        add(paperField, std.grid(3, row));
+        add(paperField, std.grid(GBC.RELATIVE, row));
 
         row++;
         caption = new JLabel(tr("Orientation")+":");
-        add(caption, std.grid(2, row));
+        add(caption, twoColumns.grid(2, row));
         orientationField = new JTextField();
         orientationField.setEditable(false);
-        add(orientationField, std.grid(3, row));
+        add(orientationField, std.grid(GBC.RELATIVE, row));
 
         row++;
@@ -201,5 +204,5 @@
         printerButton.setActionCommand("printer-dialog");
         printerButton.addActionListener(this);
-        add(printerButton, twocolumns.grid(2, row));
+        add(printerButton, threeColumns.grid(2, row));
 
         row++;
@@ -207,6 +210,8 @@
         
         row++;
-        caption = new JLabel(tr("Scale")+":   1 : ");
+        caption = new JLabel(tr("Scale")+":");
         add(caption, std.grid(2, row));
+        caption = new JLabel(" 1 :");
+        add(caption, std.grid(GBC.RELATIVE, row));
         int mapScale = (int)Main.pref.getInteger("print.map-scale", PrintPlugin.DEF_MAP_SCALE);
         mapView.setFixedMapScale(mapScale);
@@ -230,9 +235,11 @@
             }
         });
-        add(scaleField, std.grid(3, row));
-
-        row++;
-        caption = new JLabel(tr("Resolution")+":   (dpi)");
+        add(scaleField, std.grid(GBC.RELATIVE, row));
+
+        row++;
+        caption = new JLabel(tr("Resolution")+":");
         add(caption, std.grid(2, row));
+        caption = new JLabel("ppi");
+        add(caption, std.grid(GBC.RELATIVE, row));
         resolutionModel = new SpinnerNumberModel(
           (int)Main.pref.getInteger("print.resolution.dpi", PrintPlugin.DEF_RESOLUTION_DPI),
@@ -255,18 +262,20 @@
             }
         });
-        add(resolutionField, std.grid(3, row));
-        
-        row++;
-        caption = new JLabel(tr("Attribution")+":");
-        add(caption, std.grid(2, row));
-
-        row++;
-        final JTextField attributionField = new JTextField();
-        attributionField.setText(Main.pref.get("print.attribution", PrintPlugin.DEF_ATTRIBUTION));
-        attributionField.getDocument().addDocumentListener(new DocumentListener() {
+        add(resolutionField, std.grid(GBC.RELATIVE, row));
+        
+        row++;
+        caption = new JLabel(tr("Map information")+":");
+        add(caption, threeColumns.grid(2, row));
+
+        row++;
+        final javax.swing.JTextArea attributionText = new javax.swing.JTextArea(Main.pref.get("print.attribution", PrintPlugin.DEF_ATTRIBUTION));
+        attributionText.setRows(10);
+        attributionText.setLineWrap(true);
+        attributionText.setWrapStyleWord(true);
+        attributionText.getDocument().addDocumentListener(new DocumentListener() {
             public void insertUpdate(DocumentEvent evt) {
                 SwingUtilities.invokeLater(new Runnable() {
                     public void run() {
-                        Main.pref.put("print.attribution", attributionField.getText());
+                        Main.pref.put("print.attribution", attributionText.getText());
                         printPreview.repaint();
                     }
@@ -280,5 +289,6 @@
             }
         });
-        add(attributionField, twocolumns.grid(2, row));
+        JScrollPane attributionPane = new JScrollPane(attributionText);
+        add(attributionPane, GBC.std().insets(0,5,5,0).span(3).fill(GBC.BOTH).weight(0.0,1.0).grid(2, row));
 
         row++;
@@ -290,5 +300,5 @@
         previewCheckBox.setActionCommand("toggle-preview");
         previewCheckBox.addActionListener(this);
-        add(previewCheckBox, twocolumns.grid(2, row));
+        add(previewCheckBox, threeColumns.grid(2, row));
 
         row++;
@@ -296,5 +306,5 @@
         zoomInButton.setActionCommand("zoom-in");
         zoomInButton.addActionListener(this);
-        add(zoomInButton, twocolumns.grid(2, row));
+        add(zoomInButton, threeColumns.grid(2, row));
 
         row++;
@@ -302,5 +312,5 @@
         zoomOutButton.setActionCommand("zoom-out");
         zoomOutButton.addActionListener(this);
-        add(zoomOutButton, twocolumns.grid(2, row));
+        add(zoomOutButton, threeColumns.grid(2, row));
         
         row++;
@@ -308,5 +318,5 @@
         zoomToPageButton.setActionCommand("zoom-to-page");
         zoomToPageButton.addActionListener(this);
-        add(zoomToPageButton, twocolumns.grid(2, row));
+        add(zoomToPageButton, threeColumns.grid(2, row));
         
         row++;
@@ -314,5 +324,5 @@
         zoomToActualSize.setActionCommand("zoom-to-actual-size");
         zoomToActualSize.addActionListener(this);
-        add(zoomToActualSize, twocolumns.grid(2, row));
+        add(zoomToActualSize, threeColumns.grid(2, row));
         
         printPreview = new PrintPreview();
Index: /applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintableMapView.java
===================================================================
--- /applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintableMapView.java	(revision 27315)
+++ /applications/editors/josm/plugins/print/src/org/openstreetmap/josm/plugins/print/PrintableMapView.java	(revision 27316)
@@ -340,13 +340,27 @@
     public void paintMapAttribution(Graphics2D g2d, PageFormat pageFormat) {
         String text = Main.pref.get("print.attribution", PrintPlugin.DEF_ATTRIBUTION);
-        if (text != null && text.length() > 0) {
-            text += " ";
-
-            Font attributionFont = new Font("Arial", Font.PLAIN, FONT_SIZE * 8 / 10);
-            g2d.setFont(attributionFont);
-            Rectangle2D bound = g2d.getFontMetrics().getStringBounds(text, g2d);
-            int x = (int)((pageFormat.getImageableWidth() - bound.getWidth()));
-            int y = FONT_SIZE * 3 / 2;
-            paintText(g2d, text, x, y);
+        
+        if (text == null) {
+            return;
+        }
+            
+        Font attributionFont = new Font("Arial", Font.PLAIN, FONT_SIZE * 8 / 10);
+        g2d.setFont(attributionFont);
+
+        text += "\n";
+        int y = FONT_SIZE * 3 / 2;
+        int from = 0;
+        int to = text.indexOf("\n", from);
+        while (to >= from) {
+            String line = text.substring(from, to);
+
+            Rectangle2D bound = g2d.getFontMetrics().getStringBounds(line, g2d);
+            int x = (int)((pageFormat.getImageableWidth() - bound.getWidth()) - FONT_SIZE/2);
+            
+            paintText(g2d, line, x, y);
+
+            y   += FONT_SIZE * 5 / 4;
+            from = to + 1;
+            to   = text.indexOf("\n", from);
         }
     }
