A method for operating a filter for echo cancellation, the filter comprising a plurality of filter taps and delay elements, the method comprising: estimating a communication channel echo using the filter; calculating an echo cancellation error (e(n)) as the difference between an estimated communication channel echo and an input signal (r(n)) comprising a received symbol and echo noise received at the filter; monitoring a mean square error of the echo cancellation error (e(n)) and comparing the mean square error with a first predefined range, including: if the mean square error falls outside the first predetermined range, adjusting a number of operating delay elements of the filter and continuing to monitor the mean square error; and if the mean square error falls within the first predefined range, monitoring filter coefficients (C 0 -C N) of the filter and comparing the filter coefficients (C 0 -C N) with corresponding predefined thresholds, turning off a filter tap if an associated filter coefficient is smaller than a corresponding predefined threshold; continuing to monitor the mean square error and comparing with the first predefined range until the filter reaches a steady state position; once the filter reaches the steady state position, monitoring the mean square error and comparing the mean square error with a second predefined range, including: if the mean square error is within the second predefined range, continuing to monitor the mean square error; and if the mean square error is outside the second predefined range, turning on all of the filter taps and returning to the step of monitoring the mean square error and comparing the mean square error with the first predefined range. estimating a communication channel echo using the filter; calculating an echo cancellation error (e(n)) as the difference between an estimated communication channel echo and an input signal (r(n)) comprising a received symbol and echo noise received at the filter; monitoring a mean square error of the echo cancellation error (e(n)) and comparing the mean square error with a first predefined range, including: if the mean square error falls outside the first predetermined range, adjusting a number of operating delay elements of the filter and continuing to monitor the mean square error; and if the mean square error falls within the first predefined range, monitoring filter coefficients (C 0 -C N) of the filter and comparing the filter coefficients (C 0 -C N) with corresponding predefined thresholds, turning off a filter tap if an associated filter coefficient is smaller than a corresponding predefined threshold; if the mean square error falls outside the first predetermined range, adjusting a number of operating delay elements of the filter and continuing to monitor the mean square error; and if the mean square error falls within the first predefined range, monitoring filter coefficients (C 0 -C N) of the filter and comparing the filter coefficients (C 0 -C N) with corresponding predefined thresholds, turning off a filter tap if an associated filter coefficient is smaller than a corresponding predefined threshold; continuing to monitor the mean square error and comparing with the first predefined range until the filter reaches a steady state position; once the filter reaches the steady state position, monitoring the mean square error and comparing the mean square error with a second predefined range, including: if the mean square error is within the second predefined range, continuing to monitor the mean square error; and if the mean square error is outside the second predefined range, turning on all of the filter taps and returning to the step of monitoring the mean square error and comparing the mean square error with the first predefined range. if the mean square error is within the second predefined range, continuing to monitor the mean square error; and if the mean square error is outside the second predefined range, turning on all of the filter taps and returning to the step of monitoring the mean square error and comparing the mean square error with the first predefined range.