diff --git a/cint/src/v6_decl.cxx b/cint/src/v6_decl.cxx
index e7c19335af835fc128802f9728b19a45535aa5fd..c8319e7ea14b8d35f1a7f3024d9d0e6d6abd1eaf 100644
--- a/cint/src/v6_decl.cxx
+++ b/cint/src/v6_decl.cxx
@@ -242,9 +242,11 @@ static int G__get_newname(char* new_name)
       if (isspace(cin)) {
          if (strcmp(new_name, "*const") == 0 || strcmp(new_name, "const") == 0) {
             if (new_name[0]=='*') {
-               cin = G__fgetvarname(new_name + 1, ",;=():");
                G__constvar |= G__PCONSTVAR;
+               cin = G__fgetvarname(new_name + 1, ",;=():");
             } else {
+               if (isupper(G__var_type)) G__constvar |= G__PCONSTVAR;
+               else                     G__constvar |= G__CONSTVAR;
                cin = G__fgetvarname(new_name, ",;=():");
             }
             if (strcmp(new_name, "&*") == 0 || strcmp(new_name, "*&") == 0) {
@@ -263,8 +265,6 @@ static int G__get_newname(char* new_name)
                   cin = G__fgetvarname(new_name + 1, ",;=():");
                }
             }
-            if (isupper(G__var_type)) G__constvar |= G__PCONSTVAR;
-            else                     G__constvar |= G__CONSTVAR;
          }
          else if (strcmp(new_name, "const&") == 0) {
             cin = G__fgetvarname(new_name, ",;=():");
diff --git a/cint/src/v6_parse.cxx b/cint/src/v6_parse.cxx
index 91a630f2a1a9a93adda512801986224c643b84af..6df400426cd067975ea0879a3c06454d86e8b7f0 100644
--- a/cint/src/v6_parse.cxx
+++ b/cint/src/v6_parse.cxx
@@ -6774,39 +6774,6 @@ G__value G__exec_statement(int* mparen)
                         spaceflag = 0;
                      }
                      break;
-                  case 3:
-                     if (!strcmp(statement, "if(")) {
-                        result = G__exec_if();
-                        if ((G__return > G__RETURN_NON) || !*mparen) {
-                           return result;
-                        }
-                        // Check for break, continue, or goto executed during statement.
-                        if (result.type == G__block_break.type) {
-                           // -- Statement block was exited by break, continue, or goto.
-                           if (result.ref == G__block_goto.ref) {
-                              // -- Exited by goto.
-                              int found = G__search_gotolabel(0, &start_pos, start_line, mparen);
-                              // If found, continue parsing, the input file is now
-                              // positioned immediately after the colon of the label.
-                              // Otherwise, return and let our caller try to find it.
-                              if (!found) {
-                                 // -- Not found, maybe our caller can find it.
-                                 return G__block_goto;
-                              }
-                           }
-                           else {
-                              // -- Exited by break or continue.
-                              //fprintf(stderr, "G__exec_statement: break or continue executed from an if.\n");
-                              //fprintf(stderr, "End   G__exec_statement (from end of if, break or continue seen).\n");
-                              return result;
-                           }
-                        }
-                        // Reset the statement buffer.
-                        iout = 0;
-                        // Flag that any following whitespace does not trigger any semantic action.
-                        spaceflag = 0;
-                     }
-                     break;
                   case 6:
                      if (!strcmp(statement, "while(")) {
                         result = G__exec_while();
@@ -6844,6 +6811,51 @@ G__value G__exec_statement(int* mparen)
                         spaceflag = 0;
                      }
                      break;
+                  case 5:
+                     if ((*mparen == 1) && !strcmp(statement, "case(")) {
+                        // -- Handle keyword "case", even if skipping code.
+                        //fprintf(stderr, "G__exec_statement: Saw a case.\n");
+                        // Scan the case label in.
+                        char casepara[G__ONELINE];
+                        casepara[0] = '(';
+                        {
+                           int lencasepara = 1;
+                           c = G__fgetstream(casepara+lencasepara, ":");
+                           if (c==')') {
+                              lencasepara = strlen(casepara);
+                              casepara[lencasepara] = ')';
+                              ++lencasepara;
+                              G__fgetstream(casepara+lencasepara, ":");
+                           }
+                           c = G__fgetc();
+                           while (c == ':') {
+                              strcat(casepara, "::");
+                              lencasepara = strlen(casepara);
+                              G__fgetstream(casepara + lencasepara, ":");
+                              c = G__fgetc();
+                           }
+                        }
+                        // Backup one character.
+                        fseek(G__ifile.fp, -1, SEEK_CUR);
+                        // Flag that we have already displayed it, do not show it again.
+                        G__disp_mask = 1;
+                        //
+                        //  If we are not in a switch statement,
+                        //  then we are done.
+                        if (G__switch) {
+                           // -- We are in a switch statement, evaluate the case expression.
+                           G__value result = G__exec_switch_case(casepara);
+                           if (G__switch_searching) {
+                              // -- We are searching for a matching case, return value of case expression.
+                              return result;
+                           }
+                        }
+                        // Reset the statement buffer.
+                        iout = 0;
+                        // Flag that any following whitespace does not trigger any semantic action.
+                        spaceflag = 0;
+                     }
+                     break;
                   case 4:
                      if (!strcmp(statement, "for(")) {
                         result = G__exec_for();
@@ -6866,6 +6878,39 @@ G__value G__exec_statement(int* mparen)
                         // Flag that any following whitespace does not trigger any semantic action.
                         spaceflag = 0;
                      }
