Error message
Deprecated function: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in Drupal\Component\Utility\Unicode::validateUtf8() (line 395 of core/lib/Drupal/Component/Utility/Unicode.php).
Drupal\Component\Utility\Unicode::validateUtf8() (Line: 65) Drupal\Component\Utility\Xss::filter() (Line: 351) _colorbox_formatter_get_caption() (Line: 140) template_preprocess_colorbox_formatter() call_user_func_array() (Line: 261) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 45) __TwigTemplate_29a6bd8ca064d68d79a709de008b1300->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 224) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 223) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process() (Line: 118) Drupal\filter\Element\ProcessedText::preRenderText() call_user_func_array() (Line: 113) Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 870) Drupal\Core\Render\Renderer->doCallback() (Line: 432) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 423) __TwigTemplate_bcdae20cc74e927d9ce983809150de87->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() call_user_func() (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53) Drupal\Core\StackMiddleware\Session->handle() (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 50) Drupal\ban\BanMiddleware->handle() (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 741) Drupal\Core\DrupalKernel->handle() (Line: 19)
Deprecated function: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in Drupal\Component\Utility\Xss::filter() (line 69 of core/lib/Drupal/Component/Utility/Xss.php).
Drupal\Component\Utility\Xss::filter() (Line: 351) _colorbox_formatter_get_caption() (Line: 140) template_preprocess_colorbox_formatter() call_user_func_array() (Line: 261) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 45) __TwigTemplate_29a6bd8ca064d68d79a709de008b1300->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 224) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 223) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process() (Line: 118) Drupal\filter\Element\ProcessedText::preRenderText() call_user_func_array() (Line: 113) Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 870) Drupal\Core\Render\Renderer->doCallback() (Line: 432) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 423) __TwigTemplate_bcdae20cc74e927d9ce983809150de87->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() call_user_func() (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53) Drupal\Core\StackMiddleware\Session->handle() (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 50) Drupal\ban\BanMiddleware->handle() (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 741) Drupal\Core\DrupalKernel->handle() (Line: 19)
Deprecated function: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in Drupal\Component\Utility\Unicode::validateUtf8() (line 395 of core/lib/Drupal/Component/Utility/Unicode.php).
Drupal\Component\Utility\Unicode::validateUtf8() (Line: 65) Drupal\Component\Utility\Xss::filter() (Line: 351) _colorbox_formatter_get_caption() (Line: 140) template_preprocess_colorbox_formatter() call_user_func_array() (Line: 261) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 45) __TwigTemplate_29a6bd8ca064d68d79a709de008b1300->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 224) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 223) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process() (Line: 118) Drupal\filter\Element\ProcessedText::preRenderText() call_user_func_array() (Line: 113) Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 870) Drupal\Core\Render\Renderer->doCallback() (Line: 432) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 423) __TwigTemplate_bcdae20cc74e927d9ce983809150de87->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() call_user_func() (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53) Drupal\Core\StackMiddleware\Session->handle() (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 50) Drupal\ban\BanMiddleware->handle() (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 741) Drupal\Core\DrupalKernel->handle() (Line: 19)
Deprecated function: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in Drupal\Component\Utility\Xss::filter() (line 69 of core/lib/Drupal/Component/Utility/Xss.php).
Drupal\Component\Utility\Xss::filter() (Line: 351) _colorbox_formatter_get_caption() (Line: 140) template_preprocess_colorbox_formatter() call_user_func_array() (Line: 261) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 45) __TwigTemplate_29a6bd8ca064d68d79a709de008b1300->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 224) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 223) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process() (Line: 118) Drupal\filter\Element\ProcessedText::preRenderText() call_user_func_array() (Line: 113) Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 870) Drupal\Core\Render\Renderer->doCallback() (Line: 432) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 423) __TwigTemplate_bcdae20cc74e927d9ce983809150de87->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() call_user_func() (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53) Drupal\Core\StackMiddleware\Session->handle() (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 50) Drupal\ban\BanMiddleware->handle() (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 741) Drupal\Core\DrupalKernel->handle() (Line: 19)
Deprecated function: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in Drupal\Component\Utility\Unicode::validateUtf8() (line 395 of core/lib/Drupal/Component/Utility/Unicode.php).
Drupal\Component\Utility\Unicode::validateUtf8() (Line: 65) Drupal\Component\Utility\Xss::filter() (Line: 351) _colorbox_formatter_get_caption() (Line: 140) template_preprocess_colorbox_formatter() call_user_func_array() (Line: 261) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 45) __TwigTemplate_29a6bd8ca064d68d79a709de008b1300->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 224) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 223) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process() (Line: 118) Drupal\filter\Element\ProcessedText::preRenderText() call_user_func_array() (Line: 113) Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 870) Drupal\Core\Render\Renderer->doCallback() (Line: 432) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 423) __TwigTemplate_bcdae20cc74e927d9ce983809150de87->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() call_user_func() (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53) Drupal\Core\StackMiddleware\Session->handle() (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 50) Drupal\ban\BanMiddleware->handle() (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 741) Drupal\Core\DrupalKernel->handle() (Line: 19)
Deprecated function: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in Drupal\Component\Utility\Xss::filter() (line 69 of core/lib/Drupal/Component/Utility/Xss.php).
Drupal\Component\Utility\Xss::filter() (Line: 351) _colorbox_formatter_get_caption() (Line: 140) template_preprocess_colorbox_formatter() call_user_func_array() (Line: 261) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 45) __TwigTemplate_29a6bd8ca064d68d79a709de008b1300->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 224) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 223) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process() (Line: 118) Drupal\filter\Element\ProcessedText::preRenderText() call_user_func_array() (Line: 113) Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 870) Drupal\Core\Render\Renderer->doCallback() (Line: 432) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 423) __TwigTemplate_bcdae20cc74e927d9ce983809150de87->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() call_user_func() (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53) Drupal\Core\StackMiddleware\Session->handle() (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 50) Drupal\ban\BanMiddleware->handle() (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 741) Drupal\Core\DrupalKernel->handle() (Line: 19)
Deprecated function: strlen(): Passing null to parameter #1 ($string) of type string is deprecated in Drupal\Component\Utility\Unicode::validateUtf8() (line 395 of core/lib/Drupal/Component/Utility/Unicode.php).
Drupal\Component\Utility\Unicode::validateUtf8() (Line: 65) Drupal\Component\Utility\Xss::filter() (Line: 351) _colorbox_formatter_get_caption() (Line: 140) template_preprocess_colorbox_formatter() call_user_func_array() (Line: 261) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 45) __TwigTemplate_29a6bd8ca064d68d79a709de008b1300->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 224) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 223) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process() (Line: 118) Drupal\filter\Element\ProcessedText::preRenderText() call_user_func_array() (Line: 113) Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 870) Drupal\Core\Render\Renderer->doCallback() (Line: 432) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 423) __TwigTemplate_bcdae20cc74e927d9ce983809150de87->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() call_user_func() (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53) Drupal\Core\StackMiddleware\Session->handle() (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 50) Drupal\ban\BanMiddleware->handle() (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 741) Drupal\Core\DrupalKernel->handle() (Line: 19)
Deprecated function: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in Drupal\Component\Utility\Xss::filter() (line 69 of core/lib/Drupal/Component/Utility/Xss.php).
Drupal\Component\Utility\Xss::filter() (Line: 351) _colorbox_formatter_get_caption() (Line: 140) template_preprocess_colorbox_formatter() call_user_func_array() (Line: 261) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 45) __TwigTemplate_29a6bd8ca064d68d79a709de008b1300->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 504) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 224) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 223) Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process() (Line: 118) Drupal\filter\Element\ProcessedText::preRenderText() call_user_func_array() (Line: 113) Drupal\Core\Render\Renderer->doTrustedCallback() (Line: 870) Drupal\Core\Render\Renderer->doCallback() (Line: 432) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 254) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->{closure}() (Line: 2061) Twig\Extension\CoreExtension::captureOutput() (Line: 44) __TwigTemplate_e65ca13bf6eca804de0e3b2c94cbf463->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 484) Drupal\Core\Template\TwigExtension->escapeFilter() (Line: 423) __TwigTemplate_bcdae20cc74e927d9ce983809150de87->doDisplay() (Line: 387) Twig\Template->yield() (Line: 343) Twig\Template->display() (Line: 358) Twig\Template->render() (Line: 35) Twig\TemplateWrapper->render() (Line: 33) twig_render_template() (Line: 348) Drupal\Core\Theme\ThemeManager->render() (Line: 491) Drupal\Core\Render\Renderer->doRender() (Line: 248) Drupal\Core\Render\Renderer->render() (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 638) Drupal\Core\Render\Renderer->executeInRenderContext() (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare() (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse() (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray() call_user_func() (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch() (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw() (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle() (Line: 53) Drupal\Core\StackMiddleware\Session->handle() (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle() (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle() (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle() (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch() (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup() (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle() (Line: 50) Drupal\ban\BanMiddleware->handle() (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle() (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle() (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle() (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle() (Line: 741) Drupal\Core\DrupalKernel->handle() (Line: 19)
Update: June 15, 2021
On June 10, 2021 The Nature Conservancy (TNC) released a statement summarizing the recent internal review of their carbon offset credit practices. The exact scope of the review is not made clear, but appears to have focused very narrowly on procedures for setting baselines against which to assess additionality in forest carbon sequestration in an unspecified set of their own projects. They note that their review “found opportunities to improve” their approach to setting baselines, and that these findings will be used to reassess “elements of some of the projects” under development, without giving any detail about how this will be done. But the practices that resulted in grossly exaggerated estimates of carbon offsets simply took advantage of the baseline setting procedures built into the various carbon registries. And while TNC’s statement touts its leadership in “carbon mitigation and conservation finance strategies over the years”, their review gives no indication that they see a responsibility to work to fix the broader structural flaws that govern the practices of all of the many brokers of forest carbon offset deals.
TNC’s imprimatur has undoubtedly contributed to the rapid growth of forest carbon offset markets. Both the buyers and sellers of forest carbon offsets need to have faith that the brokers have accurately calculated the truly additional and permanent carbon sequestration that will be produced by a project. TNC has missed an opportunity to begin the much-needed broader and open review that is required to restore credibility in the marketplace
Background: What is a forest carbon offset?
The net increase each year in the amount of carbon stored in the world’s forests and forest products is a critically important sink, removing carbon dioxide from the atmosphere, and offsets a meaningful portion of the world’s annual greenhouse gas emissions. Markets have been developed in which emitters of greenhouse gases purchase offset credits from forest landowners, and count those credits against their emissions in their efforts to become carbon-neutral.
After a critical examination of markets for forest carbon offsets in the United States, and a great deal of soul-searching about the value of those markets as a legitimate mechanism for climate mitigation, I have concluded that offset deals provide little if any true “additionality” that enhances rates of forest carbon sequestration, and that the majority of credits sold on those markets, particularly for credits based on unrealistic baselines, provide no real offset to greenhouse gas emissions at all. The flaws in the markets are structural and deep, and may be irredeemable.
In early December of 2020 I sent an email to staff at The Nature Conservancy (TNC) voicing concerns about details I had been hearing about their approach to forest carbon offsets in the eastern U.S. I have been a volunteer trustee of a TNC chapter for more than 20 years, and staff immediately agreed to meet with me to discuss these issues, and shared that they were asking themselves similar questions.
A week later, before our scheduled meeting, Bloomberg News reporter Ben Elgin published an article providing details about a number of recent TNC carbon offset deals[1]. It raised serious questions about whether the credits brokered represented true offsets to greenhouse gas emissions, or instead had taken advantage of lax rules in the carbon markets to significantly inflate the climate mitigation potential of the deals. What wasn’t in dispute was that offset markets represented a lucrative new source of funding for conservation easements to protect forestland from development. Elgin’s article confirmed many of my concerns about the validity of the carbon offset deals, with concrete and compelling examples.
Two days after the article in Bloomberg News, I was contacted by a more senior TNC staff member to reschedule our meeting for after the holidays (and without including any TNC staff with direct knowledge and involvement in their carbon offset programs). It was early March before I was contacted again. In the meantime, I had reached out to other TNC staff and had been told that the organization had begun an internal review of their practices, which I suspect was triggered by Elgin’s article.
It has now been five months since I first contacted them, and I still have not heard any details about TNC’s review. To be fair, five months is not much time for such a large organization to address such critical issues. But I hope that they are going through the same soul-searching about carbon offsets that I and many other scientists have gone through recently. There is no question that forests, particularly in temperate regions, are a critically important sink for carbon globally, and an important component of the “natural climate solutions” that conservation organizations are promoting. The sale of forest carbon offsets has been touted as a market-based mechanism to enhance the strength of that sink, while providing a new source of funding to secure long-term protection of those forests.
At the outset, I have to note that five years ago, as a trustee of a non-profit forest in Connecticut, I supported entering those lands in a 100-year carbon offset agreement under the market established by the California Air Resource Board. The California offset market is a ‘compliance’ market in which polluters are allowed to use carbon offsets to meet a portion of their legal requirement to reduce emissions. It has some differences with the voluntary carbon markets, and those may reduce some of the concerns that have emerged since then. The sale of carbon credits provided financial support for a forest with a proud 100-year history of progressive forestry, land stewardship, and public access. And there’s no question that the deal provides guarantees against depletion of forest carbon stocks for the next 100 years. But I have done ecological research in those forests for 30 years, and know them and their management history well enough to conclude that the deal is unlikely to have any measurable impact on the rate of future carbon sequestration. In effect, the deal rewards the current stewards of the land for the previous owners’ past good management, and provides guarantees that at least the carbon stocks will not be depleted in the future.
I have no qualms about the deal in those terms. But whoever purchased the forest’s offset credits at auction on the California market used those credits to continue to pollute the atmosphere. And therein lies the rub. The question is whether deals like this, or the even more problematic deals described by Bloomberg News on the voluntary market, achieve anything in accelerating our transition to a carbon-neutral economy. Answering that question requires understanding regional variation in both our forests and forest management, and how those intersect with the ways that forest carbon offset credits can be calculated and sold.
The sections below outline the most critical issues as I see them, and why I have come to the conclusion that forest carbon offset deals, at least within the U.S., provide little if any meaningful reductions in net emissions of greenhouse gases to the atmosphere. Many of the issues discussed below also apply to carbon offset deals in tropical forests, but with more serious concerns about verification and compliance with the terms of the agreements [2].
U.S. forests are undeniably an important carbon sink, and a critical component of achieving a carbon neutral economy
There is no question that carbon sequestration in U.S. forests is a significant offset to the nation’s emissions of CO2 and other greenhouse gases. According to the most recent EPA estimates, annual increases in the amount of carbon stored in forests, harvested wood products and urban trees represent the largest carbon sink in the country, offsetting more than 11% of the nation’s total greenhouse gas emissions annually [3]. Of those sinks, carbon sequestered in the growth of live trees represents by far the largest component. The eastern states comprise 85% of the nation’s annual sequestration in forests, with the remainder concentrated in the Pacific Coast states [4]. Forests in the Rocky Mountain region, in contrast, have recently been net sources of CO2 to the atmosphere due to the effects of fires and insect damage. Land use and disturbance history clearly play a role in the magnitude of the eastern forest carbon sink, as a significant fraction of the landscape is the product of either reestablishment of trees on agricultural land abandoned during the past 200 years, or recovery following high rates of clearcutting in the late 19th and early 20th centuries.
California, New York, and Massachusetts have now passed aggressive laws to reach net-zero carbon emissions over the next 30 years. But in each of those states the laws count on offsets to ultimately achieve that goal, recognizing that some forms of emissions – particularly from sources like aviation fuel and emissions from industrial processes like cement production – will be very difficult to eliminate so quickly.
But there is nothing in the markets that reserves the nation’s forest carbon sequestration for the most difficult to eliminate emissions. And the current prices for offset credits are far below any reasonable estimate of the true economic or social cost of carbon. As a result, any emitter can lay claim to credits at a steep discount, and in many cases at a cost significantly below what it would take to actually eliminate their emissions. The deals provide a tool to compensate landowners for one of the public benefits their forests provide, but appear to make little sense as public policy designed to move the nation to a carbon-neutral future.
The methods used to calculate baselines that determine offset credits grossly exaggerate the actual emission reductions from a project
One of the most egregious practices uncovered by Bloomberg News was the exaggeration of the emission reductions that would occur from a project by comparing expected sequestration under a proposed project to an often unrealistically aggressive but legally allowed management of the same land. The difference between that hypothetical baseline and the increase in carbon stocks expected once the lands are entered into an offset project determines the gross amount of carbon credits that can be sold (which are then reduced slightly to account for factors including disturbance and leakage).
For example, The Nature Conservancy’s 2019 project with the Albany Water Board is expected to generate more than $1 million in revenue over a 10-year period from sale of carbon credits on the voluntary market on 4,439 acres of forestland in the city’s watersheds [5]. According to project documents filed with the American Carbon Registry (ACR), the project “reduces greenhouse gas emissions through increases in forest stocking relative to decreases that would occur under industrial ownership (emphasis added)” [6]. The stocking estimated under industrial ownership was determined by simulating forest management that would maximize the 100-year net present value (NPV) of the land, using a 4% discount rate (for non-federal public land). And the standard practice on industrial forestland is assumed to be short-rotation clearcuts. Setting aside that such management – and even the presence of industrial forestland – is rare anywhere in the region around Albany, the project verification documents note that the “Albany Water Department does not commercially harvest timber”. Putting the Albany watershed lands, which are well-stocked from years of little if any harvest, into intensive industrial management would lead to significant reductions in the amount of carbon present within those forests. And under existing rules, the number of offset credits that can be claimed is the difference between that hypothetically much lower stocking and the expected increase in stocking that will occur under what is essentially a continuation of business as usual management.
It seems patently obvious that these procedures grossly exaggerate the carbon sequestration that can be attributed to the offset deal. In fact, there’s nothing in the project documents that would lead me to conclude that there was any degree of true additionality in carbon sequestration on those lands as a result of the project. The Albany Water Board lands appear to have been well-protected prior to the deal, and were likely sequestering carbon at a fairly steady rate given forest growth and little if any harvest. More generally, the notion that any significant fraction of eastern forests, outside of some of the commercial spruce-fir forests in the far north and the pine plantations of the southeast, are managed at an intensity that would maximize 100-year NPV is entirely at odds with data on forest growth and harvest levels from the National Forest Inventory.
It's important to note that the example above is not an exception or even remotely unusual for carbon offset deals. The methods used to calculate allowable offset credits in this case did not exploit bugs or loopholes in the published standards for improved forest management projects under ACR[7], but instead simply followed the protocols established by the registry. Projects on lands with even below-average levels of carbon stocks would produce this kind of distortion of the actual carbon sequestration that would occur during the project period.
One argument I have heard to try to justify the extreme scenarios used for the baseline is that “there’s always a chance a future landowner would choose such extreme harvest methods, and the offset project will ensure that doesn’t happen” (at least for the next 40 years). But by setting such a low baseline, the project is selling enough credits to allow the buyer to emit as much CO2 (immediately) as would have happened if a new landowner did indeed come along and harvest aggressively, releasing the same amount of CO2. In effect, the deal has simply ensured that the worst case scenario has indeed happened, and allowed the purchaser of the credits to emit just as much CO2 as if the landowner had effectively liquidated their forests.
There is another, and just as troubling, way to look at the effects of how these baselines are calculated. The forests of the eastern U.S. add new live tree biomass annually at a rate that averages only 1-2% of total stocks of live tree biomass[8]. The aggressive methods for calculating allowable credits using ACR methodology can produce a baseline that assumes liquidation of most of the accumulated live tree carbon stocks in a forest. That carbon sequestration has already been factored into global carbon budgets, and is one of the reasons that current greenhouse gas levels are not even higher. And those carbon stocks are typically 50 - 100 times larger than the annual net sequestration in new live tree biomass. As a result, the credits sold for this previously stored carbon will be the majority of the credits issued over a 40-year project term. In effect, the offset deals are now ‘marketing’ the carbon previously stored so that industries can claim they are offsetting future carbon emissions. The flaw in this is so glaring that I still shake my head when I think about it.
The compliance market set up by the California Air Resources Board uses a different procedure to determine the project baseline, establishing ‘common practice baselines’ based on estimated average forest carbon stocks for different ecoregions. Landowners with forests above that baseline (above average) can effectively receive initial credit based on how much their forests exceed the baseline carbon stocks. This process simplifies the arcane practice of calculating a hypothetical baseline using net present value calculations. But the landowner is still, just as in the voluntary markets, getting credit for past sequestration in their forest. While the common practice baselines would appear to limit the degree to which landowners can market past sequestration, a recent analysis has suggested that even the methods for calculating the regional average carbon stocks for different forest types are seriously flawed, and lead to much larger sales of carbon credits than would be allowed under a more accurate estimate of average carbon stocks [9]. For most projects, the quantity of credits sold based on this past forest growth will, as in the voluntary market, be far greater than the annual credits produced by new carbon sequestration over the coming decades. And the buyer of those credits will again then use that past sequestration to justify large future emissions, with only a small fraction of those emissions offset by new forest growth.
There are likely a number of reasons why standards on both the voluntary and compliance markets allow these distortions of true offsets. In particular, convincing landowners to enter into a long-term deal with not-insignificant periodic compliance and verification costs is much easier if they receive a large initial payment from the sale of these inflated estimates of carbon credits. I suspect that a thorough analysis of existing U.S. forest carbon offset deals on both the voluntary and compliance markets would reveal that the vast majority of credits issued could be traced to the distortions created by these highly suspect methods of calculating baselines.
The nation’s forest carbon sink has been remarkably stable for decades, and true “additionality” is unlikely in carbon offset deals
Maintaining and even enhancing the fraction of U.S. greenhouse gas emissions offset by forest growth is a component of the “natural climate solutions” that scientists and environmental groups have proposed as a critical step in reaching a net carbon neutral economy [10]. Within the limits of statistical uncertainty, the annual national rate of net carbon sequestration in forests and forest products has remained relatively constant over the past 20 years (the period for which forest inventory data are most extensive) [11]. The total area of forestland has also been remarkably stable over the same time period (290.0 million hectares in 2000 versus 289.5 million hectares in 2019). As a result of this relatively constant annual increment and relatively stable forestland base, forest carbon stocks, particularly in the eastern U.S., have been steadily increasing over many decades.
Extrapolation into the future is always fraught, and all models are approximations, but the past 20 years would suggest that the most appropriate ‘business as usual’ baseline [12] against which to judge the true additionality of carbon sequestration in forest offset deals should be the current rates of carbon sequestration and the steadily increasing total forest (and forest product) carbon stocks. Adopting this as a baseline would be a far more stringent but much more accurate standard against which to judge the additionality of forest carbon offset deals.
Both the scientific literature and the media have trumpeted opportunities for increasing the rates of sequestration in existing forestland, and increasing the total area of forestland through tree planting and afforestation. I will outline my reasons for skepticism about the potential benefits of domestic tree planting and afforestation in a future post [13], and here focus on the future of the carbon sink on existing forestland. Forest carbon offset deals are in most cases required to assert that a project will result in “additionality”, i.e. greater rates of sequestration than would occur under business as usual on that land. In practice, this is largely just a check-off on a form, and can be met without any quantitative analysis that would establish that the rate of carbon sequestration would in fact be increased as a result of the project [14]. And as I noted in the section above, ‘business as usual’ under ACR is effectively an intensive, profit-maximizing harvest regime, despite the obvious fact that this bears no resemblance to the current management of much of the nation’s forestland [15]. And once a project has met that criterion, it can sell credits for each ton of carbon stored, not just for any additional sequestration above what would have occurred under current management in the absence of the project. So even if some modest level of actual true additionality was achieved, the bulk of the credits claimed would still represent offsets that would have occurred even without the project.
The magnitude of the net carbon sink from a forest stand is largely controlled by three processes: (1) new growth of live trees, (2) the biomass of trees that die from causes other than logging, and (3) the fate of the biomass of trees cut down during logging. The latter two processes determine the inputs of carbon into the detrital (dead wood) pools and harvested wood product pools. But only the first and third processes are really amenable to manipulation designed to increase net carbon sequestration.
Foresters, almost as a matter of faith, believe that carefully designed silviculture and timber harvests can produce higher long-term yield by increasing subsequent rates of tree growth. And there is no question that a partial harvest, for example, can increase the growth of the trees left standing by releasing them from competition with their neighbors. But while the average growth rates of the individual surviving trees may increase, there are fewer trees in the stand contributing growth, and the stand as a whole will typically have lower total carbon sequestration for at least the first decade or two after the harvest. Moreover, calculating net carbon sequestration in a managed stand has to take into account the release of carbon from the roots and tops of harvested trees left in the forest to decay, and the decomposition of harvested wood products that end up in landfills [16].
I have worked on the ecological foundations of forest management for decades, and do see opportunities for innovative silviculture that could, over a matter of many decades, produce a landscape with higher net rates of carbon sequestration than under current harvest regimes. But it would be extraordinarily naïve to expect that any increase in current rates of logging would result in higher rates of net carbon sequestration at a landscape or regional scale, at least over the next 30 - 50 years [17].
While an increase in rates of logging won’t increase carbon sequestration, at least in the near term, there is little question that reducing or eliminating logging will increase sequestration, at least in the specific stands affected by the change in management. Recent analyses colleagues and I have done for the northern states from New York to Maine indicate that lands reserved from logging have net carbon sequestration rates that are roughly 33% higher than in the working forests (ignoring leakage – i.e. any compensating increases in harvests on non-reserved lands) [18].
This is a logical and not unexpected result. Perhaps as a consequence, there have been proposals in both Massachusetts and Connecticut to eliminate logging on state forest land in order to maximize carbon sequestration. I have two concerns with those proposals. The first is that they ignore the many other economic and ecological benefits that managed forests can provide. More critically, from the perspective of carbon sequestration, the proposals have to assume that reducing harvests on state lands won’t just lead to higher rates of harvest on private lands, leading to no net change in forest carbon sequestration across the state as a whole. This shifting of harvests to other lands is part of the broader and often difficult-to-assess problem of “leakage”. Standards under both the compliance and voluntary markets require projects to account for leakage using adjustment factors that reduce the estimated offset credits from a project. But both the California and ACR standards have been criticized for using unrealistically low leakage factors [19].
But even if we assume that halting harvests on state lands won’t just result in more intensive logging on private lands, it is worth comparing the potential magnitude of the benefits from this policy change to other alternatives that clearly do represent progress towards a carbon-neutral future. It’s possible to estimate the potential true additionality in carbon sequestration that would be expected if harvests were halted on the approximately 175,000 acres of managed state forest land in Connecticut and 314,000 acres in Massachusetts. Compared to northern New England with its large tracts of commercial forestland, forests in southern New England already have relatively low harvest rates. Using what I consider a liberal estimate, halting harvests on state lands in Connecticut and Massachusetts could be expected to increase carbon sequestration by 20%, at least on those specific lands [20]. It’s instructive to compare that to the acres of commercial solar photovoltaic installations that would generate the same ‘offset’ to carbon emissions from fossil-fuel-based electricity generation in the two states. By my calculations, installation of 252 acres of solar farms in Connecticut and 377 acres in Massachusetts would offset the same amount of CO2 emissions as the additional sequestration that would occur as a result of halting all harvests on almost a half million acres of forest land in the two states [21]. And the solar farms would be eliminating the other forms of pollution from existing fossil-fuel electricity generation. A realistic estimate of the leakage expected due to an increase in harvests on private lands would easily cut the required areas of solar farms by 50-75%. Well-managed public forestlands provide important habitat and conservation value while still continuing to sequester carbon. Sacrificing those benefits for such a minimal enhancement of carbon sequestration, particularly when truly carbon-neutral energy alternative are readily available, seems like a poor bargain to me.
True enhancement of carbon sequestration on existing forestland is clearly very challenging. The bottom line is that the ‘additionality’ criteria in both the voluntary or compliance carbon markets do not in any way ensure truly ‘additional’ carbon sequestration over and above what would happen under a realistic ‘business as usual’. Even if there was a slight increase in carbon sequestration because of a reduction in harvesting on a project area, there is no guarantee that this wouldn’t just stimulate increased harvesting on other working forestlands, leading to no net change in regional carbon sequestration. And even if there was a slight true additional carbon sequestration, the majority of the credits marketed would still represent the sequestration that would have occurred under current management in the absence of an offset deal. The offset markets are thus fundamentally just a mechanism by which companies can lay claim to the benefits already provided by the nation’s forests and forest owners. I don’t have any objections to landowners being compensated for the public benefits their forests provide. But it is an entirely different question whether this game of ‘dibs’ in any way leads to a reduction in the nation’s net greenhouse gas emissions.
What is a legitimate minimum term limit for a forest carbon offset project?
In principle, any sale of forest carbon offsets should be for carbon that will be sequestered in perpetuity. In practice, landowners agree to verify through periodic monitoring that the carbon has in fact been stored for some minimum time period. That term is 100 years on the compliance market set up by the California Air Resource Board (CARB). Standards on the different voluntary carbon registries vary, and are as short as 40 years on the American Carbon Registry (ACR) used in a number of TNC offset projects. The ACR standards admit that the 40 year minimum project term “is not equated with the assurance of permanence, because no length of time, short of perpetual, is truly permanent, nor is there a sound scientific basis or accepted international standard around any number of years that equates to an emission reduction/removal being permanent” [22]. While it’s obvious that no length of time short of perpetual is truly permanent, the ACR statement doesn’t in any way justify a project term as short as 40 years.
I consider a 100 year term a reasonable guarantee that the credits represent true sequestration. I was concerned when I heard suggestions that TNC was considering deals with as short as a 60 year term, but was really alarmed when I discovered that TNC was using the minimum permitted term of 40 years under ACR. To understand my concerns you need to understand the evolution of logging practices in eastern forests over the past 50 years [23]. While even-aged management (clearcutting) is the most visible to the public, it is only common in spruce-fir forests of the far north and pine forests of the southeastern coastal plain. Over the past 20 years, clearcutting was used on less than 10% of the area of northern hardwood forests that had any level of harvest in a given year, and most of the harvested area in any year had rates of removal of less than 20% of tree biomass [24]. The numbers are skewed even more heavily in favor of light selective harvests in the oak-hickory forests that make up the most common forest type in the eastern U.S.
And these light selective harvests happen frequently. Averaged across all working forestland, 2-4% of eastern forests experience some level of harvest in any given year. Since a significant fraction of the lands that can be legally logged are not in practice actually available for harvest because of a suite of ecological, physical, social and economic constraints, the frequency with which the truly available ‘working’ forest lands are logged is significantly higher. The net result is that working forests can expect some level of logging at least every 30-40 years.
So consider how a savvy owner of a typical northern hardwood forest would look at a proposed 40-year carbon offset project. Before committing to the project they could start by harvesting 40% of the biomass on the property [25], including most of the high-value sawlogs, leaving behind stands dominated by low-grade wood. They then enter a carbon offset deal on the voluntary market, and get paid each year to grow new (hopefully high-grade) trees while the residual low-grade trees would also continue to add biomass (and generate offset credits). Forty years would be about the amount of time needed in a northern hardwood forest to grow back the biomass harvested just before the start of the project. Then, once the 40-year term is up, the landowner could simply liquidate all of the new growth accumulated over the project term (particularly the high-grade trees), and start over with a new project at approximately the same level of carbon stocks present at the beginning of the previous project period. I would expect that TNC would include a requirement that the forest management be certified by a standard like that provided by the Forest Stewardship Council, but it is important to note that the admittedly extreme scenario described above would, in fact, meet traditional definitions of sustainable yield in forestry. The professional foresters I know would be appalled by this scenario, particularly the implied degree of high-grading involved, but too few properties are actually managed anymore by professional foresters with a long-term relationship to the land.
The only true carbon sequestration that would have actually occurred in this scenario would be small increments expected in dead wood and wood products from the harvests immediately before and after the project term. But the purchaser of the credits could claim that they had offset approximately 90 metric tons of CO2 due to new growth for each acre of land in the project over the 40 year term [26]. This transient increase in forest carbon over the next 40 years would be almost entirely cancelled out by the initial release of carbon due to the harvest just before the start of the project. The landowner would also likely be able to claim additional credits by comparing their proposed very light harvests during the project period to the carbon stocking expected under a baseline determined by an aggressive profit-maximization management of the land. On a hypothetical 5,000 acre project in the northern forest, the purchaser of the credits would thus be able to claim that they had offset at least 450,000 tons of emissions over the 40 year project term, without any true net long-term increase in forest biomass to actually offset those emissions.
The bottom line is that 40 years is simply too short a term limit to provide assurance that the carbon is permanently sequestered. It also allows gaming the system in pernicious ways. Such a short term limit increases the attractiveness of the project to the landowner, and reduces the total project compliance costs, but is simply not adequate to ensure that meaningful long-term climate mitigation occurs.
A few thoughts on offset credit prices and the costs of compliance and verification
The true costs of carbon emissions have been debated for years, but by any standards the current prices for forest carbon offsets on both the voluntary (~ $5-10/offset) and compliance markets ($10-15/offset) are steeply discounted relative to the social and economic costs of carbon emissions. The costs of abating greenhouse gas emissions vary enormously depending on the nature of the emitting sector, but have been steadily declining for many reasons, according to a recent report from Goldman Sachs[27]. I’m not qualified to judge the degree to which current forest carbon offset prices are sufficiently high to encourage emitters in different sectors to actually de-carbonize their activities, but will simply note that current offset prices are still far below almost all of the carbon abatement prices for the many different decarbonization strategies in the Goldman Sachs report. It’s hard for me to see how such low offset prices actively encourage decarbonization from any sector of the economy.
Significantly raising forest carbon offset prices could alleviate some of the incentives to use aggressive baseline calculations that grossly exaggerate the truly additional offsets generated by a project. But at some point, higher prices have the potential to distort timber markets and silvicultural practices in potentially perverse ways. At even the current low offset prices, a low-grade but still healthy tree is worth more to a landowner left intact to continue growing and adding carbon than the stumpage price the owner would receive if the tree was harvested. None of the foresters I’ve talked to think that the current offset prices are likely to change management practices, in part because markets for low-grade wood are so weak in many parts of the northeast (particularly where population density is high). Domestic markets for low-grade wood have been in decline for decades as industries like paper production have moved offshore. And it’s not hard to imagine that a significant increase in offset prices and widespread implementation of offset deals could accelerate that trend by raising pulp prices locally. Not counting the devastating economic consequences for rural communities from additional losses in those industries, would we have any confidence that displacing even more paper production to the tropics wouldn’t have far worse carbon consequences for the atmosphere?
Both the compliance and voluntary offset markets can only exist if the deals make economic sense to the landowners. Standards for both markets require independent third-party validation and verification of offsets generated throughout the project period. These are laudable but expensive under current protocols. I suspect that these long-term costs have played a role in the development of standards that inflate baselines and generate a large initial payment to the landowners. It is worth exploring whether there are new technologies, including use of remote sensing, that could significantly reduce compliance and verification costs without sacrificing accuracy.
Forest carbon on domestic U.S. markets appears to be among the lowest-hanging fruit available for industries seeking to offset their greenhouse gas emissions. But the long-term costs of compliance to landowners create pressure to inflate estimates of the true (and truly additional) offsets generated by a project. Increasing forest offset prices could provide greater incentives for decarbonization, but at some point could have perverse consequences. We need rigorous, independent analyses of the potential for increases in offset prices and reductions in the costs of compliance to create markets that can truly increase rates of forest carbon sequestration without broader issues associated with leakage, while actually incentivizing the transition to a carbon-neutral economy.
The ethical dimensions of carbon offsets
The comments above have focused almost entirely on what are essentially issues of accounting. And as arcane and as debatable as those issues can be, two things appear to be indisputable. Forest carbon offsets allow an industry to continue to emit not just CO2 but all of the other pollutants associated with that emission. And the health impacts of that pollution fall disproportionately on people of color and disadvantaged communities[28].
Recognition of this environmental injustice is growing, and estimates of the health impacts are staggering. This appears to be one of the reasons that the reauthorization of the California compliance market in 2017 reduced the overall role for offsets, and limited the proportion of offsets that could be generated outside of the state. I don’t see anything comparable in the voluntary markets that directly acknowledges or mitigates this injustice, nor do the changes in the California market fully address the issue. Brokers like TNC of voluntary forest carbon offset deals have some ability to choose to whom they will sell the credits. But the embedding of polluters within disadvantaged communities is so pervasive that ensuring the credits do not perpetuate this injustice is an enormous challenge.
As I said at the outset of this post, I am not convinced that the accounting issues that I have raised are solvable. But if the environmental justice issues can’t be resolved, then the accounting issues are moot as far as I’m concerned. Our forests can and will continue to provide critically important offsets to carbon emissions. But marketing those offsets to allow emitters to continue to pollute may simply be unethical.
Endnotes
[1] https://www.bloomberg.com/features/2020-nature-conservancy-carbon-offsets-trees/ - A video summarizing the reporting can be found at https://www.bloomberg.com/news/videos/2021-04-20/these-trees-are-not-what-they-seem-video
[2] ProPublica published a series of articles in 2019 highlighting the challenges in verifying carbon credits sold in many countries, particularly in tropical regions. But there is little question that projects that successfully reduced deforestation and degradation of tropical forests (REDD) would have significant impact on the magnitude of the global terrestrial flux of carbon to/from the atmosphere. Solving the verification problem is certainly a challenge, but one that is clearly worth resolving.
[3] U.S. Environmental Protection Agency. 2020. Inventory of U.S. greenhouse gas emissions and sinks: 1990-2018. EPA 430-R-20-002. Washington, DC: U.S. Environmental Protection Agency. https://www.epa.gov/ghgemissions/inventory-us-greenhouse-gas-emissions-and-sinks-1990-2018
[4] Domke, Grant M. et al. 2020. Greenhouse gas emissions and removals from forest land, woodlands, and urban trees in the United States, 1990-2018. Resource Update FS-227. Madison, WI: U.S. Department of Agriculture, Forest Service, Northern Research Station. 5 p. https://doi.org/10.2737/FS-RU-227.
[5] https://altamontenterprise.com/10232019/albany-preserve-forests-earn-funds-and-combat-climate-change
[6] https://acr2.apx.com/mymodule/reg/TabDocuments.asp?r=111&ad=Prpt&act=update&type=PRO&aProj=pub&tableid=doc&id1=424. The project documents note that the scenarios considered in the maximization of NPV were constrained to allow no more than 60% of the land to be clearcut in the next decade, with an additional 30% clearcut in the second decade. This extreme scenario would effectively represent liquidation of the forest stocks, and would be inconceivable management for those lands.
[7] American Carbon Registry Improved Forest Management Methodology for Quantifying GHG Removals and Emission Reductions through Increased Forest Carbon Sequestration on Non-Federal U.S. Forestlands. Version 1.3, April 2018. https://americancarbonregistry.org/carbon-accounting/standards-methodologies/improved-forest-management-ifm-methodology-for-non-federal-u-s-forestlands
[8] Southern pine and southern pine/hardwood forests are the exception, with biomass increment rates that are almost twice as high as in lowland, oak/hickory, northern hardwood/conifer, and spruce/fir forests.
[9] Badgley, G. et al. Systematic over-crediting in California’s forest carbon offsets program. https://carbonplan.org/research/forest-offsets-explainer see also: https://www.propublica.org/article/the-climate-solution-actually-adding-millions-of-tons-of-co2-into-the-atmosphere
[10] Griscom, B. W. et al. 2017. Natural Climate Solutions. Proceedings of the National Academy of Sciences 114:11645-11650. www.pnas.org/cgi/doi/10.1073/pnas.1710465114
[12] Searchinger et al. 2009. Fixing a Critical Climate Accounting Error. Science 326:527-528.
[13] See https://www.bloomberg.com/news/features/2020-12-17/the-real-trees-delivering-fake-climate-progress-for-corporate-america for reporting by Bloomberg News on this issue.
[14] The American Carbon Registry Standard (Version 7.0, December 2020) describes a 3-pronged additionality test. The three requirements are that (1) the project activity or GHG emissions are not already mandated under existing laws or regulations, (2) there is not already “widespread deployment” of the project or practice within the region, and (3) that carbon market incentives will help overcome either financial, technological, or institutional barriers. Meeting these three requirements in no way establishes that a project will lead to truly additional carbon sequestration over and above past and/or current management on a forest tract.
[15] See Canham et al. 2013, Ecological Applications 23:515-522; Thompson et al. 2017, Ecological Applications 27:942-955; and Brown et al. 2018, Ecosphere 9(3):e02062. 10.1002/ecs2.2062 for analyses of ecological, economic, and social factors that determine harvest regimes in eastern U.S. forests.
[16] There are intriguing proposals to enhance forest carbon sequestration by increasing the lifespan of some fraction of the harvested wood product pool (i.e. greater use of wood in long-lived products). But two-thirds of the current harvested wood product pool is wood that has ended up in solid waste disposal sites. A distressing fraction of that carbon can be emitted as methane, with far higher global warming potential than emission of CO2. Efforts to cap and capture methane from landfills would have immediate benefits.
[17] Brown, M. L. et al. 2018. Timber harvest as the predominant disturbance regime in northeastern U.S. forests: effects of harvest intensification. Ecosphere 9(3):e02062. 10.1002/ecs2.2062. This article and additional work in preparation compares the effects on forest biomass and net carbon sequestration of a business as usual harvest baseline for the 4 northern states from NY to ME, to a range of scenarios of increasing harvest intensity and frequency. None of the alternative scenarios that increased the harvest regime resulted in greater carbon sequestration over the next 50 years in combined in live biomass, detrital pools, and harvested wood products, including offsets from biomass energy production, than the business as usual harvest regime for the region.
[19] Haya, B. 2019. Policy Brief: The California Air Resources Board’s U.S. Forest offset protocol underestimates leakage. https://gspp.berkeley.edu/faculty-and-impact/working-papers/policy-brief-arbas-us-forest-projects-offset-protocol-underestimates-leaka. Haya’s analysis concludes that because of unrealistically low estimates of leakage under CARB protocols, 82% of the offset credits generated by CARB “do not represent true emissions reductions”. ACR standards use a range of leakage estimates based on how large a decrease in total wood product production occurs, relative to the baseline projection (or through “directly accounting for market leakage” using methodology accepted by the project verifiers). Accurately accounting for leakage remains a very real challenge.
[20] FIA data for Massachusetts show that harvest removals in 2017 were 18.7% of annual net growth of live trees. Butler, Brett J. 2018. Forests of Massachusetts, 2017. Resource Update FS-161. Newtown Square, PA: U.S. Department of Agriculture, Forest Service, Northern Research Station. 3 p. https://doi.org/10.2737/FS-RU-161. I used FIA data to estimate that the mean live tree biomass for forestland in the two-state region was 178.6 metric tons/ha, with mean live tree biomass increment of 1.22 metric tons/ha/yr, and mean tree mortality of 1.17 metric tons/ha/yr. I assumed 15% of tree mortality was stored in detrital carbon pools, leading to an estimate of live and detrital biomass increment of 1.40 metric tons/ha/yr. This converts to 2.57 metric tons CO2e/ha/yr, and total net annual sequestration of 508,934 metric tons CO2e/yr for the 489,000 acres of managed state forestland. With an estimated 20% increase in sequestration due to cessation of harvests, this would lead to 101,786 metric tons CO2e/yr of additional sequestration (ignoring leakage, and not counting the forgone storage in harvested wood products that would have been generated under continued forest harvests).
[21] I used U. S. Energy Information Agency 2019 state data on CO2 emissions from electricity generation produced from fossil fuel sources to calculate the megawatt hours of generation per metric ton of CO2 emissions for each state (https://www.eia.gov/electricity/data/state/). I used a 2013 report from the National Renewable Energy Laboratory for a value of 3 acres of direct land area of commercial photovoltaic systems per gigawatt hour/yr of solar energy generation (https://www.nrel.gov/docs/fy13osti/56290.pdf).
[22] The American Carbon Registry Standard. Version 7.0, December 2020. page 31. https://americancarbonregistry.org/carbon-accounting/standards-methodologies/american-carbon-registry-standard/acr-standard-v7-0_final_dec2020.pdf
[24] Analysis of FIA data from the eastern 31 states, 1999 – 2018. Canham and Murphy, in prep. Controls on carbon sequestration in tree biomass in forests of the eastern United States.
[25] The average biomass (above and belowground) of live trees in northern hardwood/conifer forests of the eastern U.S. is 115 metric tons biomass/ha (FIA data). The area weighted mean fraction of aboveground biomass removed in a harvest is 34.7%.
[26] Expected net sequestration over the next 40 years in live biomass and detrital pools in the four northern states (NY to ME) in the absence of new harvests is approximately 5.6 metric tons CO2e/ha/yr (Brown et al., in prep.).
[27] https://www.goldmansachs.com/insights/pages/gs-research/carbonomics-innovation-deflation-and-affordable-de-carbonization/report.pdf
[28] https://www.lung.org/clean-air/outdoors/who-is-at-risk/disparities