Welcome! Strafford is now BARBRI! The expert courses you know from the trusted global leader in legal education.
About the Course
Introduction
This CLE course will discuss latest developments related to independent contractor classification under Federal and State Law, especially the more challenging California law. Covered topics also include newly released guidance on virtual marketplace companies (“VMC”) and insight to determine correct classification in an environment of varied government guidance.
Description
Federal and State agencies have given fast and furious guidance regarding proper classification of independent contractors. In June 2017, the Department of Labor (“DOL”) withdrew its prior guidance on independent contractors, putting employers on shaky ground when making classification decisions. Agencies have since issued additional guidance for employers.
In April, the DOL validated the independent contractor relationship in VMCs by articulating that VMCs connect service providers with consumers, as opposed to employing the service providers. In August, the NLRB issued an order effectively removing itself from the misclassification controversy, ruling that employers who misclassify workers as independent contractors do not violate the NLRA.
California has stood out among the states in this area. The California Supreme Court’s 2018 Dynamex decision changed the applicable classification test, shifting from the prior “Borello Standard” (i.e. control) to the new “ABC Test,” which makes proper use of the independent contractor classification nearly impossible. This panel examine the impact of this change as well as the proposed (and dueling) legislative attempts to enter this arena.
Listen as our distinguished panel discusses these and other issues which will enable a forward look into 2020. The panel will explore what this new guidance means for employers across various industries, as well as best practices for employment counsel when advising clients on classification.
-
This 90-minute webinar is eligible in most states for 1.5 CLE credits.
-
Live Online
On Demand
Date + Time
- event
Wednesday, November 13, 2019
- schedule
1:00 PM E.T.
- Overview of the DOL’s April 29, 2019 Opinion Letter guidance regarding independent contractor classification.
- Overview of the NLRB’s August 29, 2019 Order ruling that employers do not violate federal law under the National Labor Relations Act (“NLRA”).
- Overview of the ever changing landscape regarding independent contractor classification in the State of California.
- Discussion of unanswered questions in light of this new guidance
- Best practices for employment counsel handling classification issues
The panel will review these and other relevant topics:
- What new guidance have Federal and State agencies provided concerning classifying independent contractors?
- How does this guidance affect employers when making classification decisions?
- What questions remain unanswered, and what are the best practices for employment counsel going forward?
The following has evaluated to null or missing:
==> barbriRedisCacheAPI.get("barbripass", productId) [in template "20096#20121#2885355" at line 5, column 77]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: response = barbriRedisCacheAPI.get("b... [in template "20096#20121#2885355" at line 5, column 66]
---- 1<#assign productId = ''/> 2 <#if (productID.getData())?? && productID.getData()?has_content> 3 <#assign productId = productID.getData() /> 4 </#if> 5 <#assign response = barbriRedisCacheAPI.get("barbripass", productId) 6 json = jsonFactoryUtil.createJSONObject(response) 7 /> 8 9 <div class="card"> 10 <div class="card-body"> 11 <div class="row justify-content-between align-items-center"> 12 <div class="col-auto col-sm-auto"> 13 <div class="btn cle_btn" id="modalPassShortName"><#if (passName.getData())??>${passName.getData()}</#if></div> 14 </div> 15 <div class="col-auto col-sm-auto pl-lg-0"> 16 <span class="sale-price" id="modalPassPrice">$${json.pricebook?replace(",", "")?number?string("#,##0.00")}</span> 17 </div> 18 </div> 19 <div class="small_heading_area" id="modalPassFullName"><#if (title.getData())??>${title.getData()}</#if></div> 20 <p><#if (unlimitedText.getData())??>${unlimitedText.getData()}</#if>:</p> 21 <ul class="common-list disc_list paddNone"> 22 <#if (benefits.getData())??> 23 ${benefits.getData()} 24</#if> 25 </ul> 26 </div> 27 <div class="btn-float"> 28 <div class="premium-cle-pass cart-item"> 29 <input type="hidden" class="product-id" value="${productId}"> 30 <input type="hidden" class="product-name" value="${json.name}"> 31 <input type="hidden" class="pass-value" value="${passName.getData()}"> 32 <input type="hidden" class="product-price" value="${json.pricebook}"> 33 <input type="hidden" class="passAccessLengthMonths" value="${json.passAccessLengthMonths}"> 34 <input type="hidden" class="product-pass" value="family"> 35 <input type="hidden" class="product-expireDate" value=""> 36 37 <button 38 class="btn pc_theme_btn btn-primary btn_maxwidth_xxl_large add-to-cart" 39 aria-label="Buy Now" 40 data-redirect-checkout="true" 41 > 42 <span class="material-symbols-rounded"> shopping_cart </span> 43 Buy Now 44 </button> 45 </div> 46 </div> 47 </div> 48 49 <script> 50$(document).on('click', '.add-to-cart', function () { 51 let monthsToAdd = parseInt($(".passAccessLengthMonths").val()); 52 let currentDate = new Date(); 53 let futureDate = new Date(currentDate); 54 // Add months dynamically 55 futureDate.setMonth(futureDate.getMonth() + monthsToAdd); 56 57 // Handle overflow (e.g., Jan 31 + 1 month) 58 if (futureDate.getDate() !== currentDate.getDate()) { 59 futureDate.setDate(0); // last day of previous month 60 } 61 62 // Format as MM/DD/YYYY 63 function formatDateMMDDYYYY(date) { 64 let mm = String(date.getMonth() + 1).padStart(2, '0'); 65 let dd = String(date.getDate()).padStart(2, '0'); 66 let yyyy = date.getFullYear(); 67 return mm + '/' + dd + '/' + yyyy; 68 } 69 $(".product-expireDate").val(formatDateMMDDYYYY(futureDate)); 70 71 // Then close the modal 72 $('.single_option').modal('hide'); 73 }); 74</script> The following has evaluated to null or missing:
==> barbriRedisCacheAPI.get("barbripass", productId) [in template "20096#20121#2885355" at line 5, column 77]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: response = barbriRedisCacheAPI.get("b... [in template "20096#20121#2885355" at line 5, column 66]
---- 1<#assign productId = ''/> 2 <#if (productID.getData())?? && productID.getData()?has_content> 3 <#assign productId = productID.getData() /> 4 </#if> 5 <#assign response = barbriRedisCacheAPI.get("barbripass", productId) 6 json = jsonFactoryUtil.createJSONObject(response) 7 /> 8 9 <div class="card"> 10 <div class="card-body"> 11 <div class="row justify-content-between align-items-center"> 12 <div class="col-auto col-sm-auto"> 13 <div class="btn cle_btn" id="modalPassShortName"><#if (passName.getData())??>${passName.getData()}</#if></div> 14 </div> 15 <div class="col-auto col-sm-auto pl-lg-0"> 16 <span class="sale-price" id="modalPassPrice">$${json.pricebook?replace(",", "")?number?string("#,##0.00")}</span> 17 </div> 18 </div> 19 <div class="small_heading_area" id="modalPassFullName"><#if (title.getData())??>${title.getData()}</#if></div> 20 <p><#if (unlimitedText.getData())??>${unlimitedText.getData()}</#if>:</p> 21 <ul class="common-list disc_list paddNone"> 22 <#if (benefits.getData())??> 23 ${benefits.getData()} 24</#if> 25 </ul> 26 </div> 27 <div class="btn-float"> 28 <div class="premium-cle-pass cart-item"> 29 <input type="hidden" class="product-id" value="${productId}"> 30 <input type="hidden" class="product-name" value="${json.name}"> 31 <input type="hidden" class="pass-value" value="${passName.getData()}"> 32 <input type="hidden" class="product-price" value="${json.pricebook}"> 33 <input type="hidden" class="passAccessLengthMonths" value="${json.passAccessLengthMonths}"> 34 <input type="hidden" class="product-pass" value="family"> 35 <input type="hidden" class="product-expireDate" value=""> 36 37 <button 38 class="btn pc_theme_btn btn-primary btn_maxwidth_xxl_large add-to-cart" 39 aria-label="Buy Now" 40 data-redirect-checkout="true" 41 > 42 <span class="material-symbols-rounded"> shopping_cart </span> 43 Buy Now 44 </button> 45 </div> 46 </div> 47 </div> 48 49 <script> 50$(document).on('click', '.add-to-cart', function () { 51 let monthsToAdd = parseInt($(".passAccessLengthMonths").val()); 52 let currentDate = new Date(); 53 let futureDate = new Date(currentDate); 54 // Add months dynamically 55 futureDate.setMonth(futureDate.getMonth() + monthsToAdd); 56 57 // Handle overflow (e.g., Jan 31 + 1 month) 58 if (futureDate.getDate() !== currentDate.getDate()) { 59 futureDate.setDate(0); // last day of previous month 60 } 61 62 // Format as MM/DD/YYYY 63 function formatDateMMDDYYYY(date) { 64 let mm = String(date.getMonth() + 1).padStart(2, '0'); 65 let dd = String(date.getDate()).padStart(2, '0'); 66 let yyyy = date.getFullYear(); 67 return mm + '/' + dd + '/' + yyyy; 68 } 69 $(".product-expireDate").val(formatDateMMDDYYYY(futureDate)); 70 71 // Then close the modal 72 $('.single_option').modal('hide'); 73 }); 74</script> The following has evaluated to null or missing:
==> barbriRedisCacheAPI.get("barbripass", productId) [in template "20096#20121#2885355" at line 5, column 77]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: response = barbriRedisCacheAPI.get("b... [in template "20096#20121#2885355" at line 5, column 66]
---- 1<#assign productId = ''/> 2 <#if (productID.getData())?? && productID.getData()?has_content> 3 <#assign productId = productID.getData() /> 4 </#if> 5 <#assign response = barbriRedisCacheAPI.get("barbripass", productId) 6 json = jsonFactoryUtil.createJSONObject(response) 7 /> 8 9 <div class="card"> 10 <div class="card-body"> 11 <div class="row justify-content-between align-items-center"> 12 <div class="col-auto col-sm-auto"> 13 <div class="btn cle_btn" id="modalPassShortName"><#if (passName.getData())??>${passName.getData()}</#if></div> 14 </div> 15 <div class="col-auto col-sm-auto pl-lg-0"> 16 <span class="sale-price" id="modalPassPrice">$${json.pricebook?replace(",", "")?number?string("#,##0.00")}</span> 17 </div> 18 </div> 19 <div class="small_heading_area" id="modalPassFullName"><#if (title.getData())??>${title.getData()}</#if></div> 20 <p><#if (unlimitedText.getData())??>${unlimitedText.getData()}</#if>:</p> 21 <ul class="common-list disc_list paddNone"> 22 <#if (benefits.getData())??> 23 ${benefits.getData()} 24</#if> 25 </ul> 26 </div> 27 <div class="btn-float"> 28 <div class="premium-cle-pass cart-item"> 29 <input type="hidden" class="product-id" value="${productId}"> 30 <input type="hidden" class="product-name" value="${json.name}"> 31 <input type="hidden" class="pass-value" value="${passName.getData()}"> 32 <input type="hidden" class="product-price" value="${json.pricebook}"> 33 <input type="hidden" class="passAccessLengthMonths" value="${json.passAccessLengthMonths}"> 34 <input type="hidden" class="product-pass" value="family"> 35 <input type="hidden" class="product-expireDate" value=""> 36 37 <button 38 class="btn pc_theme_btn btn-primary btn_maxwidth_xxl_large add-to-cart" 39 aria-label="Buy Now" 40 data-redirect-checkout="true" 41 > 42 <span class="material-symbols-rounded"> shopping_cart </span> 43 Buy Now 44 </button> 45 </div> 46 </div> 47 </div> 48 49 <script> 50$(document).on('click', '.add-to-cart', function () { 51 let monthsToAdd = parseInt($(".passAccessLengthMonths").val()); 52 let currentDate = new Date(); 53 let futureDate = new Date(currentDate); 54 // Add months dynamically 55 futureDate.setMonth(futureDate.getMonth() + monthsToAdd); 56 57 // Handle overflow (e.g., Jan 31 + 1 month) 58 if (futureDate.getDate() !== currentDate.getDate()) { 59 futureDate.setDate(0); // last day of previous month 60 } 61 62 // Format as MM/DD/YYYY 63 function formatDateMMDDYYYY(date) { 64 let mm = String(date.getMonth() + 1).padStart(2, '0'); 65 let dd = String(date.getDate()).padStart(2, '0'); 66 let yyyy = date.getFullYear(); 67 return mm + '/' + dd + '/' + yyyy; 68 } 69 $(".product-expireDate").val(formatDateMMDDYYYY(futureDate)); 70 71 // Then close the modal 72 $('.single_option').modal('hide'); 73 }); 74</script> The following has evaluated to null or missing:
==> barbriRedisCacheAPI.get("barbripass", productId) [in template "20096#20121#2885355" at line 5, column 77]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: response = barbriRedisCacheAPI.get("b... [in template "20096#20121#2885355" at line 5, column 66]
---- 1<#assign productId = ''/> 2 <#if (productID.getData())?? && productID.getData()?has_content> 3 <#assign productId = productID.getData() /> 4 </#if> 5 <#assign response = barbriRedisCacheAPI.get("barbripass", productId) 6 json = jsonFactoryUtil.createJSONObject(response) 7 /> 8 9 <div class="card"> 10 <div class="card-body"> 11 <div class="row justify-content-between align-items-center"> 12 <div class="col-auto col-sm-auto"> 13 <div class="btn cle_btn" id="modalPassShortName"><#if (passName.getData())??>${passName.getData()}</#if></div> 14 </div> 15 <div class="col-auto col-sm-auto pl-lg-0"> 16 <span class="sale-price" id="modalPassPrice">$${json.pricebook?replace(",", "")?number?string("#,##0.00")}</span> 17 </div> 18 </div> 19 <div class="small_heading_area" id="modalPassFullName"><#if (title.getData())??>${title.getData()}</#if></div> 20 <p><#if (unlimitedText.getData())??>${unlimitedText.getData()}</#if>:</p> 21 <ul class="common-list disc_list paddNone"> 22 <#if (benefits.getData())??> 23 ${benefits.getData()} 24</#if> 25 </ul> 26 </div> 27 <div class="btn-float"> 28 <div class="premium-cle-pass cart-item"> 29 <input type="hidden" class="product-id" value="${productId}"> 30 <input type="hidden" class="product-name" value="${json.name}"> 31 <input type="hidden" class="pass-value" value="${passName.getData()}"> 32 <input type="hidden" class="product-price" value="${json.pricebook}"> 33 <input type="hidden" class="passAccessLengthMonths" value="${json.passAccessLengthMonths}"> 34 <input type="hidden" class="product-pass" value="family"> 35 <input type="hidden" class="product-expireDate" value=""> 36 37 <button 38 class="btn pc_theme_btn btn-primary btn_maxwidth_xxl_large add-to-cart" 39 aria-label="Buy Now" 40 data-redirect-checkout="true" 41 > 42 <span class="material-symbols-rounded"> shopping_cart </span> 43 Buy Now 44 </button> 45 </div> 46 </div> 47 </div> 48 49 <script> 50$(document).on('click', '.add-to-cart', function () { 51 let monthsToAdd = parseInt($(".passAccessLengthMonths").val()); 52 let currentDate = new Date(); 53 let futureDate = new Date(currentDate); 54 // Add months dynamically 55 futureDate.setMonth(futureDate.getMonth() + monthsToAdd); 56 57 // Handle overflow (e.g., Jan 31 + 1 month) 58 if (futureDate.getDate() !== currentDate.getDate()) { 59 futureDate.setDate(0); // last day of previous month 60 } 61 62 // Format as MM/DD/YYYY 63 function formatDateMMDDYYYY(date) { 64 let mm = String(date.getMonth() + 1).padStart(2, '0'); 65 let dd = String(date.getDate()).padStart(2, '0'); 66 let yyyy = date.getFullYear(); 67 return mm + '/' + dd + '/' + yyyy; 68 } 69 $(".product-expireDate").val(formatDateMMDDYYYY(futureDate)); 70 71 // Then close the modal 72 $('.single_option').modal('hide'); 73 }); 74</script> Related Courses
Learn Classroom Sync
Available On-Demand
Human Trafficking in Employment: At-Risk Populations, Red Flags, Legal Protections, Employer Accountability
Wednesday, June 24, 2026
1:00 PM ET/10:00 AM PT
Employee Handbook Best Practices in 2026
Wednesday, July 15, 2026
1:00 PM ET/10:00 AM PT
Voluntary Separation Programs: Key Regulatory Considerations; Employer Pros and Cons; Design and Implementation
Thursday, June 25, 2026
1:00 PM ET/10:00 AM PT
Recommended Resources
Building Your Book: Strategies to Secure Long-Term Success
- Business & Professional Skills
- Career Advancement
- Talent Development