diff --git a/src/Surfaces.cc b/src/Surfaces.cc
index cfbb3a78b7b13b295f9f4c35d6bbc399cfd1e0db..4fd533e5044d261614f1859ef9efd06602da0999 100644
--- a/src/Surfaces.cc
+++ b/src/Surfaces.cc
@@ -185,20 +185,23 @@ void Surfaces::buffer( GLfloat *fill, Colourscale *cs, DATA_TYPE *dat,
 void Surfaces::buffer_opaque( float opaque, GLfloat *fill, Colourscale *cs, DATA_TYPE *dat,
                      dataOpac* dataopac, GLfloat *&buffer, bool flat )
 {
+  return;
+
   set<int> solid;
 
-  for ( auto &a :_zlist ) {
+  for ( int j=0; j<_zlist.size(); j++ ) {
+    vtx_z          &a = _zlist[j];
     SurfaceElement *s = _ele[a.i];
-    const int* n = s->obj();
-    bool eleopac = true;
+    const int      *n = s->obj();
+    bool      eleopac = true;
     for( int i=0; i<s->ptsPerObj(); i++ )
       if( dataopac->alpha(dat[n[i]]) < opaque ) {
         eleopac = false;
         break;
       }
     if( eleopac ) {
-      solid.insert(a.i);
-      buffer_elem( a.i, fill, cs, dat+a.i, dataopac, buffer, flat );
+      solid.insert(j);
+      buffer_elem( a.i, fill, cs, dat, dataopac, buffer, flat );
     }
   }
   for( auto i=solid.rbegin(); i != solid.rend(); i++ )
diff --git a/src/TBmeshWin.cc b/src/TBmeshWin.cc
index 0320e22a37aa12ba6c6ca930c67787474e40112c..9245bddda4d71169368b3c3c80a9a7335c8d3cc0 100644
--- a/src/TBmeshWin.cc
+++ b/src/TBmeshWin.cc
@@ -394,11 +394,17 @@ TBmeshWin::draw_surfaces( RenderTris &rd, vector<vtx_z> &trans, bool wireframe )
 {
   model->pt.setVis( true );
 
-  unsigned int old_redraw_state = _redraw_state;
-  bool translucent = rd.opaque() != rd.num();
+  bool translucent =  false;
+  for ( int s=0; s<model->numSurf(); s++ ) {
+    Surfaces *sf = model->surface(s);
+    if(translucency( wireframe?SurfEle:Surface, wireframe?sf->outlinecolor():sf->fillcolor())){
+      translucent = true;
+      break;
+    }
+  }
 
   if( translucent && rd.num()>MAX_SURFELE_REALTIME && _spinning )
-    _redraw_state = VBO_None;   // do not recalculate translucent surface if spinning
+    return;
 
   bool newView = (REDRAW(VBO_View))&&translucent;
   if( REBUFFER_SURF(_redraw_state) || newView )  { // refill buffer
@@ -440,8 +446,7 @@ TBmeshWin::draw_surfaces( RenderTris &rd, vector<vtx_z> &trans, bool wireframe )
     }
   }
 
-   draw_sorted_elements( rd, trans, newView, wireframe );
-  _redraw_state = old_redraw_state;
+  draw_sorted_elements( rd, trans, newView, wireframe );
 }
 
 
@@ -474,7 +479,7 @@ TBmeshWin::draw_surface(Surfaces* sf, GLfloat *&vbobuf, bool wf )
     // all elements are opaque
     sf->buffer( s_colour, cs, showData?(facetshading?sf->to_elem(data).data():data):NULL,
  		NULL, vbobuf, facetshading );
-  else if( on_tr && showData && dataopac->dop[Surface].on() ) {
+  else if( on_tr && showData && dataopac->dop[wf?SurfEle:Surface].on() ) {
     sf->buffer_opaque(  OPAQUE_LIMIT, s_colour, cs, facetshading?sf->to_elem(data).data():data,
                                                   dataopac->dop+Surface, vbobuf, facetshading );
   }