diff --git a/java/com/tigervnc/vncviewer/CConn.java b/java/com/tigervnc/vncviewer/CConn.java
index cccb7ba..7cebe0b 100644
--- a/java/com/tigervnc/vncviewer/CConn.java
+++ b/java/com/tigervnc/vncviewer/CConn.java
@@ -46,7 +46,6 @@
 import javax.swing.*;
 import javax.swing.ImageIcon;
 import java.net.InetSocketAddress;
-import java.net.URL;
 import java.net.SocketException;
 import java.util.*;
 
@@ -500,13 +499,6 @@
     viewport = new Viewport(cp.name(), this);
     viewport.setUndecorated(fullScreen);
     desktop.setViewport(viewport);
-    ClassLoader loader = this.getClass().getClassLoader();
-    URL url = loader.getResource("com/tigervnc/vncviewer/tigervnc.ico");
-    ImageIcon icon = null;
-    if (url != null) {
-      icon = new ImageIcon(url);
-      viewport.setIconImage(icon.getImage());
-    }
     reconfigureViewport();
     if ((cp.width > 0) && (cp.height > 0))
       viewport.setVisible(true);
@@ -717,11 +709,10 @@
   }
 
   void showAbout() {
-    InputStream stream = cl.getResourceAsStream("com/tigervnc/vncviewer/timestamp");
     String pkgDate = "";
     String pkgTime = "";
     try {
-      Manifest manifest = new Manifest(stream);
+      Manifest manifest = new Manifest(VncViewer.timestamp);
       Attributes attributes = manifest.getMainAttributes();
       pkgDate = attributes.getValue("Package-Date");
       pkgTime = attributes.getValue("Package-Time");
@@ -735,12 +726,9 @@
                     VncViewer.buildDate, VncViewer.buildTime);
     JOptionPane op = 
       new JOptionPane(msg, JOptionPane.INFORMATION_MESSAGE,
-                      JOptionPane.DEFAULT_OPTION, logo);
+                      JOptionPane.DEFAULT_OPTION, VncViewer.logoIcon);
     JDialog dlg = op.createDialog("About TigerVNC Viewer for Java");
-    ClassLoader cl = this.getClass().getClassLoader();
-    ImageIcon icon = 
-      new ImageIcon(cl.getResource("com/tigervnc/vncviewer/tigervnc.ico"));
-    dlg.setIconImage(icon.getImage());
+    dlg.setIconImage(VncViewer.frameIcon);
     dlg.setVisible(true);
     if (fullScreenWindow != null)
       Viewport.setFullScreenWindow(fullScreenWindow);
@@ -1339,8 +1327,6 @@
 
   // the following need no synchronization:
 
-  ClassLoader cl = this.getClass().getClassLoader();
-  ImageIcon logo = new ImageIcon(cl.getResource("com/tigervnc/vncviewer/tigervnc.png"));
   public static UserPasswdGetter upg;
   public UserMsgBox msg;
 
