diff --git a/common/drawing_sheet/ds_draw_item.cpp b/common/drawing_sheet/ds_draw_item.cpp
index 1f6fb53799..700011b62a 100644
--- a/common/drawing_sheet/ds_draw_item.cpp
+++ b/common/drawing_sheet/ds_draw_item.cpp
@@ -199,6 +199,9 @@ const BOX2I DS_DRAW_ITEM_TEXT::GetApproxBBox()
     case GR_TEXT_H_ALIGN_LEFT:                                           break;
     case GR_TEXT_H_ALIGN_CENTER: bbox.Offset( -bbox.GetWidth() / 2, 0 ); break;
     case GR_TEXT_H_ALIGN_RIGHT:  bbox.Offset( -bbox.GetWidth(),     0 ); break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     switch( GetAttributes().m_Valign )
@@ -206,6 +209,9 @@ const BOX2I DS_DRAW_ITEM_TEXT::GetApproxBBox()
     case GR_TEXT_V_ALIGN_TOP:                                             break;
     case GR_TEXT_V_ALIGN_CENTER: bbox.Offset( 0, -bbox.GetHeight() / 2 ); break;
     case GR_TEXT_V_ALIGN_BOTTOM: bbox.Offset( 0, -bbox.GetHeight()     ); break;
+    case GR_TEXT_V_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     bbox.Inflate( attrs.m_Size.x, attrs.m_Size.y / 2 );
diff --git a/common/eda_text.cpp b/common/eda_text.cpp
index 766066cedf..19b4a9d5db 100644
--- a/common/eda_text.cpp
+++ b/common/eda_text.cpp
@@ -649,6 +649,10 @@ BOX2I EDA_TEXT::GetTextBox( int aLine, bool aInvertY ) const
         if( !IsMirrored() )
             bbox.SetX( bbox.GetX() - ( bbox.GetWidth() - italicOffset ) );
         break;
+
+    case GR_TEXT_H_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     switch( GetVertJustify() )
@@ -665,6 +669,10 @@ BOX2I EDA_TEXT::GetTextBox( int aLine, bool aInvertY ) const
         bbox.SetY( bbox.GetY() - bbox.GetHeight() );
         bbox.Offset( 0, fudgeFactor );
         break;
+
+    case GR_TEXT_V_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     bbox.Normalize();       // Make h and v sizes always >= 0
@@ -751,6 +759,10 @@ void EDA_TEXT::GetLinePositions( std::vector<VECTOR2I>& aPositions, int aLineCou
         case GR_TEXT_V_ALIGN_BOTTOM:
             pos.y -= ( aLineCount - 1 ) * offset.y;
             break;
+
+        case GR_TEXT_V_ALIGN_INDETERMINATE:
+            wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+            break;
         }
     }
 
diff --git a/common/font/font.cpp b/common/font/font.cpp
index 810b797368..a4012399e0 100644
--- a/common/font/font.cpp
+++ b/common/font/font.cpp
@@ -217,6 +217,9 @@ void FONT::getLinePositions( const wxString& aText, const VECTOR2I& aPosition,
     case GR_TEXT_V_ALIGN_TOP:                            break;
     case GR_TEXT_V_ALIGN_CENTER: offset.y -= height / 2; break;
     case GR_TEXT_V_ALIGN_BOTTOM: offset.y -= height;     break;
+    case GR_TEXT_V_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     for( int i = 0; i < lineCount; i++ )
@@ -228,9 +231,12 @@ void FONT::getLinePositions( const wxString& aText, const VECTOR2I& aPosition,
 
         switch( aAttrs.m_Halign )
         {
-        case GR_TEXT_H_ALIGN_LEFT:                                   break;
-        case GR_TEXT_H_ALIGN_CENTER: lineOffset.x = -lineSize.x / 2; break;
-        case GR_TEXT_H_ALIGN_RIGHT:  lineOffset.x = -( lineSize.x + offset.x );     break;
+        case GR_TEXT_H_ALIGN_LEFT:                                              break;
+        case GR_TEXT_H_ALIGN_CENTER: lineOffset.x = -lineSize.x / 2;            break;
+        case GR_TEXT_H_ALIGN_RIGHT:  lineOffset.x = -( lineSize.x + offset.x ); break;
+        case GR_TEXT_H_ALIGN_INDETERMINATE:
+            wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+            break;
         }
 
         aPositions.push_back( aPosition + lineOffset );
diff --git a/common/gal/opengl/opengl_gal.cpp b/common/gal/opengl/opengl_gal.cpp
index 4ae2241c2c..1de70b0465 100644
--- a/common/gal/opengl/opengl_gal.cpp
+++ b/common/gal/opengl/opengl_gal.cpp
@@ -1598,6 +1598,10 @@ void OPENGL_GAL::BitmapText( const wxString& aText, const VECTOR2I& aPosition,
         //if( IsTextMirrored() )
         //Translate( VECTOR2D( -textSize.x, 0 ) );
         break;
+
+    case GR_TEXT_H_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     switch( GetVerticalJustify() )
@@ -1614,6 +1618,10 @@ void OPENGL_GAL::BitmapText( const wxString& aText, const VECTOR2I& aPosition,
         Translate( VECTOR2D( 0, -textSize.y ) );
         overbarHeight = -textSize.y / 2.0;
         break;
+
+    case GR_TEXT_V_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     int overbarLength = 0;
diff --git a/common/plotters/DXF_plotter.cpp b/common/plotters/DXF_plotter.cpp
index 69a8921f21..8f76970361 100644
--- a/common/plotters/DXF_plotter.cpp
+++ b/common/plotters/DXF_plotter.cpp
@@ -975,6 +975,9 @@ void DXF_PLOTTER::plotOneLineOfText( const VECTOR2I& aPos, const COLOR4D& aColor
     case GR_TEXT_H_ALIGN_LEFT:   h_code = 0; break;
     case GR_TEXT_H_ALIGN_CENTER: h_code = 1; break;
     case GR_TEXT_H_ALIGN_RIGHT:  h_code = 2; break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     switch( aAttributes.m_Valign )
@@ -982,6 +985,9 @@ void DXF_PLOTTER::plotOneLineOfText( const VECTOR2I& aPos, const COLOR4D& aColor
     case GR_TEXT_V_ALIGN_TOP:    v_code = 3; break;
     case GR_TEXT_V_ALIGN_CENTER: v_code = 2; break;
     case GR_TEXT_V_ALIGN_BOTTOM: v_code = 1; break;
+    case GR_TEXT_V_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     // Position, size, rotation and alignment
diff --git a/common/plotters/PS_plotter.cpp b/common/plotters/PS_plotter.cpp
index ffe4a205eb..624acd84de 100644
--- a/common/plotters/PS_plotter.cpp
+++ b/common/plotters/PS_plotter.cpp
@@ -381,6 +381,9 @@ void PSLIKE_PLOTTER::computeTextParameters( const VECTOR2I&          aPos,
     case GR_TEXT_H_ALIGN_CENTER: dx = -tw / 2; break;
     case GR_TEXT_H_ALIGN_RIGHT:  dx = -tw;     break;
     case GR_TEXT_H_ALIGN_LEFT:   dx = 0;       break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     switch( aV_justify )
@@ -388,6 +391,9 @@ void PSLIKE_PLOTTER::computeTextParameters( const VECTOR2I&          aPos,
     case GR_TEXT_V_ALIGN_CENTER: dy = th / 2; break;
     case GR_TEXT_V_ALIGN_TOP:    dy = th;     break;
     case GR_TEXT_V_ALIGN_BOTTOM: dy = 0;      break;
+    case GR_TEXT_V_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     RotatePoint( &dx, &dy, aOrient );
diff --git a/common/plotters/SVG_plotter.cpp b/common/plotters/SVG_plotter.cpp
index 045070c7a7..99fb594208 100644
--- a/common/plotters/SVG_plotter.cpp
+++ b/common/plotters/SVG_plotter.cpp
@@ -816,6 +816,9 @@ void SVG_PLOTTER::Text( const VECTOR2I&        aPos,
     case GR_TEXT_H_ALIGN_CENTER: hjust = "middle"; break;
     case GR_TEXT_H_ALIGN_RIGHT:  hjust = "end";    break;
     case GR_TEXT_H_ALIGN_LEFT:   hjust = "start";  break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     switch( aV_justify )
@@ -823,6 +826,9 @@ void SVG_PLOTTER::Text( const VECTOR2I&        aPos,
     case GR_TEXT_V_ALIGN_CENTER: text_pos.y += aSize.y / 2; break;
     case GR_TEXT_V_ALIGN_TOP:    text_pos.y += aSize.y;     break;
     case GR_TEXT_V_ALIGN_BOTTOM:                            break;
+    case GR_TEXT_V_ALIGN_INDETERMINATE:
+        wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+        break;
     }
 
     VECTOR2I text_size;
diff --git a/eeschema/dialogs/dialog_lib_text_properties.cpp b/eeschema/dialogs/dialog_lib_text_properties.cpp
index 457a3cb978..e0d399fe5d 100644
--- a/eeschema/dialogs/dialog_lib_text_properties.cpp
+++ b/eeschema/dialogs/dialog_lib_text_properties.cpp
@@ -154,16 +154,18 @@ bool DIALOG_LIB_TEXT_PROPERTIES::TransferDataToWindow()
 
         switch ( m_graphicText->GetHorizJustify() )
         {
-        case GR_TEXT_H_ALIGN_LEFT:   m_hAlignLeft->Check( true );   break;
-        case GR_TEXT_H_ALIGN_CENTER: m_hAlignCenter->Check( true ); break;
-        case GR_TEXT_H_ALIGN_RIGHT:  m_hAlignRight->Check( true );  break;
+        case GR_TEXT_H_ALIGN_LEFT:          m_hAlignLeft->Check( true );   break;
+        case GR_TEXT_H_ALIGN_CENTER:        m_hAlignCenter->Check( true ); break;
+        case GR_TEXT_H_ALIGN_RIGHT:         m_hAlignRight->Check( true );  break;
+        case GR_TEXT_H_ALIGN_INDETERMINATE:                                break;
         }
 
         switch ( m_graphicText->GetVertJustify() )
         {
-        case GR_TEXT_V_ALIGN_TOP:    m_vAlignTop->Check( true );    break;
-        case GR_TEXT_V_ALIGN_CENTER: m_vAlignCenter->Check( true ); break;
-        case GR_TEXT_V_ALIGN_BOTTOM: m_vAlignBottom->Check( true ); break;
+        case GR_TEXT_V_ALIGN_TOP:           m_vAlignTop->Check( true );    break;
+        case GR_TEXT_V_ALIGN_CENTER:        m_vAlignCenter->Check( true ); break;
+        case GR_TEXT_V_ALIGN_BOTTOM:        m_vAlignBottom->Check( true ); break;
+        case GR_TEXT_V_ALIGN_INDETERMINATE:                                break;
         }
     }
     else
diff --git a/eeschema/dialogs/dialog_lib_textbox_properties.cpp b/eeschema/dialogs/dialog_lib_textbox_properties.cpp
index ac1bc80b76..8990ffa299 100644
--- a/eeschema/dialogs/dialog_lib_textbox_properties.cpp
+++ b/eeschema/dialogs/dialog_lib_textbox_properties.cpp
@@ -162,16 +162,18 @@ bool DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow()
 
     switch( m_currentText->GetHorizJustify() )
     {
-    case GR_TEXT_H_ALIGN_LEFT:   m_hAlignLeft->Check();   break;
-    case GR_TEXT_H_ALIGN_CENTER: m_hAlignCenter->Check(); break;
-    case GR_TEXT_H_ALIGN_RIGHT:  m_hAlignRight->Check();  break;
+    case GR_TEXT_H_ALIGN_LEFT:          m_hAlignLeft->Check();   break;
+    case GR_TEXT_H_ALIGN_CENTER:        m_hAlignCenter->Check(); break;
+    case GR_TEXT_H_ALIGN_RIGHT:         m_hAlignRight->Check();  break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE:                          break;
     }
 
     switch( m_currentText->GetVertJustify() )
     {
-    case GR_TEXT_V_ALIGN_TOP:    m_vAlignTop->Check();    break;
-    case GR_TEXT_V_ALIGN_CENTER: m_vAlignCenter->Check(); break;
-    case GR_TEXT_V_ALIGN_BOTTOM: m_vAlignBottom->Check(); break;
+    case GR_TEXT_V_ALIGN_TOP:           m_vAlignTop->Check();    break;
+    case GR_TEXT_V_ALIGN_CENTER:        m_vAlignCenter->Check(); break;
+    case GR_TEXT_V_ALIGN_BOTTOM:        m_vAlignBottom->Check(); break;
+    case GR_TEXT_V_ALIGN_INDETERMINATE:                          break;
     }
 
     if( m_currentText->GetTextAngle() == ANGLE_VERTICAL )
diff --git a/eeschema/fields_grid_table.cpp b/eeschema/fields_grid_table.cpp
index 826af72877..d2f1acf89f 100644
--- a/eeschema/fields_grid_table.cpp
+++ b/eeschema/fields_grid_table.cpp
@@ -584,9 +584,10 @@ wxString FIELDS_GRID_TABLE<T>::GetValue( int aRow, int aCol )
     case FDC_H_ALIGN:
         switch ( field.GetEffectiveHorizJustify() )
         {
-        case GR_TEXT_H_ALIGN_LEFT:   return _( "Left" );
-        case GR_TEXT_H_ALIGN_CENTER: return _( "Center" );
-        case GR_TEXT_H_ALIGN_RIGHT:  return _( "Right" );
+        case GR_TEXT_H_ALIGN_LEFT:          return _( "Left" );
+        case GR_TEXT_H_ALIGN_CENTER:        return _( "Center" );
+        case GR_TEXT_H_ALIGN_RIGHT:         return _( "Right" );
+        case GR_TEXT_H_ALIGN_INDETERMINATE: return INDETERMINATE_STATE;
         }
 
         break;
@@ -594,9 +595,10 @@ wxString FIELDS_GRID_TABLE<T>::GetValue( int aRow, int aCol )
     case FDC_V_ALIGN:
         switch ( field.GetEffectiveVertJustify() )
         {
-        case GR_TEXT_V_ALIGN_TOP:    return _( "Top" );
-        case GR_TEXT_V_ALIGN_CENTER: return _( "Center" );
-        case GR_TEXT_V_ALIGN_BOTTOM: return _( "Bottom" );
+        case GR_TEXT_V_ALIGN_TOP:           return _( "Top" );
+        case GR_TEXT_V_ALIGN_CENTER:        return _( "Center" );
+        case GR_TEXT_V_ALIGN_BOTTOM:        return _( "Bottom" );
+        case GR_TEXT_V_ALIGN_INDETERMINATE: return INDETERMINATE_STATE;
         }
 
         break;
diff --git a/eeschema/lib_field.cpp b/eeschema/lib_field.cpp
index 4452d804ff..28111151b8 100644
--- a/eeschema/lib_field.cpp
+++ b/eeschema/lib_field.cpp
@@ -555,18 +555,20 @@ void LIB_FIELD::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_I
 
     switch ( GetHorizJustify() )
     {
-    case GR_TEXT_H_ALIGN_LEFT:   msg = _( "Left" );   break;
-    case GR_TEXT_H_ALIGN_CENTER: msg = _( "Center" ); break;
-    case GR_TEXT_H_ALIGN_RIGHT:  msg = _( "Right" );  break;
+    case GR_TEXT_H_ALIGN_LEFT:          msg = _( "Left" );         break;
+    case GR_TEXT_H_ALIGN_CENTER:        msg = _( "Center" );       break;
+    case GR_TEXT_H_ALIGN_RIGHT:         msg = _( "Right" );        break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE: msg = INDETERMINATE_STATE; break;
     }
 
     aList.emplace_back( _( "H Justification" ), msg );
 
     switch ( GetVertJustify() )
     {
-    case GR_TEXT_V_ALIGN_TOP:    msg = _( "Top" );    break;
-    case GR_TEXT_V_ALIGN_CENTER: msg = _( "Center" ); break;
-    case GR_TEXT_V_ALIGN_BOTTOM: msg = _( "Bottom" ); break;
+    case GR_TEXT_V_ALIGN_TOP:           msg = _( "Top" );          break;
+    case GR_TEXT_V_ALIGN_CENTER:        msg = _( "Center" );       break;
+    case GR_TEXT_V_ALIGN_BOTTOM:        msg = _( "Bottom" );       break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE: msg = INDETERMINATE_STATE; break;
     }
 
     aList.emplace_back( _( "V Justification" ), msg );
diff --git a/eeschema/lib_text.cpp b/eeschema/lib_text.cpp
index 63c83b65e1..cfc4a0cb77 100644
--- a/eeschema/lib_text.cpp
+++ b/eeschema/lib_text.cpp
@@ -422,18 +422,20 @@ void LIB_TEXT::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_IT
 
     switch ( GetHorizJustify() )
     {
-    case GR_TEXT_H_ALIGN_LEFT:   msg = _( "Left" );   break;
-    case GR_TEXT_H_ALIGN_CENTER: msg = _( "Center" ); break;
-    case GR_TEXT_H_ALIGN_RIGHT:  msg = _( "Right" );  break;
+    case GR_TEXT_H_ALIGN_LEFT:          msg = _( "Left" );         break;
+    case GR_TEXT_H_ALIGN_CENTER:        msg = _( "Center" );       break;
+    case GR_TEXT_H_ALIGN_RIGHT:         msg = _( "Right" );        break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE: msg = INDETERMINATE_STATE; break;
     }
 
     aList.emplace_back( _( "H Justification" ), msg );
 
     switch ( GetVertJustify() )
     {
-    case GR_TEXT_V_ALIGN_TOP:    msg = _( "Top" );    break;
-    case GR_TEXT_V_ALIGN_CENTER: msg = _( "Center" ); break;
-    case GR_TEXT_V_ALIGN_BOTTOM: msg = _( "Bottom" ); break;
+    case GR_TEXT_V_ALIGN_TOP:           msg = _( "Top" );          break;
+    case GR_TEXT_V_ALIGN_CENTER:        msg = _( "Center" );       break;
+    case GR_TEXT_V_ALIGN_BOTTOM:        msg = _( "Bottom" );       break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE: msg = INDETERMINATE_STATE; break;
     }
 
     aList.emplace_back( _( "V Justification" ), msg );
diff --git a/eeschema/sch_field.cpp b/eeschema/sch_field.cpp
index 6e77b51775..51e1e14641 100644
--- a/eeschema/sch_field.cpp
+++ b/eeschema/sch_field.cpp
@@ -919,18 +919,20 @@ void SCH_FIELD::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_I
 
     switch ( GetHorizJustify() )
     {
-    case GR_TEXT_H_ALIGN_LEFT:   msg = _( "Left" );   break;
-    case GR_TEXT_H_ALIGN_CENTER: msg = _( "Center" ); break;
-    case GR_TEXT_H_ALIGN_RIGHT:  msg = _( "Right" );  break;
+    case GR_TEXT_H_ALIGN_LEFT:          msg = _( "Left" );         break;
+    case GR_TEXT_H_ALIGN_CENTER:        msg = _( "Center" );       break;
+    case GR_TEXT_H_ALIGN_RIGHT:         msg = _( "Right" );        break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE: msg = INDETERMINATE_STATE; break;
     }
 
     aList.emplace_back( _( "H Justification" ), msg );
 
     switch ( GetVertJustify() )
     {
-    case GR_TEXT_V_ALIGN_TOP:    msg = _( "Top" );    break;
-    case GR_TEXT_V_ALIGN_CENTER: msg = _( "Center" ); break;
-    case GR_TEXT_V_ALIGN_BOTTOM: msg = _( "Bottom" ); break;
+    case GR_TEXT_V_ALIGN_TOP:           msg = _( "Top" );          break;
+    case GR_TEXT_V_ALIGN_CENTER:        msg = _( "Center" );       break;
+    case GR_TEXT_V_ALIGN_BOTTOM:        msg = _( "Bottom" );       break;
+    case GR_TEXT_V_ALIGN_INDETERMINATE: msg = INDETERMINATE_STATE; break;
     }
 
     aList.emplace_back( _( "V Justification" ), msg );
diff --git a/eeschema/sch_label.cpp b/eeschema/sch_label.cpp
index 94613e09d5..bdd2b4e2d2 100644
--- a/eeschema/sch_label.cpp
+++ b/eeschema/sch_label.cpp
@@ -1551,19 +1551,10 @@ void SCH_DIRECTIVE_LABEL::MirrorHorizontally( int aCenter )
 
     for( SCH_FIELD& field : m_fields )
     {
-        switch( field.GetHorizJustify() )
-        {
-        case GR_TEXT_H_ALIGN_LEFT:
+        if( field.GetHorizJustify() == GR_TEXT_H_ALIGN_LEFT )
             field.SetHorizJustify( GR_TEXT_H_ALIGN_RIGHT );
-            break;
-
-        case GR_TEXT_H_ALIGN_CENTER:
-            break;
-
-        case GR_TEXT_H_ALIGN_RIGHT:
+        else if( field.GetHorizJustify() == GR_TEXT_H_ALIGN_RIGHT )
             field.SetHorizJustify( GR_TEXT_H_ALIGN_LEFT );
-            break;
-        }
 
         VECTOR2I pos = field.GetTextPos();
         VECTOR2I delta = old_pos - pos;
diff --git a/eeschema/sch_painter.cpp b/eeschema/sch_painter.cpp
index d8ae3b0024..29fbd468f8 100644
--- a/eeschema/sch_painter.cpp
+++ b/eeschema/sch_painter.cpp
@@ -709,16 +709,18 @@ void SCH_PAINTER::boxText( const wxString& aText, const VECTOR2D& aPosition,
 
     switch( aAttrs.m_Halign )
     {
-    case GR_TEXT_H_ALIGN_LEFT:                                                break;
-    case GR_TEXT_H_ALIGN_CENTER: box.SetX( box.GetX() - box.GetWidth() / 2 ); break;
-    case GR_TEXT_H_ALIGN_RIGHT:  box.SetX( box.GetX() - box.GetWidth() );     break;
+    case GR_TEXT_H_ALIGN_LEFT:                                                         break;
+    case GR_TEXT_H_ALIGN_CENTER:        box.SetX( box.GetX() - box.GetWidth() / 2 );   break;
+    case GR_TEXT_H_ALIGN_RIGHT:         box.SetX( box.GetX() - box.GetWidth() );       break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE: wxFAIL_MSG( wxT( "Legal only in dialogs" ) );  break;
     }
 
     switch(  aAttrs.m_Valign )
     {
-    case GR_TEXT_V_ALIGN_TOP:                                                  break;
-    case GR_TEXT_V_ALIGN_CENTER: box.SetY( box.GetY() - box.GetHeight() / 2 ); break;
-    case GR_TEXT_V_ALIGN_BOTTOM: box.SetY( box.GetY() - box.GetHeight() );     break;
+    case GR_TEXT_V_ALIGN_TOP:                                                          break;
+    case GR_TEXT_V_ALIGN_CENTER:        box.SetY( box.GetY() - box.GetHeight() / 2 );  break;
+    case GR_TEXT_V_ALIGN_BOTTOM:        box.SetY( box.GetY() - box.GetHeight() );      break;
+    case GR_TEXT_V_ALIGN_INDETERMINATE: wxFAIL_MSG( wxT( "Legal only in dialogs" ) );  break;
     }
 
     // Give the highlight a bit of margin.
@@ -1178,18 +1180,36 @@ void SCH_PAINTER::draw( const LIB_TEXT* aText, int aLayer, bool aDimmed )
         {
             switch( attrs.m_Halign )
             {
-            case GR_TEXT_H_ALIGN_LEFT:   pos.y = bBox.GetBottom() + shadowOffset;          break;
-            case GR_TEXT_H_ALIGN_CENTER: pos.y = ( bBox.GetTop() + bBox.GetBottom() ) / 2; break;
-            case GR_TEXT_H_ALIGN_RIGHT:  pos.y = bBox.GetTop() - shadowOffset;             break;
+            case GR_TEXT_H_ALIGN_LEFT:
+                pos.y = bBox.GetBottom() + shadowOffset;
+                break;
+            case GR_TEXT_H_ALIGN_CENTER:
+                pos.y = ( bBox.GetTop() + bBox.GetBottom() ) / 2.0;
+                break;
+            case GR_TEXT_H_ALIGN_RIGHT:
+                pos.y = bBox.GetTop() - shadowOffset;
+                break;
+            case GR_TEXT_H_ALIGN_INDETERMINATE:
+                wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+                break;
             }
         }
         else
         {
             switch( attrs.m_Halign )
             {
-            case GR_TEXT_H_ALIGN_LEFT:   pos.x = bBox.GetLeft() - shadowOffset;            break;
-            case GR_TEXT_H_ALIGN_CENTER: pos.x = ( bBox.GetLeft() + bBox.GetRight() ) / 2; break;
-            case GR_TEXT_H_ALIGN_RIGHT:  pos.x = bBox.GetRight() + shadowOffset;           break;
+            case GR_TEXT_H_ALIGN_LEFT:
+                pos.x = bBox.GetLeft() - shadowOffset;
+                break;
+            case GR_TEXT_H_ALIGN_CENTER:
+                pos.x = ( bBox.GetLeft() + bBox.GetRight() ) / 2.0;
+                break;
+            case GR_TEXT_H_ALIGN_RIGHT:
+                pos.x = bBox.GetRight() + shadowOffset;
+                break;
+            case GR_TEXT_H_ALIGN_INDETERMINATE:
+                wxFAIL_MSG( wxT( "Indeterminate state legal only in dialogs." ) );
+                break;
             }
         }
 
diff --git a/eeschema/sch_text.cpp b/eeschema/sch_text.cpp
index 3c4c398a25..650067f52f 100644
--- a/eeschema/sch_text.cpp
+++ b/eeschema/sch_text.cpp
@@ -416,9 +416,10 @@ void SCH_TEXT::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_IT
 
     switch( GetHorizJustify() )
     {
-    case GR_TEXT_H_ALIGN_LEFT:   msg = _( "Align left" );   break;
-    case GR_TEXT_H_ALIGN_CENTER: msg = _( "Align center" ); break;
-    case GR_TEXT_H_ALIGN_RIGHT:  msg = _( "Align right" );  break;
+    case GR_TEXT_H_ALIGN_LEFT:          msg = _( "Align left" );   break;
+    case GR_TEXT_H_ALIGN_CENTER:        msg = _( "Align center" ); break;
+    case GR_TEXT_H_ALIGN_RIGHT:         msg = _( "Align right" );  break;
+    case GR_TEXT_H_ALIGN_INDETERMINATE: msg = INDETERMINATE_STATE; break;
     }
 
     aList.emplace_back( _( "Justification" ), msg );
diff --git a/pagelayout_editor/dialogs/properties_frame.cpp b/pagelayout_editor/dialogs/properties_frame.cpp
index 96a71ce0c8..3aa3f04046 100644
--- a/pagelayout_editor/dialogs/properties_frame.cpp
+++ b/pagelayout_editor/dialogs/properties_frame.cpp
@@ -330,9 +330,10 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( DS_DATA_ITEM* aItem )
 
         switch( item->m_Hjustify )
         {
-        case GR_TEXT_H_ALIGN_LEFT:   m_alignLeft->Check(); break;
-        case GR_TEXT_H_ALIGN_CENTER: m_alignCenter->Check(); break;
-        case GR_TEXT_H_ALIGN_RIGHT:  m_alignRight->Check(); break;
+        case GR_TEXT_H_ALIGN_LEFT:          m_alignLeft->Check();   break;
+        case GR_TEXT_H_ALIGN_CENTER:        m_alignCenter->Check(); break;
+        case GR_TEXT_H_ALIGN_RIGHT:         m_alignRight->Check();  break;
+        case GR_TEXT_H_ALIGN_INDETERMINATE:                         break;
         }
 
         for( BITMAP_BUTTON* btn : { m_vAlignTop, m_vAlignMiddle, m_vAlignBottom } )
@@ -340,9 +341,10 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( DS_DATA_ITEM* aItem )
 
         switch( item->m_Vjustify )
         {
-        case GR_TEXT_V_ALIGN_TOP:    m_vAlignTop->Check(); break;
-        case GR_TEXT_V_ALIGN_CENTER: m_vAlignMiddle->Check(); break;
-        case GR_TEXT_V_ALIGN_BOTTOM: m_vAlignBottom->Check(); break;
+        case GR_TEXT_V_ALIGN_TOP:           m_vAlignTop->Check();    break;
+        case GR_TEXT_V_ALIGN_CENTER:        m_vAlignMiddle->Check(); break;
+        case GR_TEXT_V_ALIGN_BOTTOM:        m_vAlignBottom->Check(); break;
+        case GR_TEXT_V_ALIGN_INDETERMINATE:                          break;
         }
 
         // Text size