diff --git a/libcelt/vq.c b/libcelt/vq.c
index b45f08f094dec65abeee25e1d5a0b3ed34d3d097..1d0b6ee6f0379682581afe02e589d589e3d007c8 100644
--- a/libcelt/vq.c
+++ b/libcelt/vq.c
@@ -224,7 +224,8 @@ void copy_quant(float *x, int N, int K, float *Y, int B, int N0)
 {
    int i,j;
    int best=0;
-   float best_score=-1e15;
+   float best_score=0;
+   float s = 1;
    float E;
    for (i=0;i<N0*B-N;i+=B)
    {
@@ -236,18 +237,22 @@ void copy_quant(float *x, int N, int K, float *Y, int B, int N0)
          xy += x[j]*Y[i+j];
          yy += Y[i+j]*Y[i+j];
       }
-      score = xy*xy/(.1*yy);
+      score = xy*xy/(.001+yy);
       if (score > best_score)
       {
          best_score = score;
          best = i;
+         if (xy>0)
+            s = 1;
+         else
+            s = -1;
       }
    }
-   //printf ("%d\n", best);
+   //printf ("%d %f\n", best, best_score);
    E = 1e-10;
    for (j=0;j<N;j++)
    {
-      x[j] = Y[best+j];
+      x[j] = s*Y[best+j];
       E += x[j]*x[j];
    }
    E = 1/sqrt(E);