         
         var specialCharacterWidth = sideSpace * m + c
         specialCharacterWidth = max(specialCharacterWidth, keyWidth)
+        specialCharacterWidth = rounded(specialCharacterWidth)
         let specialCharacterGap = sideSpace - specialCharacterWidth
         
         var currentOrigin = frame.origin.x
         for (k, key) in enumerate(row) {
             if let view = modelToView[key] {
                 if k == 0 {
-                    view.frame = CGRectMake(currentOrigin, frame.origin.y, specialCharacterWidth, frame.height)
+                    view.frame = CGRectMake(rounded(currentOrigin), frame.origin.y, specialCharacterWidth, frame.height)
                     currentOrigin += (specialCharacterWidth + specialCharacterGap)
                 }
                 else if k == row.count - 1 {
                     currentOrigin += specialCharacterGap
-                    view.frame = CGRectMake(currentOrigin, frame.origin.y, specialCharacterWidth, frame.height)
+                    view.frame = CGRectMake(rounded(currentOrigin), frame.origin.y, specialCharacterWidth, frame.height)
                     currentOrigin += specialCharacterWidth
                 }
                 else {
-                    view.frame = CGRectMake(currentOrigin, frame.origin.y, actualKeyWidth, frame.height)
+                    view.frame = CGRectMake(rounded(currentOrigin), frame.origin.y, actualKeyWidth, frame.height)
                     if k == row.count - 2 {
                         currentOrigin += (actualKeyWidth)
                     }

        
        let leftSideAreaWidth = frame.width * leftSideRatio
        let rightSideAreaWidth = frame.width * rightSideRatio
        let leftButtonWidth = (leftSideAreaWidth - (gapWidth * CGFloat(keysBeforeSpace - 1))) / CGFloat(keysBeforeSpace)
        let rightButtonWidth = (rightSideAreaWidth - (gapWidth * CGFloat(keysAfterSpace - 1))) / CGFloat(keysAfterSpace)
        let spaceWidth = frame.width - leftSideAreaWidth - rightSideAreaWidth - gapWidth * CGFloat(2)
        
        var currentOrigin = frame.origin.x
        var beforeSpace: Bool = true
        for (k, key) in enumerate(row) {
            if let view = modelToView[key] {
                if key.type == Key.KeyType.Space {
                    view.frame = CGRectMake(currentOrigin, frame.origin.y, spaceWidth, frame.height)
                    currentOrigin += (spaceWidth + gapWidth)
                    beforeSpace = false
                }
                else if beforeSpace {
                    view.frame = CGRectMake(currentOrigin, frame.origin.y, leftButtonWidth, frame.height)
                    currentOrigin += (leftButtonWidth + gapWidth)
                }
                else {
                    view.frame = CGRectMake(currentOrigin, frame.origin.y, rightButtonWidth, frame.height)
                    currentOrigin += (rightButtonWidth + gapWidth)
                }
            }

        var currentOrigin = frame.origin.x + sideSpace
        for (k, key) in enumerate(row) {
            if let view = modelToView[key] {
                view.frame = CGRectMake(rounded(currentOrigin), frame.origin.y, keyWidth, frame.height)
                currentOrigin += (keyWidth + gapWidth)
            }
            else {
