diff --git a/engines/sci/engine/kmisc.cpp b/engines/sci/engine/kmisc.cpp
index 90ddf4d..763ffe5 100644
--- a/engines/sci/engine/kmisc.cpp
+++ b/engines/sci/engine/kmisc.cpp
@@ -290,7 +290,7 @@ reg_t kMemory(EngineState *s, int argc, reg_t *argv) {
 			return s->r_acc;
 		}
 		if (ref.isRaw)
-			return make_reg(0, (int16)READ_LE_UINT16(ref.raw));
+			return make_reg(0, (int16)READ_BE_UINT16(ref.raw));
 		else {
 			if (ref.skipByte)
 				error("Attempt to peek memory at odd offset %04X:%04X", PRINT_REG(argv[1]));
@@ -311,7 +311,7 @@ reg_t kMemory(EngineState *s, int argc, reg_t *argv) {
 				error("Attempt to poke memory reference %04x:%04x to %04x:%04x", PRINT_REG(argv[2]), PRINT_REG(argv[1]));
 				return s->r_acc;
 			}
-			WRITE_LE_UINT16(ref.raw, argv[2].offset);
+			WRITE_BE_UINT16(ref.raw, argv[2].offset);
 		} else {
 			if (ref.skipByte)
 				error("Attempt to poke memory at odd offset %04X:%04X", PRINT_REG(argv[1]));
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index a66dc8d..7e2906b 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -111,7 +111,7 @@ reg_t kStrAt(EngineState *s, int argc, reg_t *argv) {
 			offset++;
 
 		reg_t &tmp = dest_r.reg[offset / 2];
-		if (!(offset & 1)) {
+		if ((offset & 1)) {
 			value = tmp.offset & 0x00ff;
 			if (argc > 2) { /* Request to modify this char */
 				tmp.offset &= 0xff00;
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index d509046..c0cea11 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -600,7 +600,7 @@ static inline char getChar(const SegmentRef &ref, uint offset) {
 		if (!((val.segment == 0xFFFF) && (offset > 1)))
 			warning("Attempt to read character from non-raw data");
 
-	return (offset & 1 ? val.offset >> 8 : val.offset & 0xff);
+	return (!(offset & 1) ? val.offset >> 8 : val.offset & 0xff);
 }
 
 static inline void setChar(const SegmentRef &ref, uint offset, char value) {
@@ -611,7 +611,7 @@ static inline void setChar(const SegmentRef &ref, uint offset, char value) {
 
 	val->segment = 0;
 
-	if (offset & 1)
+	if (!(offset & 1))
 		val->offset = (val->offset & 0x00ff) | (value << 8);
 	else
 		val->offset = (val->offset & 0xff00) | value;
