public boolean reloadFromFile() {
		if (_fileName == null) {
			return false;
		}
		boolean success = true;
		int tilesWide = 0;
		int tilesHigh = 0;
		
		byte mask[][] = null;
		try {
			File f = new File(_fileName);
			FileInputStream fis = new FileInputStream(f);
			DataInputStream dis = new DataInputStream(fis);

			int oam[] = null;
			int objectTypes[] = null;
			try {
				tilesWide = (int) (dis.readByte() & 0xFF);
				tilesHigh = (int) (dis.readByte() & 0xFF);
				System.out.println("Stamp: " + _fileName + " => " + tilesWide + " x " + tilesHigh);
				oam = new int[tilesWide * tilesHigh];
				objectTypes = new int[tilesWide * tilesHigh];
				mask = new byte[tilesWide * tilesHigh][16];
				for (int i = 0; i < tilesWide * tilesHigh; i++) {
					int rd = dis.read(mask[i], 0, 16);
					if (rd != 16) {
						System.err.println("Missing some mask values");
						success = false;
						break;
					}
					oam[i] = (int) (dis.readByte() & 0xFF);
					objectTypes[i] = (int) (dis.readByte() & 0xFF);
				}
			} catch (Exception e) {
				e.printStackTrace();
				success = false;
			}
			dis.close();
			fis.close();
			if (success) {
				recreateModelData(tilesWide, tilesHigh, oam, objectTypes, mask);
				notifyDisplayInterfaceUpdated();
			}
		} catch (Exception e) {
			e.printStackTrace();
			success = false;
		}
		return success;
	}