diff --git a/eth-escape-headspace.php b/eth-escape-headspace.php
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..edb9945bc2fcb9b539ebbaa2dae8f1bb2a1f4ee7 100644
--- a/eth-escape-headspace.php
+++ b/eth-escape-headspace.php
@@ -0,0 +1,138 @@
+<?php
+/*
+Plugin Name: ETH Escape HeadSpace2
+Plugin URI: https://ethitter.com/plugins/
+Description: Output existing HeadSpace2 data without the original plugin. Allows HeadSpace2 (no longer maintained) to be deactivated without impactacting legacy content.
+Author: Erick Hitter
+Version: 0.1
+Author URI: https://ethitter.com/
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+class ETH_Escape_HeadSpace2 {
+	/**
+	 * Singleton
+	 */
+	private static $instance = null;
+
+	/**
+	 * Instantiate singleton
+	 */
+	public static function get_instance() {
+		if ( ! is_a( self::$instance, __CLASS__ ) ) {
+			self::$instance = new self;
+		}
+
+		return self::$instance;
+	}
+
+	/**
+	 * Class properties
+	 */
+	private $hs_string_keys = array(
+		'_headspace_description',
+		'_headspace_metakey',
+	);
+
+	private $hs_robots_keys = array(
+		'_headspace_noindex',
+		'_headspace_nofollow',
+		'_headspace_noarchive',
+		'_headspace_noodp',
+		'_headspace_noydir',
+	);
+
+	private $hs_keys_to_meta_names = array(
+		'_headspace_description' => 'description',
+		'_headspace_metakey'     => 'keywords',
+	);
+
+	/**
+	 * Register plugin's hooks
+	 *
+	 * @return null
+	 */
+	private function __construct() {
+		add_action( 'wp_head', array( $this, 'action_wp_head' ) );
+	}
+
+	/**
+	 *
+	 */
+	public function action_wp_head() {
+		// Applies only to individual post objects
+		if ( ! is_singular() ) {
+			return;
+		}
+
+		// Check for HS data
+		$hs_data = array();
+
+		foreach ( array_merge( $this->hs_string_keys, $this->hs_robots_keys ) as $hs_key ) {
+			$value = get_post_meta( get_the_ID(), $hs_key, true );
+
+			if ( ! empty( $value ) ) {
+				$hs_data[ $hs_key ] = $value;
+			}
+		}
+
+		// Bail if no HS data exists for this post
+		if ( empty( $hs_data ) ) {
+			return;
+		}
+
+		// Build output
+		echo "\n<!-- Escape HeadSpace2 by Erick Hitter; ethitter.com -->\n";
+
+		// Handle basic, string-containing keys
+		foreach ( $hs_data as $hs_key => $hs_value ) {
+			switch( $hs_key ) {
+				case '_headspace_description' :
+				case '_headspace_metakey' :
+					echo '<meta name="' . esc_attr( $this->hs_keys_to_meta_names[ $hs_key ] ) . '" content="' . esc_attr( $hs_value ) . '" />' . "\n";
+					break;
+
+				default :
+					continue;
+					break;
+			}
+		}
+
+		// Handle robots key, which is build from several meta keys
+		$robots = array();
+
+		foreach ( $this->hs_robots_keys as $hs_robot_key ) {
+			if ( isset( $hs_data[ $hs_robot_key] ) ) {
+				$robots[] = str_replace( '_headspace_', '', $hs_robot_key );
+			}
+		}
+
+		if ( ! empty( $robots ) ) {
+			if ( 1 === count( $robots ) && in_array( 'noindex', $robots ) ) {
+				$robots[] = 'follow';
+			}
+
+			$robots = implode( ',', $robots );
+
+			echo '<meta name="robots" content="' . esc_attr( $robots ) . '" />' . "\n";
+		}
+
+		// Mark end of output
+		echo "<!-- Escape HeadSpace2 -->\n";
+	}
+}
+
+ETH_Escape_HeadSpace2::get_instance();
diff --git a/readme.txt b/readme.txt
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..66e7a2a1575c53cdc0b3c48cdb1d84d3ee8f9757 100644
--- a/readme.txt
+++ b/readme.txt
@@ -0,0 +1,33 @@
+=== ETH Escape HeadSpace2 ===
+Contributors: ethitter
+Donate link: https://ethitter.com/
+Tags: seo, meta tags
+Requires at least: 4.4
+Tested up to: 4.4
+Stable tag: 0.1
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+Output existing HeadSpace2 data without the original plugin. Deactivate HeadSpace2 (no longer maintained) without impactacting legacy content.
+
+== Description ==
+
+Outputs data stored in HeadSpace2 post meta without requiring HeadSpace2. This allows one to remove the now-unmaintained HeadSpace2 plugin without losing the data associated with legacy content.
+
+Note that many current SEO plugins for WordPress also handle migration, but since I don't use any such plugins on my network, I created this alternative.
+
+== Installation ==
+
+1. Upload the plugin files to the `/wp-content/plugins/eth-escape-headspace` directory, or install the plugin through the WordPress plugins screen directly.
+1. Activate the plugin through the 'Plugins' screen in WordPress
+
+== Frequently Asked Questions ==
+
+= Can I modify existing data using this plugin? =
+
+No. If you need to update entries, reinstall HeadSpace2 or modify the values directly in the database.
+
+== Changelog ==
+
+= 0.1 =
+* Initial release