 						
 						/* transcription of the source... */
 						
-						for (var nInptIdx = nStartIdx, nOutptIdx = 0; nOutptIdx < nOutptLen; nInptIdx += fGetInptChrSize(nChrCode), nOutptIdx++) {
+						for (nInptIdx = nStartIdx, nOutptIdx = 0; nOutptIdx < nOutptLen; nInptIdx += fGetInptChrSize(nChrCode), nOutptIdx++) {
 							nChrCode = fGetInptChrCode(vSource, nInptIdx);
 							aWhole[nOutptIdx] = nChrCode;
 						}

				nRawIdx = isFinite(nChrOffset) ? this.makeIndex(nChrOffset) : 0;
				nRawEnd = isFinite(nChrLen) ? this.makeIndex(nChrLen, nRawIdx) : aSource.length;
				
				for (var nChrCode, nChrIdx = 0; nRawIdx < nRawEnd; nChrIdx++) {
					nChrCode = fGetInptChrCode(aSource, nRawIdx);
					fCallback.call(oThat || null, nChrCode, nChrIdx, nRawIdx, aSource);
					nRawIdx += fGetInptChrSize(nChrCode);

			
		};
		
		public function subview(nCharOffset /* optional */, nCharLength /* optional */):StringView {
			
			var
			
			nChrLen:int, nCharStart:int, nStrLen:int, bVariableLen:Boolean = this.encoding === "UTF-8" || this.encoding === "UTF-16",
				nStartOffset:int = nCharOffset, nStringLength:int, nRawLen:int = this.rawData.length;
			
			if (nRawLen === 0) {
				return new StringView(this.buffer, this.encoding);
