diff --git a/src/Controllers/LockupsController.php b/src/Controllers/LockupsController.php
index 8674010ea228a16e52468315cb7cd39bb23aa549..a0b1a2379606db843e77d47de5ae2f6abb8f5f52 100644
--- a/src/Controllers/LockupsController.php
+++ b/src/Controllers/LockupsController.php
@@ -10,44 +10,30 @@ class LockupsController extends Controller {
 
 	const LOCKUP_VERSION = '1.4';
 
-	public static function createAction() {
-		\Core::$breadcrumbs[] = array('text' => 'Create Lockup');
-
-		$context = new \stdClass;
-		$context->lockup = new Lockup;
-		$context->approvers = User::find('all', array('conditions' => array('role' => 'approver')));
-		return self::renderView('new_lockup', $context);
-	}
-
-	public static function editAction($get_params) {
-		self::requireAuth();
-		\Core::$breadcrumbs[] = array('text' => 'Edit Lockup');
-
-		if (empty($get_params['id'])) {
-			\Core::notFound();
+	private static function checkTextFieldLength($params, $field, $max_length) {
+		if (strlen($params[$field]) > $max_length) {
+			self::flashNotice(parent::NOTICE_LEVEL_ERROR, 'Invalid Text', ucwords(implode(' ',explode('_', $field))) . ' must be ' . $max_length . ' characters or fewer.');
+			return FALSE;
 		}
 
-		$id = $get_params['id'];
-		try {
-			$lockup = Lockup::find($id);
-		} catch (\ActiveRecord\RecordNotFound $e) {
-			\Core::notFound('That lockup could not be found.');
+		if (empty($params[$field])) {
+			self::flashNotice(parent::NOTICE_LEVEL_ERROR, 'Invalid Text', ucwords(implode(' ',explode('_', $field))) . ' must not be empty.');
+			return FALSE;
 		}
 
-		# the user must have submitted the lockup or be an admin to edit
-		if ($lockup->user_id != \Auth::$current_user->id && !(\Auth::$current_user->isAdmin())) {
-			self::flashNotice(parent::NOTICE_LEVEL_ERROR, 'Unauthorized', 'Sorry, you are not allowed to edit that lockup.');
-			\Core::redirect('/lockups/manage/');
-		}
+		return TRUE;
+	}
 
-		# this lockup must not be generated
-		if ($lockup->isGenerated()) {
-			self::flashNotice(parent::NOTICE_LEVEL_ERROR, 'Cannot Edit', 'Sorry, this lockup has been generated and cannot be edited. Please create a new lockup.');
-			\Core::redirect('/lockups/manage/');
-		}
+	public static function createAction() {
+		\Core::$breadcrumbs[] = array('text' => 'Create Lockup');
 
 		$context = new \stdClass;
-		$context->lockup = $lockup;
+		if (isset($_SESSION['create_lockup'])) {
+			$context->lockup = $_SESSION['create_lockup'];
+			unset($_SESSION['create_lockup']);
+		} else {
+			$context->lockup = new Lockup;
+		}
 		$context->approvers = User::find('all', array('conditions' => array('role' => 'approver')));
 		return self::renderView('new_lockup', $context);
 	}
@@ -73,8 +59,7 @@ class LockupsController extends Controller {
 
 		$svg_text = SVG::createPreviewLockup($post_params['type'], $lockup)->svg_text;
 		$vert_svg_text = SVG::createPreviewLockup($post_params['type'], $lockup, 'vert')->svg_text;
-		
-		$model = Lockup::create(array(
+		$model = new Lockup(array(
 			'organization' => 				strtoupper($post_params['organization']),
 			'organization_second_line' => 	strtoupper($post_params['organization_second_line']),
 			'subject' => 					$post_params['subject'],
@@ -96,9 +81,112 @@ class LockupsController extends Controller {
 			'version' => 					NULL
 		));
 
+		$valid = TRUE;
+		# validate the lengths of fields
+		switch ($lockup->style) {
+			case 'org_only':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				break;
+			case 'org_two_line':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization_second_line', 30);
+				break;
+			case 'org_subject':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject', 40);
+				break;
+			case 'org_subject_1_2':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject', 40);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject_second_line', 40);
+				break;
+			case 'org_subject_2_1':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization_second_line', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject', 40);
+				break;
+			case 'org_subject_2_2':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization_second_line', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject', 40);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject_second_line', 40);
+				break;
+			case 'acronym':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym', 10);
+				break;
+			case 'acronym_subject':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym', 10);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym_subject', 15);
+				break;
+			case 'acronym_subject_2_1':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym', 10);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym_second_line', 10);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym_subject', 15);
+				break;
+			case 'acronym_social':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym', 10);
+				break;
+			case 'extension':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'extension_county', 40);
+				break;
+			case 'extension_4h':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'extension_county', 40);
+				break;
+			default;
+				self::flashNotice(parent::NOTICE_LEVEL_ERROR, 'Invalid Style', 'Somehow you selected an invalid style. Please select one and try again.');
+				$valid = FALSE;
+				break;
+		}
+
+		if (!$valid) {
+			# store this lockup in the session so it can be seen on the page
+			$_SESSION['create_lockup'] = $model;
+			\Core::redirect('/lockups/create/');
+		}
+
+		$model->save();
 		\Core::redirect($model->getPreviewURL());
 	}
 
