-       } else if(xsre->target == sel.xtarget && sel.clip != NULL) {
-               XChangeProperty(xsre->display, xsre->requestor, xsre->property,
-                               xsre->target, 8, PropModeReplace,
-                               (uchar *) sel.clip, strlen(sel.clip));
-               xev.property = xsre->property;
+       } else if(xsre->target == sel.xtarget || xsre->target == XA_STRING) {
+               /*
+                * xith XA_STRING non ascii characters may be incorrect in the
+                * requestor. It is not our problem, use utf8.
+                */
+               clipboard = XInternAtom(xw.dpy, "CLIPBOARD", 0);
+               if(xsre->selection == XA_PRIMARY) {
+                       seltext = sel.primary;
+               } else if(xsre->selection == clipboard) {
+                       seltext = sel.clipboard;
+               } else {
+                       fprintf(stderr,
+                               "Unhandled clipboard selection 0x%lx\n",
+                               xsre->selection);
+                       return;
+               }
+               if(seltext != NULL) {
+                       XChangeProperty(xsre->display, xsre->requestor,
+                                       xsre->property, xsre->target,
+                                       8, PropModeReplace,
+                                       (uchar *)seltext, strlen(seltext));
+                       xev.property = xsre->property;
+               }