Index: applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerAbstract.java
===================================================================
--- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerAbstract.java	(revision 26489)
+++ applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerAbstract.java	(revision 26493)
@@ -29,6 +29,8 @@
 import java.awt.Toolkit;
 import java.awt.event.ActionEvent;
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileReader;
 import java.io.IOException;
 import java.util.List;
@@ -135,4 +137,6 @@
         // Load image completely
         (new ImageIcon(m_image)).getImage();
+        
+        lookForCalibration();
     }
 
@@ -145,4 +149,5 @@
     protected abstract Image createImage() throws IOException;
 
+    protected abstract void lookForCalibration() throws IOException;
     /**
      * To be overridden by subclasses. Returns the user readable name of the layer.
@@ -435,4 +440,29 @@
             Main.map.mapView.repaint();
     }
+    
+    public void loadWorldfile(File file) throws IOException {
+        FileReader reader = new FileReader(file);
+        BufferedReader br = new BufferedReader(reader);
+        double e[] = new double[6];
+        for (int i=0; i<6; ++i) {
+            String line = br.readLine();
+            e[i] = Double.parseDouble(line);
+        }
+        double sx=e[0], ry=e[1], rx=e[2], sy=e[3], dx=e[4], dy=e[5];
+        int w = m_image.getWidth(null);
+        int h = m_image.getHeight(null);
+        m_position.setLocation(
+                dx + w/2*sx + h/2*rx, 
+                dy + w/2*ry + h/2*sy
+        );
+        m_initial_position.setLocation(m_position);
+        m_angle = 0;
+        m_scalex = 100*sx*getMetersPerEasting(m_position);
+        m_scaley = -100*sy*getMetersPerNorthing(m_position);
+        m_shearx = rx / sx;
+        m_sheary = ry / sy;
+        m_initial_scale = 1;
+        Main.map.mapView.repaint();
+    }
 
     private class ResetSubmenuAction extends AbstractAction implements LayerAction {
Index: applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerFromClipboard.java
===================================================================
--- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerFromClipboard.java	(revision 26489)
+++ applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerFromClipboard.java	(revision 26493)
@@ -66,3 +66,7 @@
     }
 
+    @Override
+    protected void lookForCalibration() throws IOException {
+    }
+
 }
Index: applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerFromFile.java
===================================================================
--- applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerFromFile.java	(revision 26489)
+++ applications/editors/josm/plugins/piclayer/src/org/openstreetmap/josm/plugins/piclayer/PicLayerFromFile.java	(revision 26493)
@@ -28,6 +28,6 @@
 import java.io.File;
 import java.io.IOException;
+import java.util.Arrays;
 import javax.imageio.ImageIO;
-import javax.swing.JDialog;
 import javax.swing.JOptionPane;
 /**
@@ -66,5 +66,9 @@
         Image image = null;
         image = ImageIO.read( m_file );
-        
+        return image;
+    }
+    
+    @Override
+    protected void lookForCalibration() throws IOException {
         // Manage a potential existing calibration file
         File calFile = getDefaultCalPath();
@@ -104,7 +108,36 @@
             if ( loadcal )
                 loadCalibration(calFile);
+        } else {
+            
+            // try to find and load world file
+            int dotIdx = m_file.getName().lastIndexOf(".");
+            if (dotIdx == -1) return;
+            String extension = m_file.getName().substring(dotIdx);
+            String namepart = m_file.getName().substring(0, dotIdx);
+            String[][] imgExtensions = new String[][] {
+                { ".jpg", ".jpeg" },
+                { ".png" },
+                { ".tif", ".tiff" },
+                { ".bmp" },
+            };
+            String[][] wldExtensions = new String[][] {
+                { ".wld", ".jgw", ".jpgw" },
+                { ".wld", ".pgw", ".pngw" },
+                { ".wld", ".tfw", ".tifw" },
+                { ".wld", ".bmpw", ".bpw"},
+            };
+            for (int i=0; i<imgExtensions.length; ++i) {
+                if (Arrays.asList(imgExtensions[i]).contains(extension.toLowerCase())) {
+                    for (String wldExtension : wldExtensions[i]) {
+                        File wldFile = new File(m_file.getParentFile(), namepart+wldExtension);
+                        if (wldFile.exists()) {
+                            System.out.println("Loading world file: "+wldFile);
+                            loadWorldfile(wldFile);
+                            return;
+                        }
+                    }
+                }
+            }
         }
-                
-        return image;
     }
 
