Index: /src/com/innovant/josm/jrt/core/RoutingGraph.java
===================================================================
--- /src/com/innovant/josm/jrt/core/RoutingGraph.java	(revision 27758)
+++ /src/com/innovant/josm/jrt/core/RoutingGraph.java	(working copy)
@@ -35,8 +35,8 @@
 import org.jgrapht.Graph;
 import org.jgrapht.alg.BellmanFordShortestPath;
 import org.jgrapht.alg.DijkstraShortestPath;
-import org.jgrapht.graph.AsUndirectedGraph;
 import org.jgrapht.graph.DirectedWeightedMultigraph;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.Way;
@@ -42,6 +42,8 @@
 import org.openstreetmap.josm.data.osm.Way;
 
 import com.innovant.josm.jrt.osm.OsmEdge;
+import com.innovant.josm.plugin.routing.RoutingLayer;
+import com.innovant.josm.plugin.routing.RoutingModel;
 
 /**
  * Class utility to work with graph routers.
@@ -197,6 +199,11 @@
   						
   				    
   				    //this is where we link the vertices
+  						if (!routingProfile.isOnewayUsed())
+  							//"Ignore oneways" is selected
+  							addEdgeBidirectional(way, from, to);
+  						
+  						else //"Ignore oneways" is not selected
   						if (oneway_val == null || oneway_val == "false" || oneway_val == "no" || oneway_val == "0") {
   						//Case 1 (bi-way): oneway=false OR oneway=unset OR oneway=0 OR oneway=no
   						  addEdgeBidirectional(way, from, to);
@@ -325,7 +332,10 @@
         Graph<Node,OsmEdge> g;
         double totalWeight = 0;
 
-        if (graph == null)
+        RoutingLayer layer = (RoutingLayer)Main.map.mapView.getActiveLayer();
+        RoutingModel routingModel = layer.getRoutingModel();
+        
+        if (graph == null || routingModel.getWaysChanged())
             this.createGraph();
         logger.debug("apply algorithm between nodes ");
 
@@ -334,13 +344,9 @@
         }
         logger.debug("-----------------------------------");
 
-        // Assign the graph or an undirected view of the graph to g,
-        // depending on whether oneway tags are used or not
-        if (routingProfile.isOnewayUsed())
+        // Assign the graph to g
             g = graph;
-        else
-            g = new AsUndirectedGraph<Node, OsmEdge>((DirectedWeightedMultigraph<Node,OsmEdge>)graph);
-        //TODO: Problemas no tiene encuenta el tema de oneway.
+            
         switch (algorithm) {
         case ROUTING_ALG_DIJKSTRA:
             logger.debug("Using Dijkstra algorithm");
Index: /src/com/innovant/josm/plugin/routing/gui/RoutingMenu.java
===================================================================
--- /src/com/innovant/josm/plugin/routing/gui/RoutingMenu.java	(revision 27758)
+++ /src/com/innovant/josm/plugin/routing/gui/RoutingMenu.java	(working copy)
@@ -131,6 +131,7 @@
                     else
                         routingModel.routingGraph.getRoutingProfile().setOnewayUse(true);
                     routingModel.setNodesChanged();
+                    routingModel.setWaysChanged();
                     Main.map.repaint();
                 }
             }
Index: /src/com/innovant/josm/plugin/routing/RoutingModel.java
===================================================================
--- /src/com/innovant/josm/plugin/routing/RoutingModel.java	(revision 27758)
+++ /src/com/innovant/josm/plugin/routing/RoutingModel.java	(working copy)
@@ -68,6 +68,10 @@
      */
     private boolean changeNodes=false;
     /**
+     * Flag to advise about changes in ways.
+     */
+    private boolean changeWays=false;
+    /**
      * Default Constructor.
      */
     public RoutingModel(DataSet data) {
@@ -137,6 +141,7 @@
         {
             path=this.routingGraph.applyAlgorithm(nodes, Algorithm.ROUTING_ALG_DIJKSTRA);
             this.changeNodes=false;
+            this.changeWays=false;
         }
         return path;
     }
@@ -147,6 +152,20 @@
     public void setNodesChanged() {
         this.changeNodes = true;
     }
+    
+    /**
+     * Marks that some node or the node order has changed so the path should be computed again
+     */
+    public void setWaysChanged() {
+        this.changeWays = true;
+    }
+    
+    /**
+     * Marks that some node or the node order has changed so the path should be computed again
+     */
+    public boolean getWaysChanged() {
+        return this.changeWays;
+    }
 
     /**
      * Resets all data.