+	public static function editAction($get_params) {
+		self::requireAuth();
+		\Core::$breadcrumbs[] = array('text' => 'Edit Lockup');
+
+		if (empty($get_params['id'])) {
+			\Core::notFound();
+		}
+
+		$id = $get_params['id'];
+		try {
+			$lockup = Lockup::find($id);
+		} catch (\ActiveRecord\RecordNotFound $e) {
+			\Core::notFound('That lockup could not be found.');
+		}
+
+		# the user must have submitted the lockup or be an admin to edit
+		if ($lockup->user_id != \Auth::$current_user->id && !(\Auth::$current_user->isAdmin())) {
+			self::flashNotice(parent::NOTICE_LEVEL_ERROR, 'Unauthorized', 'Sorry, you are not allowed to edit that lockup.');
+			\Core::redirect('/lockups/manage/');
+		}
+
+		# this lockup must not be generated
+		if ($lockup->isGenerated()) {
+			self::flashNotice(parent::NOTICE_LEVEL_ERROR, 'Cannot Edit', 'Sorry, this lockup has been generated and cannot be edited. Please create a new lockup.');
+			\Core::redirect('/lockups/manage/');
+		}
+
+		$context = new \stdClass;
+		
+		if (isset($_SESSION['edit_lockup'])) {
+			$context->lockup = $_SESSION['edit_lockup'];
+			unset($_SESSION['edit_lockup']);
+		} else {
+			$context->lockup = $lockup;
+		}
+		$context->approvers = User::find('all', array('conditions' => array('role' => 'approver')));
+		return self::renderView('new_lockup', $context);
+	}
+
 	public static function postEditAction($post_params) {
 		self::requireAuth();
 
@@ -143,28 +231,93 @@ class LockupsController extends Controller {
 		$svg_text = SVG::createPreviewLockup($post_params['type'], $lockup)->svg_text;
 		$vert_svg_text = SVG::createPreviewLockup($post_params['type'], $lockup, 'vert')->svg_text;
 		
-		$lockup_model->update_attributes(array(
-			'organization' => 				strtoupper($post_params['organization']),
-			'organization_second_line' => 	strtoupper($post_params['organization_second_line']),
-			'subject' => 					$post_params['subject'],
-			'subject_second_line' => 		$post_params['subject_second_line'],
-			'acronym' => 					strtoupper($post_params['acronym']),
-			'acronym_second_line' => 		strtoupper($post_params['acronym_second_line']),
-			'acronym_subject' => 			strtoupper($post_params['acronym_subject']),
-			'extension_county' =>	 		$post_params['extension_county'],
-			'style' => 						$post_params['type'],
-			'user_id' => 					\Auth::$current_user->id,
-			'date_created' => 				date('Y-m-d H:i:s'),
-			'status' => 					Lockup::AWAITING_APPROVAL,
-			'creative_status' =>			Lockup::AWAITING_APPROVAL,
-			'preview_svg' => 				$svg_text,
-			'vert_preview_svg' => 			$vert_svg_text,
-			'approver_id' => 				empty($post_params['approver']) ? NULL : $post_params['approver'],
-			'file_organization' =>			$post_params['file_organization'],
-			'file_organization_acronym' =>  $post_params['file_organization_acronym'],
-			'file_department' => 			$post_params['file_department'],
-			'file_department_acronym' =>	$post_params['file_department_acronym']
-		));
+		$lockup_model->organization = 				strtoupper($post_params['organization']);
+		$lockup_model->organization_second_line = 	strtoupper($post_params['organization_second_line']);
+		$lockup_model->subject = 					$post_params['subject'];
+		$lockup_model->subject_second_line = 		$post_params['subject_second_line'];
+		$lockup_model->acronym = 					strtoupper($post_params['acronym']);
+		$lockup_model->acronym_second_line = 		strtoupper($post_params['acronym_second_line']);
+		$lockup_model->acronym_subject = 			strtoupper($post_params['acronym_subject']);
+		$lockup_model->extension_county =	 		$post_params['extension_county'];
+		$lockup_model->style = 						$post_params['type'];
+		$lockup_model->user_id = 					\Auth::$current_user->id;
+		$lockup_model->date_created = 				date('Y-m-d H:i:s');
+		$lockup_model->status = 					Lockup::AWAITING_APPROVAL;
+		$lockup_model->creative_status =			Lockup::AWAITING_APPROVAL;
+		$lockup_model->preview_svg = 				$svg_text;
+		$lockup_model->vert_preview_svg = 			$vert_svg_text;
+		$lockup_model->approver_id = 				empty($post_params['approver']) ? NULL : $post_params['approver'];
+		$lockup_model->file_organization =			$post_params['file_organization'];
+		$lockup_model->file_organization_acronym =  $post_params['file_organization_acronym'];
+		$lockup_model->file_department = 			$post_params['file_department'];
+		$lockup_model->file_department_acronym =	$post_params['file_department_acronym'];
+
+		$valid = TRUE;
+		# validate the lengths of fields
+		switch ($lockup_model->style) {
+			case 'org_only':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				break;
+			case 'org_two_line':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization_second_line', 30);
+				break;
+			case 'org_subject':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject', 40);
+				break;
+			case 'org_subject_1_2':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject', 40);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject_second_line', 40);
+				break;
+			case 'org_subject_2_1':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization_second_line', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject', 40);
+				break;
+			case 'org_subject_2_2':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'organization_second_line', 30);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject', 40);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'subject_second_line', 40);
+				break;
+			case 'acronym':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym', 10);
+				break;
+			case 'acronym_subject':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym', 10);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym_subject', 15);
+				break;
+			case 'acronym_subject_2_1':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym', 10);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym_second_line', 10);
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym_subject', 15);
+				break;
+			case 'acronym_social':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'acronym', 10);
+				break;
+			case 'extension':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'extension_county', 40);
+				break;
+			case 'extension_4h':
+				$valid = $valid && self::checkTextFieldLength($post_params, 'extension_county', 40);
+				break;
+			default;
+				self::flashNotice(parent::NOTICE_LEVEL_ERROR, 'Invalid Style', 'Somehow you selected an invalid style. Please select one and try again.');
+				$valid = FALSE;
+				break;
+		}
+
+		if (!$valid) {
+			# store this lockup in the session so it can be seen on the page
+			$_SESSION['edit_lockup'] = $lockup_model;
+			\Core::redirect($lockup_model->getEditURL());
+		}
+
+		$model->save();
+		\Core::redirect($model->getPreviewURL());
+
 
 		\Core::redirect($lockup_model->getPreviewURL());
 	}
