diff --git a/doc/contributions.txt b/doc/contributions.txt
index 00f70d7ca42a7f29e2df5e4eaee267ace79013b0..3d8da14029f3427ac1cdebd87996bc1fa0697a2c 100755
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -331,6 +331,7 @@ Cinder Roxley
     STORM-2037
     STORM-2053
     STORM-2113
+    STORM-2127
 Clara Young
 Coaldust Numbers
     VWR-1095
diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index ca502e06597ffa5f08e7f7994fe91033531a8ef8..22f3339cf19b0fdee5a5fcb68a68a6e52c9402b1 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -25,13 +25,69 @@
  */
 
 #import "llopenglview-objc.h"
-#include "llwindowmacosx-objc.h"
+#import "llwindowmacosx-objc.h"
 #import "llappdelegate-objc.h"
 
+#pragma mark local functions
 
+NativeKeyEventData extractKeyDataFromKeyEvent(NSEvent* theEvent)
+{
+    NativeKeyEventData eventData;
+    eventData.mKeyEvent = NativeKeyEventData::KEYUNKNOWN;
+    eventData.mEventType = [theEvent type];
+    eventData.mEventModifiers = [theEvent modifierFlags];
+    eventData.mEventKeyCode = [theEvent keyCode];
+    NSString *strEventChars = [theEvent characters];
+    eventData.mEventChars = (strEventChars.length) ? [strEventChars characterAtIndex:0] : 0;
+    NSString *strEventUChars = [theEvent charactersIgnoringModifiers];
+    eventData.mEventUnmodChars = (strEventUChars.length) ? [strEventUChars characterAtIndex:0] : 0;
+    eventData.mEventRepeat = [theEvent isARepeat];
+    return eventData;
+}
+
+NativeKeyEventData extractKeyDataFromModifierEvent(NSEvent* theEvent)
+{
+    NativeKeyEventData eventData;
+    eventData.mKeyEvent = NativeKeyEventData::KEYUNKNOWN;
+    eventData.mEventType = [theEvent type];
+    eventData.mEventModifiers = [theEvent modifierFlags];
+    eventData.mEventKeyCode = [theEvent keyCode];
+    return eventData;
+}
 
+attributedStringInfo getSegments(NSAttributedString *str)
+{
+    attributedStringInfo segments;
+    segment_lengths seg_lengths;
+    segment_standouts seg_standouts;
+    NSRange effectiveRange;
+    NSRange limitRange = NSMakeRange(0, [str length]);
+    
+    while (limitRange.length > 0) {
+        NSNumber *attr = [str attribute:NSUnderlineStyleAttributeName atIndex:limitRange.location longestEffectiveRange:&effectiveRange inRange:limitRange];
+        limitRange = NSMakeRange(NSMaxRange(effectiveRange), NSMaxRange(limitRange) - NSMaxRange(effectiveRange));
+        
+        if (effectiveRange.length <= 0)
+        {
+            effectiveRange.length = 1;
+        }
+        
+        if ([attr integerValue] == 2)
+        {
+            seg_lengths.push_back(effectiveRange.length);
+            seg_standouts.push_back(true);
+        } else
+        {
+            seg_lengths.push_back(effectiveRange.length);
+            seg_standouts.push_back(false);
+        }
+    }
+    segments.seg_lengths = seg_lengths;
+    segments.seg_standouts = seg_standouts;
+    return segments;
+}
 
-//---------------------------
+#pragma mark class implementations
 
 @implementation NSScreen (PointConversion)
 
@@ -63,53 +119,6 @@
 
 @end
 
