*** empty log message ***
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/TextLayout.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/TextLayout.java
index b4cd066..f0a9d6b 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/TextLayout.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/TextLayout.java
@@ -963,7 +963,7 @@
 		OS.ATSUNextCursorPosition(layout, offset, type, newOffset);
 		offset = newOffset[0];
 		newOffset[0] = untranslateOffset(newOffset[0]);
-		if (movement == SWT.MOVEMENT_WORD) {
+		if (movement == SWT.MOVEMENT_WORD || movement == SWT.MOVEMENT_WORD_END) {
 			while (newOffset[0] < length && 
 					(!(!Compatibility.isLetterOrDigit(text.charAt(newOffset[0])) &&
 					Compatibility.isLetterOrDigit(text.charAt(newOffset[0] - 1))))) {
@@ -972,11 +972,20 @@
 				newOffset[0] = untranslateOffset(newOffset[0]);
 			}
 		}
+		if (movement == SWT.MOVEMENT_WORD_START) {
+			while (newOffset[0] < length && 
+					(!(Compatibility.isLetterOrDigit(text.charAt(newOffset[0])) &&
+					!Compatibility.isLetterOrDigit(text.charAt(newOffset[0] - 1))))) {
+				OS.ATSUNextCursorPosition(layout, offset, type, newOffset);
+				offset = newOffset[0];
+				newOffset[0] = untranslateOffset(newOffset[0]);
+			}
+		}
 	} else {
 		OS.ATSUPreviousCursorPosition(layout, offset, type, newOffset);
 		offset = newOffset[0];
 		newOffset[0] = untranslateOffset(newOffset[0]);
-		if (movement == SWT.MOVEMENT_WORD) {
+		if (movement == SWT.MOVEMENT_WORD || movement == SWT.MOVEMENT_WORD_START) {
 			while (newOffset[0] > 0 && 
 					(!(Compatibility.isLetterOrDigit(text.charAt(newOffset[0])) && 
 					!Compatibility.isLetterOrDigit(text.charAt(newOffset[0] - 1))))) {
@@ -985,6 +994,15 @@
 				newOffset[0] = untranslateOffset(newOffset[0]);
 			}
 		}
+		if (movement == SWT.MOVEMENT_WORD_END) {
+			while (newOffset[0] > 0 && 
+					(!(!Compatibility.isLetterOrDigit(text.charAt(newOffset[0])) && 
+					Compatibility.isLetterOrDigit(text.charAt(newOffset[0] - 1))))) {
+				OS.ATSUPreviousCursorPosition(layout, offset, type, newOffset);
+				offset = newOffset[0];
+				newOffset[0] = untranslateOffset(newOffset[0]);
+			}
+		}
 	}
 	return newOffset[0];
 }