diff --git a/src/Views/new_lockup.php b/src/Views/new_lockup.php
index bd757d2e4a72f5c8667bf81f635140b1c2ffc6f3..d58002ae5acba444308a1785bb0400e43aced72c 100644
--- a/src/Views/new_lockup.php
+++ b/src/Views/new_lockup.php
@@ -2,7 +2,7 @@
 	<div class="wdn-inner-wrapper">
         <h3 class="page-title">Create New Lockup</h3>
 
-        <form method="POST" action="">
+        <form id="create-lockup" method="POST" action="">
             <input type="hidden" id="id" name="id" value="<?php echo $context->lockup->id; ?>">
             <?php if (\Auth::$current_user === NULL): ?>
                 <fieldset>
@@ -163,8 +163,16 @@
                 </div>
             </fieldset>
 
-            <fieldset>
+            <fieldset id="lockup-text">
                 <legend>Lockup Text</legend>
+                <div id="text-notice" class="wdn_notice alert" style="display: none;" tab-index="-1">
+                    <div class="message">
+                        <h4>Invalid Text Entered</h4>
+                        <div class="message-content"></div>
+                    </div>
+                </div>
+
+
                 <div id="organization-field">
                     <label for="organization">Organization</label>
                     <div class="tooltip wdn-icon-info italic hang-right">
@@ -172,7 +180,7 @@
                             30 characters max
                         </div>
                     </div>
