In one of my macros, I wanted to set some width to either two-column or single column width.
In other macros I do use key `width`, so I wanted to store the requested width in that key. So my first attempt was 

```
    \setkeys{MEMacros}{wide=false,#1}% 
    \par 1: wide=\ME@wide\par % Test point 1
\expandafter\ifstrequal\expandafter{\ME@wide}{true}
    {\setkeys{MEMacros}{width=\textwidth}}%
    {\setkeys{MEMacros}{width=\columnwidth}}%
    \par 2: wide=\ME@wide\par % Test point 2

```

However, in the second test point `\ME@wide` has a value different from that in the first test point. I guessed that the issue is caused by `\setkeys` after the first test point. And really, if I replace them with

```
\expandafter\ifstrequal\expandafter{\ME@wide}{true}
    {\def\mywidth{\textwidth}}
    {\def\mywidth{\columnwidth}}

```

then everything works fine. So, it looks like using `\setkeys...{width...}` changes the value of the `wide` key.

What do I wrong, or why using `\setkeys` in such a situation has the side-effect of changing the value of another key? Or, setting key not from the 1st argument is illegal? Below is a complete MWE.

```
\documentclass{book}
\usepackage{xkeyval}
\usepackage{etoolbox}
\usepackage{ifthen}

    \makeatletter
    \define@key{MEMacros}{wide}[true]{\def\ME@wide{#1}}
    \define@key{MEMacros}{width}[3cm]{\def\ME@width{#1}}
    \presetkeys{MEMacros}{wide=false}{}%
    \presetkeys{MEMacros}{width=3cm}{}%

\newcommand\Table[2][]{%
    \setkeys{MEMacros}{wide=false,#1}% 
    \par 1: wide=\ME@wide, \par
    \expandafter\ifstrequal\expandafter{\ME@wide}{true}
        {\setkeys{MEMacros}{width=\textwidth}}%
        {\setkeys{MEMacros}{width=\columnwidth}}%
    \par 2: wide=\ME@wide, 
    }
\makeatother

\begin{document}
This is my table, wide:

\Table[wide]{A wide table}

\end{document}

```

And the result is

```
This is my table, wide:
1: wide=true,
2: wide=false,

```