public function getSane( $shift = 1, $limitOrFilter = null )
    {

        $backtrace = $this->trace;

        while( $shift-- > 0  ) {
            array_shift( $backtrace );
        }

        if( is_numeric( $limitOrFilter ) ){
            $backtrace = array_slice( $backtrace, 0, (int) $limitOrFilter );
            $limitOrFilter = null;
        }

        $formattedTrace = array_map(
            array( $this, 'traceComponentMakeSane' ),
            $backtrace
        );

        // Apply the filter. Trace fragment is returned if the string limitOrFilter is found anywhere in a trace
        if( null !== $limitOrFilter ) {
            foreach( $formattedTrace as $key => $trace ) {
                $traceMatchesFilter = false;
                while( !$traceMatchesFilter and list(,$traceLine) = each($trace) ) {
                    if( is_string( $traceLine ) ) {
                        $traceMatchesFilter = false !== stripos( $traceLine, $limitOrFilter );
                    }
                }
                if( !$traceMatchesFilter ) {
                    unset( $formattedTrace[$key] );
                }
            }
        }

        return $formattedTrace;

    }