diff --git a/src/main/java/mekanism/common/tile/TileEntityDynamicTank.java b/src/main/java/mekanism/common/tile/TileEntityDynamicTank.java
index ce9189aa1..331e3a9ca 100644
--- a/src/main/java/mekanism/common/tile/TileEntityDynamicTank.java
+++ b/src/main/java/mekanism/common/tile/TileEntityDynamicTank.java
@@ -15,6 +15,7 @@ import mekanism.common.tank.SynchronizedTankData;
 import mekanism.common.tank.SynchronizedTankData.ValveData;
 import mekanism.common.tank.TankUpdateProtocol;
 import mekanism.common.util.FluidContainerUtils.ContainerEditMode;
+import mekanism.common.util.FluidContainerUtils;
 import mekanism.common.util.MekanismUtils;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.item.ItemStack;
@@ -23,6 +24,7 @@ import net.minecraft.util.AxisAlignedBB;
 import net.minecraftforge.common.util.ForgeDirection;
 import net.minecraftforge.fluids.FluidContainerRegistry;
 import net.minecraftforge.fluids.FluidStack;
+import net.minecraftforge.fluids.IFluidContainerItem;
 import cpw.mods.fml.relauncher.Side;
 import cpw.mods.fml.relauncher.SideOnly;
 
@@ -202,7 +204,18 @@ public class TileEntityDynamicTank extends TileEntityContainerBlock implements I
 
 		if(structure.inventory[0] != null)
 		{
-			if(FluidContainerRegistry.isEmptyContainer(structure.inventory[0]))
+			if(structure.inventory[0].getItem() instanceof IFluidContainerItem)
+			{
+				if(structure.editMode == ContainerEditMode.FILL)
+				{
+					//TODO
+				}
+				else if(structure.editMode == ContainerEditMode.EMPTY)
+				{
+					//TODO
+				}
+			}
+			else if(FluidContainerRegistry.isEmptyContainer(structure.inventory[0]) && (structure.editMode == ContainerEditMode.BOTH || structure.editMode == ContainerEditMode.FILL))
 			{
 				if(structure.fluidStored != null && structure.fluidStored.amount >= FluidContainerRegistry.BUCKET_VOLUME)
 				{
@@ -241,7 +254,7 @@ public class TileEntityDynamicTank extends TileEntityContainerBlock implements I
 					}
 				}
 			}
-			else if(FluidContainerRegistry.isFilledContainer(structure.inventory[0]))
+			else if(FluidContainerRegistry.isFilledContainer(structure.inventory[0]) && (structure.editMode == ContainerEditMode.BOTH || structure.editMode == ContainerEditMode.EMPTY))
 			{
 				FluidStack itemFluid = FluidContainerRegistry.getFluidForFilledItem(structure.inventory[0]);
 
@@ -270,7 +283,6 @@ public class TileEntityDynamicTank extends TileEntityContainerBlock implements I
 								structure.inventory[1].stackSize++;
 							}
 
-							markDirty();
 							filled = true;
 						}
 					}
@@ -294,6 +306,8 @@ public class TileEntityDynamicTank extends TileEntityContainerBlock implements I
 						else {
 							structure.fluidStored.amount += itemFluid.amount;
 						}
+						
+						markDirty();
 					}
 
 					Mekanism.packetHandler.sendToAll(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())));
diff --git a/src/main/java/mekanism/common/tile/TileEntityPortableTank.java b/src/main/java/mekanism/common/tile/TileEntityPortableTank.java
index e69e10a42..b8d20b56d 100644
--- a/src/main/java/mekanism/common/tile/TileEntityPortableTank.java
+++ b/src/main/java/mekanism/common/tile/TileEntityPortableTank.java
@@ -13,6 +13,7 @@ import mekanism.common.ISustainedTank;
 import mekanism.common.Mekanism;
 import mekanism.common.network.PacketTileEntity.TileEntityMessage;
 import mekanism.common.util.FluidContainerUtils.ContainerEditMode;
