diff --git a/src/sig/Panel.java b/src/sig/Panel.java
index cdc633e..f264d18 100644
--- a/src/sig/Panel.java
+++ b/src/sig/Panel.java
@@ -269,7 +269,7 @@ public class Panel extends JPanel implements Runnable {
                         (int)tt.A.x,(int)tt.A.y,tt.T.u,tt.T.v,tt.T.w,
                         (int)tt.B.x,(int)tt.B.y,tt.U.u,tt.U.v,tt.U.w,
                         (int)tt.C.x,(int)tt.C.y,tt.V.u,tt.V.v,tt.V.w,
-                    tt.tex,(tt.col&0xFF0000)>>16,tt);
+                    tt.tex,(tt.col&0xFF0000)>>16,tt,4);
                 } else {
                     DrawUtils.FillTriangle(p,(int)tt.A.x,(int)tt.A.y,(int)tt.B.x,(int)tt.B.y,(int)tt.C.x,(int)tt.C.y,tt.getColor());
                 }
diff --git a/src/sig/utils/DrawUtils.java b/src/sig/utils/DrawUtils.java
index 1ec74e4..c82a8fd 100644
--- a/src/sig/utils/DrawUtils.java
+++ b/src/sig/utils/DrawUtils.java
@@ -281,15 +281,15 @@ public class DrawUtils {
             du1_step=0,dv1_step=0,dw1_step=0,
             du2_step=0,dv2_step=0,dw2_step=0;
 
-        if (dy1!=0) {dax_step=dx1/((float)Math.abs(dy1));}
-        if (dy2!=0) {dbx_step=dx2/((float)Math.abs(dy2));}
+        if (dy1!=0) {dax_step=dx1/Math.abs(dy1);}
+        if (dy2!=0) {dbx_step=dx2/Math.abs(dy2);}
 
-        if (dy1!=0) {du1_step=du1/((float)Math.abs(dy1));}
-        if (dy1!=0) {dv1_step=dv1/((float)Math.abs(dy1));}
-        if (dy1!=0) {dw1_step=dw1/((float)Math.abs(dy1));}
-        if (dy2!=0) {du2_step=du2/((float)Math.abs(dy2));}
-        if (dy2!=0) {dv2_step=dv2/((float)Math.abs(dy2));}
-        if (dy2!=0) {dw2_step=dw2/((float)Math.abs(dy2));}
+        if (dy1!=0) {du1_step=du1/Math.abs(dy1);}
+        if (dy1!=0) {dv1_step=dv1/Math.abs(dy1);}
+        if (dy1!=0) {dw1_step=dw1/Math.abs(dy1);}
+        if (dy2!=0) {du2_step=du2/Math.abs(dy2);}
+        if (dy2!=0) {dv2_step=dv2/Math.abs(dy2);}
+        if (dy2!=0) {dw2_step=dw2/Math.abs(dy2);}
 
         if (dy1!=0) {
             for (int i=y1;i<=y2-texelSize+1;i+=texelSize) {
@@ -318,9 +318,9 @@ public class DrawUtils {
                 float t=0.0f;
 
                 for (int j=ax;j<=bx-texelSize+1;j+=texelSize) {
-                    tex_u=(1.0f-t)*tex_su+t*tex_eu;
-                    tex_v=(1.0f-t)*tex_sv+t*tex_ev;
-                    tex_w=(1.0f-t)*tex_sw+t*tex_ew;
+                    tex_u=(texelSize-t)*tex_su+t*tex_eu;
+                    tex_v=(texelSize-t)*tex_sv+t*tex_ev;
+                    tex_w=(texelSize-t)*tex_sw+t*tex_ew;
                     int pixelIndex = (int)(i*SigRenderer.SCREEN_WIDTH+j);
                     if (SigRenderer.temp_request!=null) {
                         if (CheckAllTexels(tex_w,SigRenderer.depthBuffer_noTransparency,pixelIndex,texelSize)) {
@@ -336,14 +336,14 @@ public class DrawUtils {
                             if (((col&0xFF000000)>>>24)!=255) {
                                 if (rendering_state==TRANSLUCENT_ONLY_RENDERING||
                                     rendering_state==NORMAL_RENDERING) {
-                                        Draw(canvas,pixelIndex,col);
+                                        Draw(canvas,pixelIndex,col,texelSize);
                                         setArrayTexels(SigRenderer.depthBuffer,pixelIndex,tex_w,texelSize);
                                         setArrayTexels(SigRenderer.depthBuffer_tri,pixelIndex,ref.unmodifiedTri,texelSize);
                                         setArrayTexels(SigRenderer.translucencyBuffer,pixelIndex,true,texelSize);
                                 }
                             } else {
                                 if (rendering_state!=TRANSLUCENT_ONLY_RENDERING) {
-                                    Draw(canvas,pixelIndex,col);
+                                    Draw(canvas,pixelIndex,col,texelSize);
                                     setArrayTexels(SigRenderer.depthBuffer,pixelIndex,tex_w,texelSize);
                                     setArrayTexels(SigRenderer.depthBuffer_tri,pixelIndex,ref.unmodifiedTri,texelSize);
                                 }
@@ -360,13 +360,13 @@ public class DrawUtils {
         dv1=v3-v2;
         du1=u3-u2;
         dw1=w3-w2;
-        if (dy1!=0) {dax_step=dx1/((float)Math.abs(dy1));}
-        if (dy2!=0) {dbx_step=dx2/((float)Math.abs(dy2));}
+        if (dy1!=0) {dax_step=dx1/Math.abs(dy1);}
+        if (dy2!=0) {dbx_step=dx2/Math.abs(dy2);}
         du1_step=0f;
         dv1_step=0f;
-        if (dy1!=0) {du1_step=du1/((float)Math.abs(dy1));}
-        if (dy1!=0) {dv1_step=dv1/((float)Math.abs(dy1));}
-        if (dy1!=0) {dw1_step=dw1/((float)Math.abs(dy1));}
+        if (dy1!=0) {du1_step=du1/Math.abs(dy1);}
+        if (dy1!=0) {dv1_step=dv1/Math.abs(dy1);}
+        if (dy1!=0) {dw1_step=dw1/Math.abs(dy1);}
 
         if (dy1!=0) {
             for (int i=y2;i<=y3-texelSize+1;i+=texelSize) {
@@ -395,9 +395,9 @@ public class DrawUtils {
                 float t=0.0f;
 
                 for (int j=ax;j<=bx-texelSize+1;j+=texelSize) {
-                    tex_u=(1.0f-t)*tex_su+t*tex_eu;
-                    tex_v=(1.0f-t)*tex_sv+t*tex_ev;
-                    tex_w=(1.0f-t)*tex_sw+t*tex_ew;
+                    tex_u=(texelSize-t)*tex_su+t*tex_eu;
+                    tex_v=(texelSize-t)*tex_sv+t*tex_ev;
+                    tex_w=(texelSize-t)*tex_sw+t*tex_ew;
                     int pixelIndex = (int)(i*SigRenderer.SCREEN_WIDTH+j);
                     if (SigRenderer.temp_request!=null) {
                         if (CheckAllTexels(tex_w,SigRenderer.depthBuffer_noTransparency,pixelIndex,texelSize)) {
@@ -413,14 +413,14 @@ public class DrawUtils {
                             if (((col&0xFF000000)>>>24)!=255) {
                                 if (rendering_state==TRANSLUCENT_ONLY_RENDERING||
                                     rendering_state==NORMAL_RENDERING) {
-                                        Draw(canvas,pixelIndex,col);
+                                        Draw(canvas,pixelIndex,col,texelSize);
                                         setArrayTexels(SigRenderer.depthBuffer,pixelIndex,tex_w,texelSize);
                                         setArrayTexels(SigRenderer.depthBuffer_tri,pixelIndex,ref.unmodifiedTri,texelSize);
                                         setArrayTexels(SigRenderer.translucencyBuffer,pixelIndex,true,texelSize);
                                 }
                             } else {
                                 if (rendering_state!=TRANSLUCENT_ONLY_RENDERING) {
-                                    Draw(canvas,pixelIndex,col);
+                                    Draw(canvas,pixelIndex,col,texelSize);
                                     setArrayTexels(SigRenderer.depthBuffer,pixelIndex,tex_w,texelSize);
                                     setArrayTexels(SigRenderer.depthBuffer_tri,pixelIndex,ref.unmodifiedTri,texelSize);
                                 }
@@ -620,7 +620,7 @@ public class DrawUtils {
             }
         }
     }
-    public static void Draw(int[] canvas,int pixelIndex,int col) {
+    public static void Draw(int[] canvas,int pixelIndex,int col,int texelSize) {
         if (pixelIndex>0&&pixelIndex<canvas.length) {
             //System.out.println(x+","+y);
             int alpha = col>>>24;
@@ -633,16 +633,26 @@ public class DrawUtils {
                 int new_r=(int)(ratio*r+(1-ratio)*prev_r);
                 int new_g=(int)(ratio*g+(1-ratio)*prev_g);
                 int new_b=(int)(ratio*b+(1-ratio)*prev_b);
-                
-                canvas[pixelIndex]=new_r+(new_g<<8)+(new_b<<16)+(col&0xFF000000);
+                for (int x=0;x<texelSize;x++) {
+                    for (int y=0;y<texelSize;y++) {
+                        canvas[pixelIndex+y*SigRenderer.SCREEN_WIDTH+x]=new_r+(new_g<<8)+(new_b<<16)+(col&0xFF000000);
+                    }
+                }
             } else {
-                canvas[pixelIndex]=col;
+                for (int x=0;x<texelSize;x++) {
+                    for (int y=0;y<texelSize;y++) {
+                        canvas[pixelIndex+y*SigRenderer.SCREEN_WIDTH+x]=col;
+                    }
+                }
             }
         }
     }
-    public static void Draw(int[] canvas,int x,int y,int col) {
+    public static void Draw(int[] canvas,int x,int y,int col,int texelSize) {
         if (x>=0&&y>=0&&x<SigRenderer.SCREEN_WIDTH&&y<SigRenderer.SCREEN_HEIGHT) {
-            Draw(canvas,x+y*SigRenderer.SCREEN_WIDTH,col);
+            Draw(canvas,x+y*SigRenderer.SCREEN_WIDTH,col,texelSize);
         }
     }
+    public static void Draw(int[] canvas,int pixelIndex,int col) {
+        Draw(canvas,pixelIndex,col,1);
+    }
 }