diff --git a/src/odoors/ODGetIn.c b/src/odoors/ODGetIn.c
index 70db99fd71b21ca5e389e655555d1dde9d3cee76..10be7f40f083e9b90a352b7957cf0d8d69b61d0c 100644
--- a/src/odoors/ODGetIn.c
+++ b/src/odoors/ODGetIn.c
@@ -443,26 +443,30 @@ static int ODHaveStartOfSequence(WORD wFlags)
 static int ODGetCodeIfLongest(WORD wFlags)
 {
    int CurrLen=0;
-   int seqlen;
+   int seqlen1;
+   int seqlen2;
    int i;
    int retval=NO_MATCH;;
 
    if(wFlags & GETIN_RAW)
       return(NO_MATCH);
+   seqlen1=strlen(szCurrentSequence);
    for(i = 0; i < DIM(aKeySequences); ++i) {
       if((wFlags & GETIN_RAWCTRL) && aKeySequences[i].bIsControlKey) {
          continue;
       }
-      seqlen=strlen(aKeySequences[i].pszSequence);
-      if(seqlen>CurrLen) {
-         if(CurrLen==0) {
-            if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen)==0) {
+      seqlen2=strlen(aKeySequences[i].pszSequence);
+      if(seqlen2>CurrLen) {
+         if(seqlen2<=seqlen1) {	/* The sequence would be completed in buffer */
+            if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen2)==0) {
                retval=i;
                CurrLen=seqlen;
             }
          }
-         else {
-            return(NO_MATCH);
+         else {		/* Possible partial sequence */
+            if(strncmp(aKeySequences[i].pszSequence, szCurrentSequence, seqlen1)==0) {
+               return(NO_MATCH);
+            }
          }
       }
    }