diff --git a/java/com/tigervnc/vncviewer/Dialog.java b/java/com/tigervnc/vncviewer/Dialog.java
index c478d4a..cd488db 100644
--- a/java/com/tigervnc/vncviewer/Dialog.java
+++ b/java/com/tigervnc/vncviewer/Dialog.java
@@ -35,6 +35,7 @@
 class Dialog extends JDialog {
 
   public Dialog(boolean modal) {
+    setIconImage(VncViewer.frameIcon);
     if (modal) {
       setModalityType(ModalityType.APPLICATION_MODAL);
     } else {
@@ -53,9 +54,6 @@
       int y = (dpySize.height - mySize.height) / 2;
       setLocation(x, y);
     }
-    ClassLoader cl = this.getClass().getClassLoader();
-    ImageIcon icon = new ImageIcon(cl.getResource("com/tigervnc/vncviewer/tigervnc.ico"));
-    setIconImage(icon.getImage());
     fullScreenWindow = Viewport.getFullScreenWindow();
     if (fullScreenWindow != null)
       Viewport.setFullScreenWindow(null);
diff --git a/java/com/tigervnc/vncviewer/ServerDialog.java b/java/com/tigervnc/vncviewer/ServerDialog.java
index a1a0560..eda82d7 100644
--- a/java/com/tigervnc/vncviewer/ServerDialog.java
+++ b/java/com/tigervnc/vncviewer/ServerDialog.java
@@ -90,7 +90,7 @@
 
     JPanel topPanel = new JPanel(new GridBagLayout());
 
-    addGBComponent(new JLabel(cc.logo),topPanel, 0, 0, 1, 1, 0, 0, 0, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.LINE_START, new Insets(5,5,5,15));
+    addGBComponent(new JLabel(VncViewer.logoIcon),topPanel, 0, 0, 1, 1, 0, 0, 0, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.LINE_START, new Insets(5,5,5,15));
     addGBComponent(serverLabel,topPanel, 1, 0, 1, 1, 0, 0, 0, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.LINE_END, new Insets(10,0,5,5));
     addGBComponent(server,topPanel, 2, 0, 1, 1, 0, 0, 1, 1, GridBagConstraints.HORIZONTAL, GridBagConstraints.CENTER, new Insets(10,0,5,40));
 
diff --git a/java/com/tigervnc/vncviewer/Viewport.java b/java/com/tigervnc/vncviewer/Viewport.java
index 31acc0e..8f1b0e0 100644
--- a/java/com/tigervnc/vncviewer/Viewport.java
+++ b/java/com/tigervnc/vncviewer/Viewport.java
@@ -40,6 +40,7 @@
     setTitle(name+" - TigerVNC");
     setFocusable(false);
     setFocusTraversalKeysEnabled(false);
+    setIconImage(VncViewer.frameIcon);
     UIManager.getDefaults().put("ScrollPane.ancestorInputMap", 
       new UIDefaults.LazyInputMap(new Object[]{}));
     sp = new JScrollPane();
diff --git a/java/com/tigervnc/vncviewer/VncViewer.java b/java/com/tigervnc/vncviewer/VncViewer.java
index ebd90b4..31043d1 100644
--- a/java/com/tigervnc/vncviewer/VncViewer.java
+++ b/java/com/tigervnc/vncviewer/VncViewer.java
@@ -60,6 +60,14 @@
   public static String build = null;
   public static String buildDate = null;
   public static String buildTime = null;
+  static ImageIcon frameIconSrc = 
+    new ImageIcon(VncViewer.class.getResource("tigervnc.ico"));
+  public static final Image frameIcon = frameIconSrc.getImage();
+  public static final ImageIcon logoIcon = 
+    new ImageIcon(VncViewer.class.getResource("tigervnc.png"));
+  public static final Image logoImage = logoIcon.getImage();
+  public static final InputStream timestamp = 
+    VncViewer.class.getResourceAsStream("timestamp");
 
   public static void setLookAndFeel() {
     try {
@@ -282,17 +290,12 @@
     vlog.debug("init called");
     setLookAndFeel();
     setBackground(Color.white);
-    ClassLoader cl = this.getClass().getClassLoader();
-    ImageIcon icon = new ImageIcon(cl.getResource("com/tigervnc/vncviewer/tigervnc.png"));
-    logo = icon.getImage();
   }
 
   private void getTimestamp() {
     if (version == null || build == null) {
-      ClassLoader cl = this.getClass().getClassLoader();
-      InputStream stream = cl.getResourceAsStream("com/tigervnc/vncviewer/timestamp");
       try {
-        Manifest manifest = new Manifest(stream);
+        Manifest manifest = new Manifest(timestamp);
         Attributes attributes = manifest.getMainAttributes();
         version = attributes.getValue("Version");
         build = attributes.getValue("Build");
@@ -333,8 +336,8 @@
   }
 
   public void paint(Graphics g) {
-    g.drawImage(logo, 0, 0, this);
-    int h = logo.getHeight(this)+20;
+    g.drawImage(logoImage, 0, 0, this);
+    int h = logoImage.getHeight(this)+20;
     g.drawString(String.format(aboutText, version, build, 
                                buildDate, buildTime), 0, h);
   }
@@ -378,10 +381,7 @@
         JOptionPane op = 
           new JOptionPane(e.getMessage(), JOptionPane.WARNING_MESSAGE);
         JDialog dlg = op.createDialog("TigerVNC Viewer");
-        ClassLoader cl = this.getClass().getClassLoader();
-        ImageIcon icon = 
-          new ImageIcon(cl.getResource("com/tigervnc/vncviewer/tigervnc.ico"));
-        dlg.setIconImage(icon.getImage());
+        dlg.setIconImage(frameIcon);
         dlg.setVisible(true);
       } else {
         if (!cc.shuttingDown)
@@ -557,7 +557,6 @@
   Thread thread;
   Socket sock;
   boolean applet;
-  Image logo;
   static int nViewers;
   static LogWriter vlog = new LogWriter("main");
 }