+                     break;                     
+                  case 3:
+                     if (!strcmp(statement, "if(")) {
+                        result = G__exec_if();
+                        if ((G__return > G__RETURN_NON) || !*mparen) {
+                           return result;
+                        }
+                        // Check for break, continue, or goto executed during statement.
+                        if (result.type == G__block_break.type) {
+                           // -- Statement block was exited by break, continue, or goto.
+                           if (result.ref == G__block_goto.ref) {
+                              // -- Exited by goto.
+                              int found = G__search_gotolabel(0, &start_pos, start_line, mparen);
+                              // If found, continue parsing, the input file is now
+                              // positioned immediately after the colon of the label.
+                              // Otherwise, return and let our caller try to find it.
+                              if (!found) {
+                                 // -- Not found, maybe our caller can find it.
+                                 return G__block_goto;
+                              }
+                           }
+                           else {
+                              // -- Exited by break or continue.
+                              //fprintf(stderr, "G__exec_statement: break or continue executed from an if.\n");
+                              //fprintf(stderr, "End   G__exec_statement (from end of if, break or continue seen).\n");
+                              return result;
+                           }
+                        }
+                        // Reset the statement buffer.
+                        iout = 0;
+                        // Flag that any following whitespace does not trigger any semantic action.
+                        spaceflag = 0;
+                     }
                      break;
                }
                //
@@ -6954,6 +6999,48 @@ G__value G__exec_statement(int* mparen)
                iout = 0;
                // Flag that any following whitespace does not trigger any semantic action.
                spaceflag = 0;
+            } else if ((*mparen == 1) && !strcmp(statement, "case(")) {
+               // -- Handle keyword "case", even if skipping code.
+               //fprintf(stderr, "G__exec_statement: Saw a case.\n");
+               // Scan the case label in.
+               char casepara[G__ONELINE];
+               casepara[0] = '(';
+               {
+                  int lencasepara = 1;
+                  c = G__fgetstream(casepara+lencasepara, ":");
+                  if (c==')') {
+                     lencasepara = strlen(casepara);
+                     casepara[lencasepara] = ')';
+                     ++lencasepara;
+                     G__fgetstream(casepara+lencasepara, ":");
+                  }
+                  c = G__fgetc();
+                  while (c == ':') {
+                     strcat(casepara, "::");
+                     lencasepara = strlen(casepara);
+                     G__fgetstream(casepara + lencasepara, ":");
+                     c = G__fgetc();
+                  }
+               }
+               // Backup one character.
+               fseek(G__ifile.fp, -1, SEEK_CUR);
+               // Flag that we have already displayed it, do not show it again.
+               G__disp_mask = 1;
+               //
+               //  If we are not in a switch statement,
+               //  then we are done.
+               if (G__switch) {
+                  // -- We are in a switch statement, evaluate the case expression.
+                  G__value result = G__exec_switch_case(casepara);
+                  if (G__switch_searching) {
+                     // -- We are searching for a matching case, return value of case expression.
+                     return result;
+                  }
+               }
+               // Reset the statement buffer.
+               iout = 0;
+               // Flag that any following whitespace does not trigger any semantic action.
+               spaceflag = 0;
             }
             else {
                // -- We are skipping code.
diff --git a/cint/src/v6_pcode.cxx b/cint/src/v6_pcode.cxx
index c8e1a5d8948ab6b5c31c4f19f272071b83297fc6..ce3b2a9b90946b58781590cebcd0a5bedba57b5a 100644
--- a/cint/src/v6_pcode.cxx
+++ b/cint/src/v6_pcode.cxx
@@ -2229,6 +2229,7 @@ void G__OP2_divassign(G__value *bufm1,G__value *bufm2)
 void G__OP1_postfixinc_i(G__value* pbuf)
 {
   *(int*)pbuf->ref = (int) pbuf->obj.i + 1;
+  pbuf->ref= (long) &(pbuf->obj.i);
 }
 
 /****************************************************************
@@ -2237,6 +2238,7 @@ void G__OP1_postfixinc_i(G__value* pbuf)
 void G__OP1_postfixdec_i(G__value* pbuf)
 {
   *(int*)pbuf->ref = (int) pbuf->obj.i - 1;
+  pbuf->ref= (long) &(pbuf->obj.i);
 }
 
 /****************************************************************
@@ -2261,6 +2263,7 @@ void G__OP1_prefixdec_i(G__value *pbuf)
 void G__OP1_postfixinc_d(G__value *pbuf)
 {
   *(double*)pbuf->ref = (double)pbuf->obj.d + 1.0;
+  pbuf->ref= (long) &(pbuf->obj.d);
 }
 
 /****************************************************************
@@ -2269,6 +2272,7 @@ void G__OP1_postfixinc_d(G__value *pbuf)
 void G__OP1_postfixdec_d(G__value *pbuf)
 {
   *(double*)pbuf->ref = (double)pbuf->obj.d-1.0;
+  pbuf->ref= (long) &(pbuf->obj.d);
 }
 /****************************************************************
 * G__OP1_prefixinc_d()