diff --git a/clim/input-protocol.lisp b/clim/input-protocol.lisp
index 859b067cc45b9c34dc358cb9e3fa47b645c356a5..ea09091cf866920c0fddd44059bcfbdaa71d8229 100644
--- a/clim/input-protocol.lisp
+++ b/clim/input-protocol.lisp
@@ -142,6 +142,7 @@
   (let ((char (keyboard-event-character event))
         (keysym (keyboard-event-key-name event))
         #+(or aclpc acl86win32) (modstate (slot-value event 'silica::modifier-state))
+        #-(or aclpc acl86win32) (modstate (event-modifier-state event))
         temp)
     (cond ((and (member event *asynchronous-abort-gestures*
                         :test #'keyboard-event-matches-gesture-name-p)
@@ -149,7 +150,7 @@
                 (setq temp (frame-top-level-process temp)))
            (process-interrupt temp #'(lambda () (process-abort-gesture stream event))))
           ((and (characterp char)
-                #+(or aclpc acl86win32) (not (> modstate +shift-key+))
+                (not (> modstate +shift-key+)) ; we have a modifier key other than SHIFT active - need to put full event into the queue (in another branch)
                 (or (ordinary-char-p char)
                     (diacritic-char-p char)))
            (queue-put (stream-input-buffer stream) char))
@@ -387,18 +388,15 @@
   (process-event-locally stream gesture)
   nil)
 
-(defmethod receive-gesture
-           ((stream input-protocol-mixin) gesture)
+(defmethod receive-gesture ((stream input-protocol-mixin) gesture)
   ;; don't translate it
   gesture)
 
-(defmethod receive-gesture
-           ((stream input-protocol-mixin) (gesture character))
+(defmethod receive-gesture ((stream input-protocol-mixin) (gesture character))
   (process-abort-or-accelerator-gesture stream gesture)
   gesture)
 
-(defmethod receive-gesture
-           ((stream input-protocol-mixin) (gesture key-press-event))
+(defmethod receive-gesture ((stream input-protocol-mixin) (gesture key-press-event))
   (process-abort-or-accelerator-gesture stream gesture)
   gesture)