Index: D:/work/eclipse-workspace/twisted/twisted/words/test/test_irc.py
===================================================================
--- D:/work/eclipse-workspace/twisted/twisted/words/test/test_irc.py	(revision 22805)
+++ D:/work/eclipse-workspace/twisted/twisted/words/test/test_irc.py	(working copy)
@@ -297,6 +297,24 @@
                              user="sender!ident@host",
                              channel="recipient",
                              message=msg)
+        
+    def test_ACTION(self):
+        """Testing CTCP ACTION.
+        
+        This imitates behavior of wide-spread IRC clients for ACTION CTCP
+        query.
+        """
+        
+        actionQuery = (r":nick!guy@over.there PRIVMSG #theChan :"
+                       "%(X)cACTION \o/%(X)c%(EOL)s"
+                       % {'X': irc.X_DELIM,
+                       'EOL': irc.CR + irc.LF})
+        
+        self.client.dataReceived(actionQuery)
+        self.assertEquals(self.client.calls,
+                          [("action", dict(user="nick!guy@over.there",
+                                           channel="#theChan",
+                                           data=r"\o/"))])
 
 class BasicServerFunctionalityTestCase(unittest.TestCase):
     def setUp(self):
Index: D:/work/eclipse-workspace/twisted/twisted/words/protocols/irc.py
===================================================================
--- D:/work/eclipse-workspace/twisted/twisted/words/protocols/irc.py	(revision 22805)
+++ D:/work/eclipse-workspace/twisted/twisted/words/protocols/irc.py	(working copy)
@@ -1936,7 +1936,9 @@
     extended_messages[:] = filter(None, extended_messages)
     normal_messages[:] = filter(None, normal_messages)
 
-    extended_messages[:] = map(ctcpDequote, extended_messages)
+    # TODO: quoting must be only done for certain arguments of certain
+    # data tags.
+    # extended_messages[:] = map(ctcpDequote, extended_messages)
     for i in xrange(len(extended_messages)):
         m = string.split(extended_messages[i], SPC, 1)
         tag = m[0]
@@ -2034,7 +2036,9 @@
             m = "%s %s" % (tag, data)
         else:
             m = str(tag)
-        m = ctcpQuote(m)
+        # TODO: CTCP quoting must be done only for certain arguments of
+        # certain data.
+        # m = ctcpQuote(m)
         m = "%s%s%s" % (X_DELIM, m, X_DELIM)
         coded_messages.append(m)
 
