Index: applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysCmdKeepAngles.java
===================================================================
--- applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysCmdKeepAngles.java	(revision 27618)
+++ applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysCmdKeepAngles.java	(revision 27619)
@@ -95,15 +95,16 @@
             // there's no need to update this node
             if (isectPnt != null) {
-            	enIsectPt = new EastNorth(isectPnt.getX(), isectPnt.getY());       	
-                calculatedNodes.put(endpoint, enIsectPt);
+            	enIsectPt = new EastNorth(isectPnt.getX(), isectPnt.getY());
+            	// Don't "record" it yet as it may not be valid
             } else if (alignedLineKeepLength.getIntersectionStatus() == IntersectionStatus.LINES_PARALLEL) {
                 alignableStatKeepAngles = AlignableStatus.ALGN_INV_ANGLE_PRESERVING_CONFLICT;
-            }
-            
-            // TODO - THIS APPROACH IS FAULTY!
-            // 
+                return;
+            }
+            
             // For the case of two adjacent segments with collinear points, the new endpoint may  
-            // not fall between enAdjOther1 and enAdjOther2; in this case one of them is redundant 
-            // and should be deleted from OSM
+            // not fall between enAdjOther1 and enAdjOther2; 
+            // this scenario is not allowed for the time being as placing the new intersection point on the line 
+            // triggers complications.
+            // TODO - find a solution
             if (alws.size() == 2 && enIsectPt != null) {
             	int middlePtIdx = AlignWaysGeomPoint.getMiddleOf3(
@@ -127,5 +128,9 @@
 	            		double eps = 1E-6;
 	                	if (!middlePt.equalsEpsilon(enIsectPt, eps)) {
-	                		// Intersection point didn't fall between the two adjacent points; something must go 
+	                		// Intersection point didn't fall between the two adjacent points; not allowed
+	                        alignableStatKeepAngles = AlignableStatus.ALGN_INV_XPOINT_FALLSOUT;
+	                        return;
+	                		
+	                        /*
 	                		if (middlePt.equalsEpsilon(enAdjOther1, eps)) {
 	                			// Delete adjOther1
@@ -135,8 +140,15 @@
 	                			// Delete adjOther2
 	                			// adjOther2.setDeleted(true);
+                			 */
 	                	}
 	            	}
             	}
             }
+            
+            if (isectPnt != null) {
+                // Angle preserving alignment passed all verification tests: record it.
+            	calculatedNodes.put(endpoint, enIsectPt);
+            }
+            
             
         } else {
@@ -196,4 +208,8 @@
                     + "Either choose the ''keep length'' aligning method or select other segments.\n");
             break;
+        case ALGN_INV_XPOINT_FALLSOUT:
+            statMsg = tr("An intersection point would fall outside its adjacent nodes.\n"
+                    + "This is an unsupported scenario.\n");
+            break;
         default:
             statMsg = tr("Undocumented problem occured.\n");
Index: applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysCmdKeepLength.java
===================================================================
--- applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysCmdKeepLength.java	(revision 27618)
+++ applications/editors/josm/plugins/alignways/src/com/tilusnet/josm/plugins/alignways/AlignWaysCmdKeepLength.java	(revision 27619)
@@ -38,5 +38,6 @@
         ALGN_INV_OUTSIDE_WORLD,
         ALGN_INV_TOOMANY_CONNECTED_WS,      // for AlignWaysCmdKeepAngles
-        ALGN_INV_ANGLE_PRESERVING_CONFLICT  // for AlignWaysCmdKeepAngles
+        ALGN_INV_ANGLE_PRESERVING_CONFLICT, // for AlignWaysCmdKeepAngles
+        ALGN_INV_XPOINT_FALLSOUT            // for AlignWaysCmdKeepAngles
     }
     final AlignWaysAlgnSegment algnSeg;
