Index: /applications/editors/josm/plugins/piclayer/nbproject/project.xml
===================================================================
--- /applications/editors/josm/plugins/piclayer/nbproject/project.xml	(revision 33143)
+++ /applications/editors/josm/plugins/piclayer/nbproject/project.xml	(revision 33144)
@@ -56,5 +56,5 @@
             </view>
         </general-data>
-        <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/3">
+        <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/4">
             <compilation-unit>
                 <package-root>src</package-root>
Index: /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/LoadPictureCalibrationFromWorldAction.java
===================================================================
--- /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/LoadPictureCalibrationFromWorldAction.java	(revision 33143)
+++ /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/LoadPictureCalibrationFromWorldAction.java	(revision 33144)
@@ -19,5 +19,5 @@
 
     public LoadPictureCalibrationFromWorldAction(PicLayerAbstract layer) {
-        super(tr("Load World File Calibration..."), null, tr("Loads calibration data from a world file"), null, false);
+        super(tr("Import World File Calibration..."), null, tr("Loads calibration data from a world file"), null, false);
 
         this.layer = layer;
Index: /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/SavePictureCalibrationToWorldAction.java
===================================================================
--- /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/SavePictureCalibrationToWorldAction.java	(revision 33144)
+++ /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/actions/SavePictureCalibrationToWorldAction.java	(revision 33144)
@@ -0,0 +1,87 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.piclayer.actions;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import javax.swing.JFileChooser;
+import javax.swing.JOptionPane;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.plugins.piclayer.layer.PicLayerAbstract;
+
+public class SavePictureCalibrationToWorldAction extends JosmAction {
+
+    // Owner layer of the action
+    PicLayerAbstract m_owner = null;
+
+    public SavePictureCalibrationToWorldAction(PicLayerAbstract owner) {
+        super(tr("Export World file Calibration..."), null, tr("Saves calibration data to a world file"), null, false);
+        // Remember the owner...
+        m_owner = owner;
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent arg0) {
+        double[] values = new double[6];
+        m_owner.saveWorldFile(values);
+
+        String picFilename = m_owner.getPicLayerName();
+        String picFilenameNoext = picFilename;
+        String ext = null;
+        int dotPos = picFilename.lastIndexOf(".");
+        if (dotPos > 0) {
+            ext = picFilename.substring(dotPos+1);
+            picFilenameNoext = picFilename.substring(0, dotPos);
+        }
+        String wext;
+        if (ext == null) {
+            wext = picFilenameNoext + ".wld";
+        } else {
+            switch (ext) {
+                case "jpg": wext = "jgw"; break;
+                case "jpeg": wext = "jpgw"; break;
+                case "png": wext = "pgw"; break;
+                case "bmp": wext = "bpw"; break;
+                case "tif": wext = "tfw"; break;
+                case "tiff": wext = "tifw"; break;
+                default: wext = "wld";
+            }
+        }
+        
+        // Save dialog
+        final JFileChooser fc = new JFileChooser();
+        fc.setAcceptAllFileFilterUsed(true);
+        fc.setSelectedFile(new File(picFilenameNoext + "." + wext));
+        int result = fc.showSaveDialog(Main.parent);
+
+        if (result == JFileChooser.APPROVE_OPTION) {
+            // Check file extension and force it to be valid
+            File file = fc.getSelectedFile();
+            String path = file.getAbsolutePath();
+            if (!path.contains(".")) {
+                // no extension given, add a reasonable one
+                file = new File(path + "." + wext);
+            }
+            try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
+                for (int i = 0; i < 6; i++) {
+                    bw.write(Double.toString(values[i]));
+                    if (i<5) {
+                        bw.newLine();
+                    }
+                }
+            } catch (IOException e) {
+                // Error
+                e.printStackTrace();
+                JOptionPane.showMessageDialog(Main.parent,
+                        tr("Saving file failed: {0}", e.getMessage()), tr("Problem occurred"), JOptionPane.WARNING_MESSAGE);
+            }
+        }
+    }
+}
Index: /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/layer/PicLayerAbstract.java
===================================================================
--- /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/layer/PicLayerAbstract.java	(revision 33143)
+++ /applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/layer/PicLayerAbstract.java	(revision 33144)
@@ -56,4 +56,5 @@
 import org.openstreetmap.josm.plugins.piclayer.actions.ResetCalibrationAction;
 import org.openstreetmap.josm.plugins.piclayer.actions.SavePictureCalibrationAction;
+import org.openstreetmap.josm.plugins.piclayer.actions.SavePictureCalibrationToWorldAction;
 import org.openstreetmap.josm.plugins.piclayer.transform.PictureTransform;
 
@@ -212,4 +213,6 @@
                 new SavePictureCalibrationAction(this),
                 new LoadPictureCalibrationAction(this),
+                SeparatorLayerAction.INSTANCE,
+                new SavePictureCalibrationToWorldAction(this),
                 new LoadPictureCalibrationFromWorldAction(this),
                 SeparatorLayerAction.INSTANCE,
@@ -498,4 +501,32 @@
     }
 
+    public void saveWorldFile(double[] values) {
+        double[] matrix = new double[6];
+        transformer.getTransform().getMatrix(matrix);
+        double a00 = matrix[0], a01 = matrix[2], a02 = matrix[4];
+        double a10 = matrix[1], a11 = matrix[3], a12 = matrix[5];
+        int w = image.getWidth(null);
+        int h = image.getHeight(null);
+        EastNorth imagePosition = transformer.getImagePosition();
+        // piclayer calibration stores 9 parameters
+        // worldfile has 6 parameters
+        // only 6 parameters needed, so write it in a way that
+        // eliminates the 3 redundant parameters
+        double qx = initialImageScale / 100 / getMetersPerEasting(imagePosition);
+        double qy = -initialImageScale / 100 / getMetersPerNorthing(imagePosition);
+        double sx = qx * a00;
+        double sy = qy * a11;
+        double rx = qx * a01;
+        double ry = qy * a10;
+        double dx = imagePosition.getX() + qx * a02 - sx * w / 2 - rx * h / 2;
+        double dy = imagePosition.getY() + qy * a12 - ry * w / 2 - sy * h / 2;
+        values[0] = sx;
+        values[1] = ry;
+        values[2] = rx;
+        values[3] = sy;
+        values[4] = dx;
+        values[5] = dy;
+    }
+
     public Point2D transformPoint(Point p) throws NoninvertibleTransformException {
         // Position image at the right graphical place