-                    <input type="text" name="organization" id="organization" value="<?php echo $context->lockup->organization; ?>">
+                    <input type="text" name="organization" id="organization" maxlength="30" value="<?php echo $context->lockup->organization; ?>">
                 </div>
                 <div id="organization-second-line-field" style="display: none;">
                     <label for="organization-second-line">Organization Second Line</label>
@@ -181,7 +189,7 @@
                             30 characters max
                         </div>
                     </div>
-                    <input type="text" name="organization_second_line" id="organization-second-line">
+                    <input type="text" name="organization_second_line" maxlength="30" id="organization-second-line">
                 </div>
                 <div id="subject-field" style="display: none;">
                     <label for="subject">Subject</label>
@@ -190,7 +198,7 @@
                             40 characters max
                         </div>
                     </div>
-                    <input type="text" name="subject" id="subject" value="<?php echo $context->lockup->subject; ?>">
+                    <input type="text" name="subject" id="subject" maxlength="40" value="<?php echo $context->lockup->subject; ?>">
                     <br>
                 </div>
                 <div id="subject-second-line-field" style="display: none;">
@@ -200,7 +208,7 @@
                             40 characters max
                         </div>
                     </div>
-                    <input type="text" name="subject_second_line" id="subject-second-line" value="<?php echo $context->lockup->subject_second_line; ?>">
+                    <input type="text" name="subject_second_line" maxlength="40" id="subject-second-line" value="<?php echo $context->lockup->subject_second_line; ?>">
                     <br>
                 </div>
                 <div id="acronym-field" style="display: none;">
@@ -210,7 +218,7 @@
                             10 characters max
                         </div>
                     </div>
-                    <input type="text" name="acronym" id="acronym" value="<?php echo $context->lockup->acronym; ?>">
+                    <input type="text" name="acronym" id="acronym" maxlength="10" value="<?php echo $context->lockup->acronym; ?>">
                     <br>
                 </div>
                 <div id="acronym-second-line-field" style="display: none;">
@@ -220,7 +228,7 @@
                             10 characters max
                         </div>
                     </div>
-                    <input type="text" name="acronym_second_line" id="acronym-second-line" value="<?php echo $context->lockup->acronym_second_line; ?>">
+                    <input type="text" name="acronym_second_line" id="acronym-second-line" maxlength="10" value="<?php echo $context->lockup->acronym_second_line; ?>">
                     <br>
                 </div>
                 <div id="acronym-subject-field" style="display: none;">
@@ -230,7 +238,7 @@
                             15 characters max
                         </div>
                     </div>
-                    <input type="text" name="acronym_subject" id="acronym-subject" value="<?php echo $context->lockup->acronym_subject; ?>">
+                    <input type="text" name="acronym_subject" id="acronym-subject" maxlength="15" value="<?php echo $context->lockup->acronym_subject; ?>">
                     <br>
                 </div>
                 <div id="extension-county-field" style="display: none;">
@@ -240,7 +248,7 @@
                             40 characters max
                         </div>
                     </div>
-                    <input type="text" name="extension_county" id="extension-county" value="<?php echo $context->lockup->extension_county; ?>">
+                    <input type="text" name="extension_county" id="extension-county" maxlength="40" value="<?php echo $context->lockup->extension_county; ?>">
                     <br>
                 </div>
             </fieldset>
@@ -293,8 +301,41 @@
 </div>
 
 <script type="text/javascript">
+function ucwords (str) {
+    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
+        return $1.toUpperCase();
+    });
+}
+
 require(['jquery'], function ($) {
     $(document).ready(function () {
+        $('#create-lockup').submit(function (submit) {
+            var valid = true;
+            var messages = '';
+
+            // look at all text fields that are visible inside lockup text
+            $('#lockup-text input').each(function(index, input) {
+                if ($(input).is(':visible')) {
+                    if ($(input).val().length > parseInt($(input).attr('maxlength'))) {
+                        messages = messages + ucwords($(input).attr('id').split('-').join(' ')) + ' must be ' + $(input).attr('maxlength') + ' characters or fewer.<br>';
+                        valid = false;
+                    }
+                }
+            });
+
+            if (!valid) {
+                submit.preventDefault();
+                $('#text-notice').find('.message-content').html(messages);
+                $('#text-notice').show();
+                window.location.hash = 'text-notice';
+            }
+        });
+
+        // temporary hack, until framework is improved to allow for closeable notices that do not remove HTML
+        $('#text-notice').click(function (click) {
+            $(this).fadeOut();
+        });
+
         $('input[name=type]').change(function (change) {
             if ($('#type-org-only').is(':checked')) {
                 $('#organization-field').show();