-void extractKeyDataFromEvent (NSEvent *theEvent, NativeKeyEventData * eventData)
-{
-    eventData->mKeyEvent = NativeKeyEventData::KEYUNKNOWN;
-    eventData->mEventType = [theEvent type];
-    eventData->mEventModifiers = [theEvent modifierFlags];
-    eventData->mEventKeyCode = [theEvent keyCode];
-    NSString *strEventChars = [theEvent characters];
-    eventData->mEventChars = (strEventChars.length) ? [strEventChars characterAtIndex:0] : 0;
-    NSString *strEventUChars = [theEvent charactersIgnoringModifiers];
-    eventData->mEventUnmodChars = (strEventUChars.length) ? [strEventUChars characterAtIndex:0] : 0;
-    eventData->mEventRepeat = [theEvent isARepeat];
-
-}
-
-
-attributedStringInfo getSegments(NSAttributedString *str)
-{
-	attributedStringInfo segments;
-	segment_lengths seg_lengths;
-	segment_standouts seg_standouts;
-	NSRange effectiveRange;
-	NSRange limitRange = NSMakeRange(0, [str length]);
-    
-	while (limitRange.length > 0) {
-		NSNumber *attr = [str attribute:NSUnderlineStyleAttributeName atIndex:limitRange.location longestEffectiveRange:&effectiveRange inRange:limitRange];
-		limitRange = NSMakeRange(NSMaxRange(effectiveRange), NSMaxRange(limitRange) - NSMaxRange(effectiveRange));
-		
-		if (effectiveRange.length <= 0)
-		{
-			effectiveRange.length = 1;
-		}
-		
-		if ([attr integerValue] == 2)
-		{
-			seg_lengths.push_back(effectiveRange.length);
-			seg_standouts.push_back(true);
-		} else
-		{
-			seg_lengths.push_back(effectiveRange.length);
-			seg_standouts.push_back(false);
-		}
-	}
-	segments.seg_lengths = seg_lengths;
-	segments.seg_standouts = seg_standouts;
-	return segments;
-}
-
 @implementation LLOpenGLView
 
 // Force a high quality update after live resizing
@@ -426,18 +435,14 @@ attributedStringInfo getSegments(NSAttributedString *str)
 
 - (void) keyUp:(NSEvent *)theEvent
 {
-    NativeKeyEventData eventData;
- 
-    extractKeyDataFromEvent( theEvent, &eventData );
+    NativeKeyEventData eventData = extractKeyDataFromKeyEvent(theEvent);
     eventData.mKeyEvent = NativeKeyEventData::KEYUP;
 	callKeyUp(&eventData, [theEvent keyCode], [theEvent modifierFlags]);
 }
 
 - (void) keyDown:(NSEvent *)theEvent
 {
-    NativeKeyEventData eventData;
-    
-    extractKeyDataFromEvent( theEvent, &eventData );
+    NativeKeyEventData eventData = extractKeyDataFromKeyEvent(theEvent);
     eventData.mKeyEvent = NativeKeyEventData::KEYDOWN;
    
     uint keycode = [theEvent keyCode];
@@ -475,9 +480,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
 
 - (void)flagsChanged:(NSEvent *)theEvent
 {
-    NativeKeyEventData eventData;
-    
-    extractKeyDataFromEvent( theEvent, &eventData );
+    NativeKeyEventData eventData = extractKeyDataFromModifierEvent(theEvent);
  
 	mModifiers = [theEvent modifierFlags];
 	callModifier([theEvent modifierFlags]);
diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h
index 507d1239bee27f426704a0ec8f188040b26117cd..c22f3382fb3fca5dc08a3c55f527ecc4752adf31 100755
--- a/indra/llwindow/llwindowmacosx-objc.h
+++ b/indra/llwindow/llwindowmacosx-objc.h
@@ -55,13 +55,13 @@ struct NativeKeyEventData {
         KEYCHAR
     };
     
-    EventType   mKeyEvent;
-    uint32_t    mEventType;
-    uint32_t    mEventModifiers;
-    uint32_t    mEventKeyCode;
-    uint32_t    mEventChars;
-    uint32_t    mEventUnmodChars;
-    bool        mEventRepeat;
+    EventType   mKeyEvent = KEYUNKNOWN;
+    uint32_t    mEventType = 0;
+    uint32_t    mEventModifiers = 0;
+    uint32_t    mEventKeyCode = 0;
+    uint32_t    mEventChars = 0;
+    uint32_t    mEventUnmodChars = 0;
+    bool        mEventRepeat = false;
 };
 
 typedef const NativeKeyEventData * NSKeyEventRef;