+import mekanism.common.util.FluidContainerUtils;
 import mekanism.common.util.InventoryUtils;
 import mekanism.common.util.MekanismUtils;
 import net.minecraft.entity.player.EntityPlayer;
@@ -26,6 +27,7 @@ import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 import net.minecraftforge.fluids.FluidTank;
 import net.minecraftforge.fluids.FluidTankInfo;
+import net.minecraftforge.fluids.IFluidContainerItem;
 import net.minecraftforge.fluids.IFluidHandler;
 
 public class TileEntityPortableTank extends TileEntityContainerBlock implements IActiveState, IConfigurable, IFluidHandler, ISustainedTank, IFluidContainerManager
@@ -151,7 +153,42 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements
 	{
 		if(inventory[0] != null)
 		{
-			if(FluidContainerRegistry.isEmptyContainer(inventory[0]))
+			if(inventory[0].getItem() instanceof IFluidContainerItem)
+			{
+				if(editMode == ContainerEditMode.FILL)
+				{
+					int prev = fluidTank.getFluidAmount();
+					
+					fluidTank.drain(FluidContainerUtils.insertFluid(fluidTank, inventory[0]), true);
+					
+					if(prev == fluidTank.getFluidAmount() || fluidTank.getFluidAmount() == 0)
+					{
+						if(inventory[1] == null)
+						{
+							inventory[1] = inventory[0].copy();
+							inventory[0] = null;
+							
+							markDirty();
+						}
+					}
+				}
+				else if(editMode == ContainerEditMode.EMPTY)
+				{
+					fluidTank.fill(FluidContainerUtils.extractFluid(fluidTank, inventory[0]), true);
+					
+					if(((IFluidContainerItem)inventory[0].getItem()).getFluid(inventory[0]) == null || fluidTank.getFluidAmount() == fluidTank.getCapacity())
+					{
+						if(inventory[1] == null)
+						{
+							inventory[1] = inventory[0].copy();
+							inventory[0] = null;
+							
+							markDirty();
+						}
+					}
+				}
+			}
+			else if(FluidContainerRegistry.isEmptyContainer(inventory[0]) && (editMode == ContainerEditMode.BOTH || editMode == ContainerEditMode.FILL))
 			{
 				if(fluidTank.getFluid() != null && fluidTank.getFluid().amount >= FluidContainerRegistry.BUCKET_VOLUME)
 				{
@@ -181,7 +218,7 @@ public class TileEntityPortableTank extends TileEntityContainerBlock implements
 					}
 				}
 			}
-			else if(FluidContainerRegistry.isFilledContainer(inventory[0]))
+			else if(FluidContainerRegistry.isFilledContainer(inventory[0]) && (editMode == ContainerEditMode.BOTH || editMode == ContainerEditMode.EMPTY))
 			{
 				FluidStack itemFluid = FluidContainerRegistry.getFluidForFilledItem(inventory[0]);
 				int needed = getCurrentNeeded();
diff --git a/src/main/java/mekanism/common/util/FluidContainerUtils.java b/src/main/java/mekanism/common/util/FluidContainerUtils.java
index 6a757dce9..5274c9919 100644
--- a/src/main/java/mekanism/common/util/FluidContainerUtils.java
+++ b/src/main/java/mekanism/common/util/FluidContainerUtils.java
@@ -10,14 +10,19 @@ public final class FluidContainerUtils
 {
 	public static FluidStack extractFluid(FluidTank tileTank, ItemStack container)
 	{
-		return extractFluid(tileTank, container, null);
+		return extractFluid(tileTank, container, tileTank.getFluid() != null ? tileTank.getFluid().getFluid() : null);
 	}
 	
 	public static FluidStack extractFluid(FluidTank tileTank, ItemStack container, Fluid fluid)
 	{
 		IFluidContainerItem item = (IFluidContainerItem)container.getItem();
 		
-		if(fluid != null && item.getFluid(container) != null && item.getFluid(container).getFluid() != fluid)
+		if(item.getFluid(container) == null)
+		{
+			return null;
+		}
+		
+		if(fluid != null && item.getFluid(container).getFluid() != fluid)
 		{
 			return null;
 		}