Skip to main content
Dismiss
IP.com applications will be updated on Sunday, February 5, from 10am-1pm ET. You may experience brief service interruptions during that time.
News

Who Owns IP? 3 Recent Employer vs Employee Disputes

When Spotify’s year-in-review feature, Spotify Wrapped, launched in late 2021, our friends’ and families’ most-listened-to songs appeared in our social media feeds alongside a viral article titled, “The Intern Who Created Spotify Wrapped’s Story Format Never Got Her Due.”

IP is a huge part of the music industry, from songwriting to recording technology to marketing initiatives like Spotify Wrapped. This headline played to the average music listener’s ignorance of how intellectual property rights are assigned and protected. For those of us working with IP every day, the fact that an intern’s idea wasn’t directly attributed to them isn’t surprising. Even Jewel Ham, the Spotify intern featured in the article, recognizes this as the reality of working for a corporation. It takes many minds developing dozens of iterations to bring innovative ideas to market, no matter what industry you work in.

Who owns intellectual property?

IP is a concept, often referred to as a “creation of the mind,” rather than a physical property. This characteristic makes IP ownership a complex topic. Employees’ innovations are generally owned by the company that employs them—innovative employers ensure it. An employee and employer come to an agreement on these terms (and other similar legal protections) with an employment contract. Even without one, an employer owns an employee’s invention(s) if the employee was hired specifically to innovate. There is also what’s known as “shop rights,” which allow a company to use an employee’s intellectual property in exchange for providing the resources (facilities, materials, etc.) required to create the novel product or process.

By contrast, founders and consultants often keep ownership of their IP, unless a contract specifically notes otherwise.

IP Ownership Disputes in the News

IP ownership disputes between employees and employers rarely make headlines in the way that Jewel Ham’s story did. However, it’s far from the only story of this kind this year.

Bio-Rad vs 10X Genomics

10X Genomics sued Bio-Rad for infringing on three of its patents. While Bio-Rad had multiple defenses (none of which were considered valid by the ITC or CAFC), one touched on employee contributions to the innovations in question. 10X Genomics’ founders were, at one point, Bio-Rad employees. Bio-Rad argued that the patents held by 10X Genomics were actually invented, at least in part, while the employees worked for Bio-Rad and therefore, the company was a co-owner of the patents in question. However, the court decided that enough time passed between the individuals’ Bio-Rad employment and the invention’s conception date that this was an invalid claim.

Aeon Must Die!

The video game Aeon Must Die! launched earlier this year, despite claims from former employees that the game’s corporate owners (Limestone Games and Focus Entertainment) don’t hold full rights to the IP used in the game and its trailer. This situation, which involves claims of missing payments as well as Limestone Game’s co-founder, is an excellent example of how messy IP ownership can be.

[gravityforms id="35" title="false" ajax="true"]
<script type="text/javascript">var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}});</script> <div class='gf_browser_unknown gform_wrapper gravity-theme' id='gform_wrapper_35' ><div id='gf_35' class='gform_anchor' tabindex='-1'></div> <div class='gform_heading'> <span class='gform_description'></span> </div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_35' id='gform_35' action='/blog/who-owns-ip-3-recent-employer-vs-employee-disputes/#gf_35' > <div class='gform_body gform-body'><div id='gform_fields_35' class='gform_fields top_label form_sublabel_below description_below'><div id="field_35_1" class="gfield gfield_contains_required field_sublabel_below field_description_below hidden_label gfield_visibility_visible" data-js-reload="field_35_1"><label class='gfield_label' for='input_35_1' >Email<span class="gfield_required"><span class="gfield_required gfield_required_text">(Required)</span></span></label><div class='ginput_container ginput_container_email'> <input name='input_1' id='input_35_1' type='text' value='' class='large' placeholder='Email Address' aria-required="true" aria-invalid="false" /> </div></div><div id="field_35_3" class="gfield gsection field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_35_3"><h3 class="gsection_title"></h3></div><div id="field_35_2" class="gfield gfield--width-full gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_35_2"><div class='ginput_container ginput_container_text'><input name='input_2' id='input_35_2' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></div><div id="field_35_4" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_35_4"><label class='gfield_label' for='input_35_4' >Phone</label><div class='ginput_container'><input name='input_4' id='input_35_4' type='text' value='' /></div><div class='gfield_description' id='gfield_description_35_4'>This field is for validation purposes and should be left unchanged.</div></div></div></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_35' class='gform_button button gform-button--width-full' value='Subscribe' onclick='if(window["gf_submitting_35"]){return false;} window["gf_submitting_35"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_35"]){return false;} window["gf_submitting_35"]=true; jQuery("#gform_35").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=35&amp;title=&amp;description=1&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_35' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='35' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_35' value='WyJbXSIsImE1MjY5YjVkNzQ1NzViOTRhOWI5NzU4MzBhMWRjYjNhIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_35' id='gform_target_page_number_35' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_35' id='gform_source_page_number_35' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_35' id='gform_ajax_frame_35' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script type="text/javascript"> gform.initializeOnLoaded( function() {gformInitSpinner( 35, 'https://ip.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_35').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_35');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_35').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_35').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_35').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_35').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_35').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_35').val();gformInitSpinner( 35, 'https://ip.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [35, current_page]);window['gf_submitting_35'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_35').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_35').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [35]);window['gf_submitting_35'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_35').text());}, 50);}else{jQuery('#gform_35').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [35, current_page]);} );} ); </script>