textNode1.after(wrapperElement);
         textNode1.detach();
         
-        wrapperElement.before({text:prefixOutside});
+        if(prefixOutside.length > 0)
+            wrapperElement.before({text:prefixOutside});
         if(sameNode) {
             var core = textNode1.getText().substr(params.offsetStart, params.offsetEnd - params.offsetStart);
             wrapperElement.append({text: core});
         } else {
             textNode2.detach();
-            wrapperElement.append({text: prefixInside});
+            if(prefixInside.length > 0)
+                wrapperElement.append({text: prefixInside});
             for(var i = idx1 + 1; i < idx2; i++) {
                 wrapperElement.append(childrenInside[i]);
             }
-            
-            wrapperElement.append({text: suffixInside});
+            if(suffixInside.length > 0)
+                wrapperElement.append({text: suffixInside});
         }
-        wrapperElement.after({text: suffixOutside});
+        if(suffixOutside.length > 0)
+            wrapperElement.after({text: suffixOutside});
         return wrapperElement;
     }
 
 
                     expect(children[2]).to.be.instanceOf(documentElement.DocumentTextElement);
                     expect(children[2].getText()).to.equal('cat');
                 });
+
+                it('wraps text spanning multiple sibling DocumentTextNodes', function() {
+                    var c = canvas.fromXML('<section>Alice has a <span>small</span> cat</section>'),
+                        section = c.doc(),
+                        wrapper = c.wrapText({
+                            inside: section, 
+                            _with: {tag: 'span', klass: 'some.class'},
+                            offsetStart: 6,
+                            offsetEnd: 4,
+                            textNodeIdx: [0,2]
+                        });
+
+                    expect(section.children().length).to.equal(2);
+                    expect(section.children()[0]).to.be.instanceOf(documentElement.DocumentTextElement);
+                    expect(section.children()[0].getText()).to.equal('Alice ');
+
+                    var wrapper2 = section.children()[1];
+                    expect(wrapper2.sameNode(wrapper)).to.be.true;
+
+                    var wrapperChildren = wrapper.children();
+                    expect(wrapperChildren.length).to.equal(3);
+                    expect(wrapperChildren[0].getText()).to.equal('has a ');
+
+                    expect(wrapperChildren[1]).to.be.instanceOf(documentElement.DocumentNodeElement);
+                    expect(wrapperChildren[1].children().length).to.equal(1);
+                    expect(wrapperChildren[1].children()[0].getText()).to.equal('small');
+
+                    expect(wrapperChildren[2].getText()).to.equal(' cat');
+                });
             });
         });