diff --git a/app/code/Magento/Weee/Model/Observer/Session.php b/app/code/Magento/Weee/Model/Observer/Session.php
new file mode 100644
index 0000000000000000000000000000000000000000..7f72b64c6bf792eff2d650191fa8016cb5ad2325
--- /dev/null
+++ b/app/code/Magento/Weee/Model/Observer/Session.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/**
+ * Customer Session Event Observer
+ */
+namespace Magento\Weee\Model\Observer;
+
+class Session
+{
+    /**
+     * @var \Magento\Customer\Model\Session
+     */
+    protected $customerSession;
+
+    /**
+     * @var \Magento\Weee\Helper\Data
+     */
+    protected $weeeHelper;
+
+    /**
+     * Module manager
+     *
+     * @var \Magento\Framework\Module\Manager
+     */
+    private $moduleManager;
+
+    /**
+     * Cache config
+     *
+     * @var \Magento\PageCache\Model\Config
+     */
+    private $cacheConfig;
+
+    /**
+     * @param \Magento\Customer\Model\Session $customerSession
+     * @param \Magento\Weee\Helper\Data $weeeHelper
+     * @param \Magento\Framework\Module\Manager $moduleManager
+     * @param \Magento\PageCache\Model\Config $cacheConfig
+     */
+    public function __construct(
+        \Magento\Customer\Model\Session $customerSession,
+        \Magento\Weee\Helper\Data $weeeHelper,
+        \Magento\Framework\Module\Manager $moduleManager,
+        \Magento\PageCache\Model\Config $cacheConfig
+    ) {
+        $this->customerSession = $customerSession;
+        $this->weeeHelper = $weeeHelper;
+        $this->moduleManager = $moduleManager;
+        $this->cacheConfig = $cacheConfig;
+    }
+
+    /**
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     */
+    public function customerLoggedIn(\Magento\Framework\Event\Observer $observer)
+    {
+        if ($this->moduleManager->isEnabled('Magento_PageCache') && $this->cacheConfig->isEnabled() &&
+            $this->weeeHelper->isEnabled()) {
+            /** @var \Magento\Customer\Model\Data\Customer $customer */
+            $customer = $observer->getData('customer');
+
+            /** @var \Magento\Customer\Api\Data\AddressInterface[] $addresses */
+            $addresses = $customer->getAddresses();
+            if (isset($addresses)) {
+                $defaultShippingFound = false;
+                $defaultBillingFound = false;
+                foreach ($addresses as $address) {
+                    if ($address->isDefaultBilling()) {
+                        $defaultBillingFound = true;
+                        $this->customerSession->setDefaultTaxBillingAddress(
+                            [
+                                'country_id' => $address->getCountryId(),
+                                'region_id'  => $address->getRegion() ? $address->getRegion()->getRegionId() : null,
+                                'postcode'   => $address->getPostcode(),
+                            ]
+                        );
+                    }
+                    if ($address->isDefaultShipping()) {
+                        $defaultShippingFound = true;
+                        $this->customerSession->setDefaultTaxShippingAddress(
+                            [
+                                'country_id' => $address->getCountryId(),
+                                'region_id'  => $address->getRegion() ? $address->getRegion()->getRegionId() : null,
+                                'postcode'   => $address->getPostcode(),
+                            ]
+                        );
+                    }
+                    if ($defaultShippingFound && $defaultBillingFound) {
+                        break;
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Address after save event handler
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
+     */
+    public function afterAddressSave($observer)
+    {
+        if ($this->moduleManager->isEnabled('Magento_PageCache') && $this->cacheConfig->isEnabled() &&
+            $this->weeeHelper->isEnabled()) {
+            /** @var $customerAddress Address */
+            $address = $observer->getCustomerAddress();
+
+            // Check if the address is either the default billing, shipping, or both
+            if ($address->getIsPrimaryBilling() || $address->getIsDefaultBilling()) {
+                $this->customerSession->setDefaultTaxBillingAddress(
+                    [
+                        'country_id' => $address->getCountryId(),
+                        'region_id'  => $address->getRegion() ? $address->getRegionId() : null,
+                        'postcode'   => $address->getPostcode(),
+                    ]
+                );
+            }
+
+            if ($address->getIsPrimaryShipping() || $address->getIsDefaultShipping()) {
+                $this->customerSession->setDefaultTaxShippingAddress(
+                    [
+                        'country_id' => $address->getCountryId(),
+                        'region_id'  => $address->getRegion() ? $address->getRegionId() : null,
+                        'postcode'   => $address->getPostcode(),
+                    ]
+                );
+            }
+        }
+    }
+}
diff --git a/app/code/Magento/Weee/Test/Unit/Model/Observer/SessionTest.php b/app/code/Magento/Weee/Test/Unit/Model/Observer/SessionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..db31c7931bedab29ca21223702a8b8cd035a3070
--- /dev/null
+++ b/app/code/Magento/Weee/Test/Unit/Model/Observer/SessionTest.php
@@ -0,0 +1,166 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Weee\Test\Unit\Model\Observer;
+
+class SessionTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\Event\Observer
+     */
+    protected $observerMock;
+
+    /**
+     * @var \Magento\Customer\Model\Session
+     */
+    protected $customerSessionMock;
+
+    /**
+     * Module manager
+     *
+     * @var \Magento\Framework\Module\Manager
+     */
+    private $moduleManagerMock;
+
+    /**
+     * Cache config
+     *
+     * @var \Magento\PageCache\Model\Config
+     */
+    private $cacheConfigMock;
+
+    /**
+     * @var \Magento\Weee\Helper\Data
+     */
+    protected $weeeHelperMock;
+
+    /**
+     * @var \Magento\Tax\Model\Observer\Session
+     */
+    protected $session;
+
+
+    protected function setUp()
+    {
+        $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->observerMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'getCustomerAddress', 'getData'
+            ])
+            ->getMock();
+
+        $this->customerSessionMock = $this->getMockBuilder('Magento\Customer\Model\Session')
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'setDefaultTaxBillingAddress', 'setDefaultTaxShippingAddress', 'setWebsiteId'
+            ])
+            ->getMock();
+
+        $this->moduleManagerMock = $this->getMockBuilder('Magento\Framework\Module\Manager')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->cacheConfigMock = $this->getMockBuilder('Magento\PageCache\Model\Config')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->weeeHelperMock = $this->getMockBuilder('Magento\Weee\Helper\Data')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->session = $this->objectManager->getObject(
+            'Magento\Weee\Model\Observer\Session',
+            [
+                'customerSession' => $this->customerSessionMock,
+                'weeeHelper' => $this->weeeHelperMock,
+                'moduleManager' => $this->moduleManagerMock,
+                'cacheConfig' => $this->cacheConfigMock
+            ]
+        );
+    }
+
+    public function testCustomerLoggedIn()
+    {
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_PageCache')
+            ->willReturn(true);
+
+        $this->cacheConfigMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->weeeHelperMock->expects($this->any())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $customerMock = $this->getMockBuilder('Magento\Customer\Model\Data\Customer')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->observerMock->expects($this->once())
+            ->method('getData')
+            ->with('customer')
+            ->willReturn($customerMock);
+
+        $address = $this->objectManager->getObject('Magento\Customer\Model\Data\Address');
+        $address->setIsDefaultShipping(true);
+        $address->setIsDefaultBilling(true);
+        $address->setCountryId(1);
+        $address->setPostCode(11111);
+
+        $addresses = [$address];
+        $customerMock->expects($this->once())
+            ->method('getAddresses')
+            ->willReturn($addresses);
+
+        $this->customerSessionMock->expects($this->once())
+            ->method('setDefaultTaxBillingAddress')
+            ->with(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
+        $this->customerSessionMock->expects($this->once())
+            ->method('setDefaultTaxShippingAddress')
+            ->with(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
+
+        $this->session->customerLoggedIn($this->observerMock);
+    }
+
+    public function testAfterAddressSave()
+    {
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isEnabled')
+            ->with('Magento_PageCache')
+            ->willReturn(true);
+
+        $this->cacheConfigMock->expects($this->once())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $this->weeeHelperMock->expects($this->any())
+            ->method('isEnabled')
+            ->willReturn(true);
+
+        $address = $this->objectManager->getObject('Magento\Customer\Model\Address');
+        $address->setIsDefaultShipping(true);
+        $address->setIsDefaultBilling(true);
+        $address->setIsPrimaryBilling(true);
+        $address->setIsPrimaryShipping(true);
+        $address->setCountryId(1);
+        $address->setData('postcode', 11111);
+
+        $this->customerSessionMock->expects($this->once())
+            ->method('setDefaultTaxBillingAddress')
+            ->with(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
+        $this->customerSessionMock->expects($this->once())
+            ->method('setDefaultTaxShippingAddress')
+            ->with(['country_id' => 1, 'region_id' => null, 'postcode' => 11111]);
+
+        $this->observerMock->expects($this->once())
+            ->method('getCustomerAddress')
+            ->willReturn($address);
+
+        $this->session->afterAddressSave($this->observerMock);
+    }
+}
diff --git a/app/code/Magento/Weee/etc/frontend/events.xml b/app/code/Magento/Weee/etc/frontend/events.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2bc96ce0399341f63d40f814ee72e061f54d205c
--- /dev/null
+++ b/app/code/Magento/Weee/etc/frontend/events.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/Event/etc/events.xsd">
+    <event name="customer_data_object_login">
+        <observer name="customer_weee_logged_in" instance="Magento\Weee\Model\Observer\Session" method="customerLoggedIn" />
+    </event>
+    <event name="customer_address_save_after">
+        <observer name="customer_weee_after_address_save" instance="Magento\Weee\Model\Observer\Session" method="afterAddressSave" />
+    </event>
+</config>