--- squashfs-tools/mksquashfs.c
+++ squashfs-tools/mksquashfs.c
@@ -74,6 +74,20 @@
 #include "read_fs.h"
 #include "process_fragments.h"
 
+#if TARGET_FORMAT == AVM_BE
+
+#if   __BYTE_ORDER == __LITTLE_ENDIAN
+#define _SQUASHFS_SWAP_SHORTS(s, d, n) memcpy(d, s, n * sizeof(short))
+#elif __BYTE_ORDER == __BIG_ENDIAN
+#define _SQUASHFS_SWAP_SHORTS(s, d, n) swap_le16_num(s, d, n)
+#else
+#error "Unexpected/unsupported byte order"
+#endif
+
+#else
+#define _SQUASHFS_SWAP_SHORTS(s, d, n) SQUASHFS_SWAP_SHORTS(s, d, n)
+#endif
+
 int fd;
 struct squashfs_super_block sBlk;
 
@@ -374,7 +388,7 @@
 			data_cache, SQUASHFS_METADATA_SIZE,
 			SQUASHFS_METADATA_SIZE, noI, 0);
 		TRACE("Inode block @ 0x%x, size %d\n", inode_bytes, c_byte);
-		SQUASHFS_SWAP_SHORTS(&c_byte, inode_table + inode_bytes, 1);
+		_SQUASHFS_SWAP_SHORTS(&c_byte, inode_table + inode_bytes, 1);
 		inode_bytes += SQUASHFS_COMPRESSED_SIZE(c_byte) + BLOCK_OFFSET;
 		total_inode_bytes += SQUASHFS_METADATA_SIZE + BLOCK_OFFSET;
 		memmove(data_cache, data_cache + SQUASHFS_METADATA_SIZE,
@@ -515,7 +529,7 @@
 		c_byte = mangle(inode_table + inode_bytes + BLOCK_OFFSET, datap,
 			avail_bytes, SQUASHFS_METADATA_SIZE, noI, 0);
 		TRACE("Inode block @ 0x%x, size %d\n", inode_bytes, c_byte);
-		SQUASHFS_SWAP_SHORTS(&c_byte, inode_table + inode_bytes, 1); 
+		_SQUASHFS_SWAP_SHORTS(&c_byte, inode_table + inode_bytes, 1);
 		inode_bytes += SQUASHFS_COMPRESSED_SIZE(c_byte) + BLOCK_OFFSET;
 		total_inode_bytes += avail_bytes + BLOCK_OFFSET;
 		datap += avail_bytes;
@@ -554,7 +568,7 @@
 			SQUASHFS_METADATA_SIZE, noI, 0);
 		TRACE("Directory block @ 0x%x, size %d\n", directory_bytes,
 			c_byte);
-		SQUASHFS_SWAP_SHORTS(&c_byte,
+		_SQUASHFS_SWAP_SHORTS(&c_byte,
 			directory_table + directory_bytes, 1);
 		directory_bytes += SQUASHFS_COMPRESSED_SIZE(c_byte) +
 			BLOCK_OFFSET;
@@ -581,7 +595,11 @@
 		SQUASHFS_SWAP_INTS(&id_table[i]->id, p + i, 1);
 	}
 
+#if TARGET_FORMAT == AVM_BE
+	return generic_write_table(id_bytes, p, 0, NULL, TRUE); /* AVM-BE always uncompressed */
+#else
 	return generic_write_table(id_bytes, p, 0, NULL, noI);
+#endif
 }
 
 
@@ -1195,7 +1213,7 @@
 				noI, 0);
 		TRACE("Directory block @ 0x%x, size %d\n", directory_bytes,
 			c_byte);
-		SQUASHFS_SWAP_SHORTS(&c_byte,
+		_SQUASHFS_SWAP_SHORTS(&c_byte,
 			directory_table + directory_bytes, 1);
 		directory_bytes += SQUASHFS_COMPRESSED_SIZE(c_byte) +
 			BLOCK_OFFSET;
@@ -1569,7 +1587,7 @@
 		c_byte = mangle(cbuffer + BLOCK_OFFSET, buffer + i *
 			SQUASHFS_METADATA_SIZE , avail_bytes,
 			SQUASHFS_METADATA_SIZE, uncompressed, 0);
-		SQUASHFS_SWAP_SHORTS(&c_byte, cbuffer, 1);
+		_SQUASHFS_SWAP_SHORTS(&c_byte, cbuffer, 1);
 		list[i] = bytes;
 		compressed_size = SQUASHFS_COMPRESSED_SIZE(c_byte) +
 			BLOCK_OFFSET;
