diff --git a/examples/flatland_2_0_example.py b/examples/flatland_2_0_example.py
index 2fa48e9622529c52034d57079e4a1dc429cf564d..f2bb4aba099eda538cf6a1ed408cd1eb7cb04548 100644
--- a/examples/flatland_2_0_example.py
+++ b/examples/flatland_2_0_example.py
@@ -32,14 +32,14 @@ speed_ration_map = {1.: 0.25,  # Fast passenger train
 
 env = RailEnv(width=50,
               height=50,
-              rail_generator=sparse_rail_generator(num_cities=11,  # Number of cities in map (where train stations are)
-                                                   num_trainstations=50,  # Number of possible start/targets on map
+              rail_generator=sparse_rail_generator(num_cities=9,  # Number of cities in map (where train stations are)
+                                                   num_trainstations=0,  # Number of possible start/targets on map
                                                    min_node_dist=8,  # Minimal distance of nodes
                                                    node_radius=3,  # Proximity of stations to city center
                                                    seed=15,  # Random seed
-                                                   grid_mode=False,
+                                                   grid_mode=True,
                                                    max_connection_points_per_side=2,
-                                                   max_nr_connection_directions=2,
+                                                   max_nr_connection_directions=4
                                                    ),
               schedule_generator=sparse_schedule_generator(),
               number_of_agents=50,
diff --git a/flatland/core/grid/grid_utils.py b/flatland/core/grid/grid_utils.py
index 1dc625c9f0166cedb16696e8ef34e8e097ba7902..14015d1a062c91c134320c80e390577d49bad72a 100644
--- a/flatland/core/grid/grid_utils.py
+++ b/flatland/core/grid/grid_utils.py
@@ -293,7 +293,7 @@ def distance_on_rail(pos1, pos2):
     return np.sqrt(np.power(pos1[0] - pos2[0], 2) + np.power(pos1[1] - pos2[1], 2))
 
 
-def closest_direction(pos1, pos2):
+def direction_to_point(pos1, pos2):
     """
     Returns the closest direction orientation of position 2 relative to position 1
     :param pos1: position we are interested in
@@ -305,9 +305,9 @@ def closest_direction(pos1, pos2):
     direction = np.sign(diff_vec[axis])
     if axis == 0:
         if direction > 0:
-            return 2
-        else:
             return 0
+        else:
+            return 2
     else:
         if direction > 0:
             return 3
diff --git a/flatland/envs/rail_generators.py b/flatland/envs/rail_generators.py
index e06e956a3d9857fbcc5dbd936c601ef7d40d506d..8c66fe39460dfdb05150e53979edca548377c6b4 100644
--- a/flatland/envs/rail_generators.py
+++ b/flatland/envs/rail_generators.py
@@ -6,7 +6,7 @@ import msgpack
 import numpy as np
 
 from flatland.core.grid.grid4_utils import get_direction, mirror
-from flatland.core.grid.grid_utils import distance_on_rail, closest_direction
+from flatland.core.grid.grid_utils import distance_on_rail, direction_to_point
 from flatland.core.grid.rail_env_grid import RailEnvTransitions
 from flatland.core.transition_map import GridTransitionMap
 from flatland.envs.grid4_generators_utils import connect_rail, connect_nodes
@@ -701,7 +701,8 @@ def sparse_rail_generator(num_cities=5, num_trainstations=2, min_node_dist=20, n
             # TODO: Change the way this code works! Check that we get sufficient direction.
             # TODO: Check if this works as expected
             while len(connection_sides_idx) < max_nr_connection_directions and idx < len(neighb_dist):
-                current_closest_direction = closest_direction(node_position, node_positions[closest_neighb_idx[idx]])
+                current_closest_direction = direction_to_point(node_position, node_positions[closest_neighb_idx[idx]])
+                print(node_position)
                 if current_closest_direction not in connection_sides_idx:
                     connection_sides_idx.append(current_closest_direction)
                 idx += 1
@@ -711,7 +712,7 @@ def sparse_rail_generator(num_cities=5, num_trainstations=2, min_node_dist=20, n
             connections_per_direction = np.zeros(4, dtype=int)
 
             for idx in connection_sides_idx:
-                nr_of_connection_points = np.random.randint(1, max_nr_connection_points + 1)
+                nr_of_connection_points = max_nr_connection_points  # np.random.randint(1, max_nr_connection_points + 1)
 
                 connections_per_direction[idx] = nr_of_connection_points
             connection_points_coordinates = []
@@ -722,13 +723,13 @@ def sparse_rail_generator(num_cities=5, num_trainstations=2, min_node_dist=20, n
                 for connection_idx in range(connections_per_direction[direction]):
                     if direction == 0:
                         connection_points_coordinates.append(
-                            (node_position[0] + node_size, node_position[1] + connection_slots[connection_idx]))
+                            (node_position[0] - node_size, node_position[1] + connection_slots[connection_idx]))
                     if direction == 1:
                         connection_points_coordinates.append(
                             (node_position[0] + connection_slots[connection_idx], node_position[1] + node_size))
                     if direction == 2:
                         connection_points_coordinates.append(
-                            (node_position[0] - node_size, node_position[1] + connection_slots[connection_idx]))
+                            (node_position[0] + node_size, node_position[1] + connection_slots[connection_idx]))
                     if direction == 3:
                         connection_points_coordinates.append(
                             (node_position[0] + connection_slots[connection_idx], node_position[1] - node_size))
@@ -737,8 +738,7 @@ def sparse_rail_generator(num_cities=5, num_trainstations=2, min_node_dist=20, n
             connection_info.append(connections_per_direction)
         return connection_points, connection_info
 
-    def _connect_cities(node_positions, connection_points, connection_info, rail_trans,
-                        grid_map):
+    def _connect_cities(node_positions, connection_points, connection_info, rail_trans, grid_map):
         """
         Function to connect the different cities through their connection points
         :param node_positions: Positions of city centers
@@ -755,7 +755,7 @@ def sparse_rail_generator(num_cities=5, num_trainstations=2, min_node_dist=20, n
                 if nbr_connection_points > 0:
                     neighb_idx = _closest_neigh_in_direction(current_node, direction, node_positions)
                     print(current_node, node_positions[current_node], direction, neighb_idx,
-                          connection_info[current_node])
+                          connection_info[current_node], connection_points[current_node])
                 else:
                     direction += 1
                     continue
@@ -914,17 +914,17 @@ def sparse_rail_generator(num_cities=5, num_trainstations=2, min_node_dist=20, n
 
     def _closest_neigh_in_direction(current_node, direction, node_positions):
         # Sort available neighbors according to their distance.
-        available_nodes = np.arange(len(node_positions))
+
         node_dist = []
-        for av_node in available_nodes:
+        for av_node in range(len(node_positions)):
             node_dist.append(distance_on_rail(node_positions[current_node], node_positions[av_node]))
-        sorted_neighbours = available_nodes[np.argsort(node_dist)]
+        sorted_neighbours = np.argsort(node_dist)
 
         for neighb in sorted_neighbours[1:]:
             distance_0 = np.abs(node_positions[current_node][0] - node_positions[neighb][0])
             distance_1 = np.abs(node_positions[current_node][1] - node_positions[neighb][1])
             if direction == 0:
-                if node_positions[neighb][0] > node_positions[current_node][0] and distance_1 <= distance_0:
+                if node_positions[neighb][0] < node_positions[current_node][0] and distance_1 <= distance_0:
                     return neighb
 
             if direction == 1:
@@ -932,7 +932,7 @@ def sparse_rail_generator(num_cities=5, num_trainstations=2, min_node_dist=20, n
                     return neighb
 
             if direction == 2:
-                if node_positions[neighb][0] < node_positions[current_node][0] and distance_1 <= distance_0:
+                if node_positions[neighb][0] > node_positions[current_node][0] and distance_1 <= distance_0:
                     return neighb
 
             if direction == 3: