     int glisssteps = (halfTurnSteps * halfturns) - (accelSteps * 2);
     int startpulse = pitchToPulse(startpitch + glissAdd);
     int endpulse = pitchToPulse(endpitch + glissAdd);
+    int accelsteps = map(startpitch, 48, 72, accelSteps-10, accelSteps+10);
+    int decelsteps = map(endpitch, 48, 72, accelSteps-10, accelSteps+10);
     digitalWrite(dirPin, dir);
     delayMicroseconds(pulseWidth);
-    for (int i=0; i<accelSteps; i++) {
-        oneStep(map(i, 0, accelSteps, max(maxPulse, startpulse), startpulse));
+    for (int i=0; i<accelsteps; i++) {
+        oneStep(map(i, 0, accelsteps, max(maxPulse, startpulse), startpulse));
         if (alarmState) return;
     }
     for (int i=0; i<glisssteps; i++) {
         oneStep(map(i, 0, glisssteps, startpulse, endpulse));
         if (alarmState) return;
     }
-    for (int i=0; i<accelSteps; i++) {
-        oneStep(map(i, 0, accelSteps, endpulse, max(maxPulse, endpulse)));
+    for (int i=0; i<decelsteps; i++) {
+        oneStep(map(i, 0, decelsteps, endpulse, max(maxPulse, endpulse)));
         if (i>(accelSteps - decelLook) && digitalRead(sensorPin)) break;
         if (alarmState) return;
     }

}

void turnUntilNext(float pitch, bool dir) {
    // leave this without durationTurn adjustments
    int pulse = pitchToPulse(pitch);
    int startstoppulse = max(maxPulse, pulse);
    digitalWrite(dirPin, dir);
    delayMicroseconds(pulseWidth);
    for (int i=0; i<accelSteps; i++) {
        oneStep(map(i, 0, accelSteps, startstoppulse, pulse));
        if (alarmState) return;
    }
    sendReady();

    unsigned long glisstime = ((duration - sustainstart) * 1000L) -
        (((max(maxPulse, startpulse) + startpulse) * (accelsteps / 2)) +
         ((endpulse + max(maxPulse, endpulse)) * (decelsteps / 2)));
    int glisssteps = glisstime / ((startpulse + endpulse) / 2);
    int sustainstartsteps = (sustainstart * 1000L) / startpulse;
    int sustainendsteps = (sustainend * 1000L) / endpulse;
